Décaler l'exécution d'une macro (colonne)
tata33
-
f894009 Messages postés 17417 Date d'inscription Statut Membre Dernière intervention -
f894009 Messages postés 17417 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Comment faire pour que cette macro s'effectue sur les colonnes L à Q, V à AA etc... c'est à dire en décalant toujours de 10 colonnes vers la droite et ce jusqu'à ce qu'il n'y ait plus de données ? (dernière colonne FP à FU) (41990 lignes sur chaque colonne)
Je suis sous Excel 97 et ne sait pas comment nommer mes variables.
Merci d'avance.
Sub Macro3()
Columns("B:G").Select
Selection.AutoFilter
Selection.AutoFilter Field:=3, Criteria1:="<=9", Operator:=xlAnd
Selection.AutoFilter Field:=4, Criteria1:="<=9", Operator:=xlAnd
Selection.ClearContents
Columns("B:G").Select
Selection.SpecialCells(xlCellTypeBlanks).Select
Selection.Delete Shift:=xlUp
Columns("B:G").Select
Selection.AutoFilter
Selection.AutoFilter Field:=3, Criteria1:=">=10", Operator:=xlAnd, _
Criteria2:="<=20"
Selection.AutoFilter Field:=4, Criteria1:=">=10", Operator:=xlAnd, _
Criteria2:="<=19"
Selection.AutoFilter Field:=3, Criteria1:=">=10", Operator:=xlAnd, _
Criteria2:="<=19"
Selection.AutoFilter Field:=5, Criteria1:=">=10", Operator:=xlAnd, _
Criteria2:="<=19"
Selection.AutoFilter Field:=6, Criteria1:=">=10", Operator:=xlAnd, _
Criteria2:="<=19"
Selection.AutoFilter Field:=3, Criteria1:=">=10", Operator:=xlAnd, _
Criteria2:="<=19"
Selection.AutoFilter Field:=4, Criteria1:=">=10", Operator:=xlAnd, _
Criteria2:="<=19"
Selection.AutoFilter Field:=5, Criteria1:=">=10", Operator:=xlAnd, _
Criteria2:="<=19"
Selection.AutoFilter Field:=6, Criteria1:=">=10", Operator:=xlAnd, _
Criteria2:="<=19"
Selection.ClearContents
Selection.SpecialCells(xlCellTypeBlanks).Select
Selection.Delete Shift:=xlUp
Columns("B:G").Select
Selection.AutoFilter
Selection.AutoFilter Field:=3, Criteria1:=">=20", Operator:=xlAnd, _
Criteria2:="<=29"
Selection.AutoFilter Field:=4, Criteria1:=">=20", Operator:=xlAnd, _
Criteria2:="<=29"
Selection.AutoFilter Field:=5, Criteria1:=">=20", Operator:=xlAnd, _
Criteria2:="<=29"
Selection.AutoFilter Field:=6, Criteria1:=">=20", Operator:=xlAnd, _
Criteria2:="<=29"
Selection.ClearContents
Selection.SpecialCells(xlCellTypeBlanks).Select
Selection.Delete Shift:=xlUp
Range("B1").Select
End Sub
Comment faire pour que cette macro s'effectue sur les colonnes L à Q, V à AA etc... c'est à dire en décalant toujours de 10 colonnes vers la droite et ce jusqu'à ce qu'il n'y ait plus de données ? (dernière colonne FP à FU) (41990 lignes sur chaque colonne)
Je suis sous Excel 97 et ne sait pas comment nommer mes variables.
Merci d'avance.
Sub Macro3()
Columns("B:G").Select
Selection.AutoFilter
Selection.AutoFilter Field:=3, Criteria1:="<=9", Operator:=xlAnd
Selection.AutoFilter Field:=4, Criteria1:="<=9", Operator:=xlAnd
Selection.ClearContents
Columns("B:G").Select
Selection.SpecialCells(xlCellTypeBlanks).Select
Selection.Delete Shift:=xlUp
Columns("B:G").Select
Selection.AutoFilter
Selection.AutoFilter Field:=3, Criteria1:=">=10", Operator:=xlAnd, _
Criteria2:="<=20"
Selection.AutoFilter Field:=4, Criteria1:=">=10", Operator:=xlAnd, _
Criteria2:="<=19"
Selection.AutoFilter Field:=3, Criteria1:=">=10", Operator:=xlAnd, _
Criteria2:="<=19"
Selection.AutoFilter Field:=5, Criteria1:=">=10", Operator:=xlAnd, _
Criteria2:="<=19"
Selection.AutoFilter Field:=6, Criteria1:=">=10", Operator:=xlAnd, _
Criteria2:="<=19"
Selection.AutoFilter Field:=3, Criteria1:=">=10", Operator:=xlAnd, _
Criteria2:="<=19"
Selection.AutoFilter Field:=4, Criteria1:=">=10", Operator:=xlAnd, _
Criteria2:="<=19"
Selection.AutoFilter Field:=5, Criteria1:=">=10", Operator:=xlAnd, _
Criteria2:="<=19"
Selection.AutoFilter Field:=6, Criteria1:=">=10", Operator:=xlAnd, _
Criteria2:="<=19"
Selection.ClearContents
Selection.SpecialCells(xlCellTypeBlanks).Select
Selection.Delete Shift:=xlUp
Columns("B:G").Select
Selection.AutoFilter
Selection.AutoFilter Field:=3, Criteria1:=">=20", Operator:=xlAnd, _
Criteria2:="<=29"
Selection.AutoFilter Field:=4, Criteria1:=">=20", Operator:=xlAnd, _
Criteria2:="<=29"
Selection.AutoFilter Field:=5, Criteria1:=">=20", Operator:=xlAnd, _
Criteria2:="<=29"
Selection.AutoFilter Field:=6, Criteria1:=">=20", Operator:=xlAnd, _
Criteria2:="<=29"
Selection.ClearContents
Selection.SpecialCells(xlCellTypeBlanks).Select
Selection.Delete Shift:=xlUp
Range("B1").Select
End Sub
A voir également:
- Décaler l'exécution d'une macro (colonne)
- Déplacer une colonne excel - Guide
- Trier une colonne excel - Guide
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Colonne word - Guide
- Excel additionner une colonne - Guide
1 réponse
Bonjour,
Sub test()
Dim Nb_Iter As Integer, NumCol1 As Integer, NumCol2 As Integer
Dim Max_Iter As Integer,x,y
Max_Iter = 18
Nb_Iter=0
Do While Nb_Iter < Max_Iter
x = Nom_Colonne((10 * Nb_Iter) + 2)
y = Nom_Colonne((10 * Nb_Iter) + 7)
With Worksheets(mettre_le_Nom_de_la_feuille)
Columns(x & ":" & y).Select
Selection.AutoFilter
Selection.AutoFilter Field:=3, Criteria1:="<=9", Operator:=xlAnd
Selection.AutoFilter Field:=4, Criteria1:="<=9", Operator:=xlAnd
Selection.ClearContents
Columns(x & ":" & y).Select
Selection.SpecialCells(xlCellTypeBlanks).Select
Selection.Delete Shift:=xlUp
Columns(x & ":" & y).Select
Selection.AutoFilter
Selection.AutoFilter Field:=3, Criteria1:=">=10", Operator:=xlAnd, _
Criteria2:="<=20"
Selection.AutoFilter Field:=4, Criteria1:=">=10", Operator:=xlAnd, _
Criteria2:="<=19"
Selection.AutoFilter Field:=3, Criteria1:=">=10", Operator:=xlAnd, _
Criteria2:="<=19"
Selection.AutoFilter Field:=5, Criteria1:=">=10", Operator:=xlAnd, _
Criteria2:="<=19"
Selection.AutoFilter Field:=6, Criteria1:=">=10", Operator:=xlAnd, _
Criteria2:="<=19"
Selection.AutoFilter Field:=3, Criteria1:=">=10", Operator:=xlAnd, _
Criteria2:="<=19"
Selection.AutoFilter Field:=4, Criteria1:=">=10", Operator:=xlAnd, _
Criteria2:="<=19"
Selection.AutoFilter Field:=5, Criteria1:=">=10", Operator:=xlAnd, _
Criteria2:="<=19"
Selection.AutoFilter Field:=6, Criteria1:=">=10", Operator:=xlAnd, _
Criteria2:="<=19"
Selection.ClearContents
Selection.SpecialCells(xlCellTypeBlanks).Select
Selection.Delete Shift:=xlUp
Columns(x & ":" & y).Select
Selection.AutoFilter
Selection.AutoFilter Field:=3, Criteria1:=">=20", Operator:=xlAnd, _
Criteria2:="<=29"
Selection.AutoFilter Field:=4, Criteria1:=">=20", Operator:=xlAnd, _
Criteria2:="<=29"
Selection.AutoFilter Field:=5, Criteria1:=">=20", Operator:=xlAnd, _
Criteria2:="<=29"
Selection.AutoFilter Field:=6, Criteria1:=">=20", Operator:=xlAnd, _
Criteria2:="<=29"
Selection.ClearContents
Selection.SpecialCells(xlCellTypeBlanks).Select
Selection.Delete Shift:=xlUp
Range("B1").Select
End With
Nb_Iter = Nb_Iter + 1
Loop
End Sub
Private Function Nom_Colonne(ByVal Num_Colonne As Integer)
If Num_Colonne <= 26 Then
Nom_Colonne = Chr$(64 + Num_Colonne)
ElseIf Num_Colonne <= 52 Then
Nom_Colonne = "A" + Chr$(64 + Num_Colonne - 26)
ElseIf Num_Colonne <= 78 Then
Nom_Colonne = "B" + Chr$(64 + Num_Colonne - 52)
ElseIf Num_Colonne <= 104 Then
Nom_Colonne = "C" + Chr$(64 + Num_Colonne - 78)
ElseIf Num_Colonne <= 130 Then
Nom_Colonne = "D" + Chr$(64 + Num_Colonne - 104)
ElseIf Num_Colonne <= 156 Then
Nom_Colonne = "E" + Chr$(64 + Num_Colonne - 130)
ElseIf Num_Colonne <= 182 Then
Nom_Colonne = "F" + Chr$(64 + Num_Colonne - 156)
Else
End If
End Function
Cela devrait vous convenir
Bonne suite
Sub test()
Dim Nb_Iter As Integer, NumCol1 As Integer, NumCol2 As Integer
Dim Max_Iter As Integer,x,y
Max_Iter = 18
Nb_Iter=0
Do While Nb_Iter < Max_Iter
x = Nom_Colonne((10 * Nb_Iter) + 2)
y = Nom_Colonne((10 * Nb_Iter) + 7)
With Worksheets(mettre_le_Nom_de_la_feuille)
Columns(x & ":" & y).Select
Selection.AutoFilter
Selection.AutoFilter Field:=3, Criteria1:="<=9", Operator:=xlAnd
Selection.AutoFilter Field:=4, Criteria1:="<=9", Operator:=xlAnd
Selection.ClearContents
Columns(x & ":" & y).Select
Selection.SpecialCells(xlCellTypeBlanks).Select
Selection.Delete Shift:=xlUp
Columns(x & ":" & y).Select
Selection.AutoFilter
Selection.AutoFilter Field:=3, Criteria1:=">=10", Operator:=xlAnd, _
Criteria2:="<=20"
Selection.AutoFilter Field:=4, Criteria1:=">=10", Operator:=xlAnd, _
Criteria2:="<=19"
Selection.AutoFilter Field:=3, Criteria1:=">=10", Operator:=xlAnd, _
Criteria2:="<=19"
Selection.AutoFilter Field:=5, Criteria1:=">=10", Operator:=xlAnd, _
Criteria2:="<=19"
Selection.AutoFilter Field:=6, Criteria1:=">=10", Operator:=xlAnd, _
Criteria2:="<=19"
Selection.AutoFilter Field:=3, Criteria1:=">=10", Operator:=xlAnd, _
Criteria2:="<=19"
Selection.AutoFilter Field:=4, Criteria1:=">=10", Operator:=xlAnd, _
Criteria2:="<=19"
Selection.AutoFilter Field:=5, Criteria1:=">=10", Operator:=xlAnd, _
Criteria2:="<=19"
Selection.AutoFilter Field:=6, Criteria1:=">=10", Operator:=xlAnd, _
Criteria2:="<=19"
Selection.ClearContents
Selection.SpecialCells(xlCellTypeBlanks).Select
Selection.Delete Shift:=xlUp
Columns(x & ":" & y).Select
Selection.AutoFilter
Selection.AutoFilter Field:=3, Criteria1:=">=20", Operator:=xlAnd, _
Criteria2:="<=29"
Selection.AutoFilter Field:=4, Criteria1:=">=20", Operator:=xlAnd, _
Criteria2:="<=29"
Selection.AutoFilter Field:=5, Criteria1:=">=20", Operator:=xlAnd, _
Criteria2:="<=29"
Selection.AutoFilter Field:=6, Criteria1:=">=20", Operator:=xlAnd, _
Criteria2:="<=29"
Selection.ClearContents
Selection.SpecialCells(xlCellTypeBlanks).Select
Selection.Delete Shift:=xlUp
Range("B1").Select
End With
Nb_Iter = Nb_Iter + 1
Loop
End Sub
Private Function Nom_Colonne(ByVal Num_Colonne As Integer)
If Num_Colonne <= 26 Then
Nom_Colonne = Chr$(64 + Num_Colonne)
ElseIf Num_Colonne <= 52 Then
Nom_Colonne = "A" + Chr$(64 + Num_Colonne - 26)
ElseIf Num_Colonne <= 78 Then
Nom_Colonne = "B" + Chr$(64 + Num_Colonne - 52)
ElseIf Num_Colonne <= 104 Then
Nom_Colonne = "C" + Chr$(64 + Num_Colonne - 78)
ElseIf Num_Colonne <= 130 Then
Nom_Colonne = "D" + Chr$(64 + Num_Colonne - 104)
ElseIf Num_Colonne <= 156 Then
Nom_Colonne = "E" + Chr$(64 + Num_Colonne - 130)
ElseIf Num_Colonne <= 182 Then
Nom_Colonne = "F" + Chr$(64 + Num_Colonne - 156)
Else
End If
End Function
Cela devrait vous convenir
Bonne suite
Cependant, le fait de rechercher des cellules vides et de les supprimer en les décalant vers le haut prend beaucoup de temps : environ 1 minute et 30 s à chaque colonne.
Mais le résultat est là : c'est l'essentiel.
Merci et bon week-end (ou bonnes vacances)
Les colonnes ont-elles le meme nombre de lignes?
Parce que il est possible de selectionner une plage de cellule au lieu de colonnes entieres
Bonne suite