Bonjour,
j'ai vu que dans un des codes, tu testes la colonne "AR", (la colonne 44) pour détruire la ligne si cette colonne est vide. Mais dans ton ménage, tu supprimes les colonnes qui n'ont aucune valeur. Cela veut dire que la colonne "AR" ne reste pas colonne "AR".
Et tu de dis rien à propos de ce critère de destruction de ligne.
Au lieu de parcourir 3 fois les lignes et faire un test dans chaque boucle, parcours 1 fois les lignes et fais tes 3 tests dans la boucle. Si test tests sont simple, tu peux les combiner avec un OU ai lieu d'enchainer les ElseIf. C'est juste une question de lisibilité du code.
Par exemple :
If .Cells(Ligne, 1) = "" Or .Cells(Ligne, 44) = 0 Then
Voici un exemple de codage, bien que je ne sois pas persuadé que le test sur la colonne 44 soit pertinent. Ce code n'est pas mieux ou moins bien que les autres. C'est une autre version.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| Sub Menage()
Dim DerniereLigne As Long, DerniereColonne As Long, Ligne As Long, Colonne As Long
With ActiveSheet
DerniereLigne = .Cells.SpecialCells(xlCellTypeLastCell).Row
DerniereColonne = .Cells.SpecialCells(xlCellTypeLastCell).Column
' Boucle sur les lignes
For Ligne = DerniereLigne To 2 Step -1
' Ligne dont la première colonne est vide
If .Cells(Ligne, 1) = "" Then
.Rows(Ligne).Delete
' Ligne n'ayant aucune valeur entre la colonne 3 et la fin
ElseIf WorksheetFunction.CountA(Range(.Cells(Ligne, 3), .Cells(Ligne, DerniereColonne))) = 0 Then
.Rows(Ligne).Delete
' Autre critère (colonne AR vide)
ElseIf .Cells(Ligne, 44) = 0 Then
.Rows(Ligne).Delete
End If
Next Ligne
' Boucle sur les colonnes
For Colonne = DerniereColonne To 3 Step -1
' Colonne n'ayant aucun valeur entre la ligne 2 et la derniere ligne
If WorksheetFunction.CountA(Range(.Cells(2, Colonne), .Cells(DerniereLigne, Colonne))) = 0 Then
.Columns(Colonne).Delete
End If
Next Colonne
End With
End Sub |
Pour l'erreur d'incompatibilité de type, utilise le débogueur pour savoir quelle ligne de code génère l'erreur et quelles sont les valeurs des variables au moment de l'erreur.
Et antonysansh a raison sur l'uniformisation de ton écriture. Ne fais pas un bête copier-coller des codes que tu glanes à droite et à gauche. Approprie-toi le code, comprend-le, adopte les meilleures pratiques. Et puis commente ton code pour t'y retrouver quand tu feras des modifications dans quelques mois.
Partager