Décaler l'exécution d'une macro (colonne)

tata33 -  
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

1 réponse

  1. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    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
    0
    1. tata33
       
      Ca fonctionne merci beaucoup! (Juste penser à mettre le nom de la feuille entre " " )

      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)
      0
    2. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
       
      Re,
      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
      0