j'ai un code VBA qui permet d'effacer les cellules d'une colonne à partir de la 3ème ligne jusqu'à la fin de la colonne mais qui fonctionne seulement quand la 3ème ligne contient des données. Si cette 3ème ligne ne contient pas de données, la macro m'efface aussi le contenu de la 2ème ligne.
Comme vous pouvez le constater, la macro fonctionne très bien dans Effacement(2).xlsm mais pas dans Effacement(1).xlsm
Je ne comprends pas du tout pourquoi ça fait ça et je m'arrache les cheveux depuis un moment là dessus. Aussi, j'aimerais bien justement comprendre.
Ensuite, quelle serait la solution pour remédier à ce problème ?
Re : VBA : macro simple qui ne fonctionne que dans certains cas
Bonjour,
Si j'ai bien compris tu ne veux pas que la ligne 2 soit effacée?
Effacer une cellule est différent de lui mettre "" comme valeur. ""=chaine vide mais pas cellule vide.
Code:
Private Sub Test_Click()
Dim DerLigne As Long
DerLigne = Cells(1000, 1).End(xlUp).Row
If DerLigne > 2 Then
Range("A3:C" & DerLigne & ",F3:F" & DerLigne & ",H3:H" & DerLigne & ",J3:M" & DerLigne).ClearContents
End If
End Sub
Avec cette écriture entre crochet et le End(xlUp), tu recherches sur la colonne A, la dernière cellule remplie de cette colonne.
Ca fonctionne donc lorsque tu as quelque chose en A3 la première fois, mais pas les fois suivantes, ta macro choppe la 1ere ligne et te l'efface.
Plusieurs possibilités si tu veux garder ton code. Tu contrôles que tu as quelque chose d'écrit en cellule A3, si OUI tu entres dans ta boucle, sinon, tu ne fais rien.
If Range("A3") <> "" Then
For Each cel In Range([A3], [A1000].End(xlUp))
Range("A" & cel.Row & ":C" & cel.Row).Value = ""
Range("F" & cel.Row).Value = ""
Range("H" & cel.Row).Value = ""
Range("J" & cel.Row & ":M" & cel.Row).Value = ""
Next cel
End If
Ou bien, tu récupères le numéro de la dernière ligne inscrite dans ton fichier et tu regardes si c'est la ligne 3 ou supérieur.
En espérant t'avoir aiguillé.
Bonne journée
Did85
Re : VBA : macro simple qui ne fonctionne que dans certains cas
Bonsoir,
non, cells(1000,1) tout seul sans le End(xlUp) ce n'est pas 1000 lignes et 1 colonne, mais la ligne n°1000 et la 1ere colonne, donc ton écriture pointe sur sur la cellule A1000.
Si tu veux effacer une plage entièrement, utilise l'objet Range comme ceci :
Re : VBA : macro simple qui ne fonctionne que dans certains cas
Merci !
Comment alors écrire : sélectionner les cellules en colonnes A et B à partir de la 3ème ligne comprise, jusqu'à la dernière cellule qui contient des données ? ça va être quelque chose comme .End(xldown).Select ?
Re : VBA : macro simple qui ne fonctionne que dans certains cas
Re,
Merci Did85, j'étais sur autre chose.
Dans ma proposition du post #2
Le numéro de la dernière ligne est conservée dans la variable DerLigne
Si ce numéro de dernière ligne est Supérieur à 2 alors cette variable sert ensuite à construire une plage allant de la ligne3 à Derligne pour les colonnes idoines par concaténation
Re : VBA : macro simple qui ne fonctionne que dans certains cas
Merci merci Est-ce qu'il y a une raison pour laquelle tu fais référence à la ligne 1000 ? Si j'ai plus de 10 000 lignes dans mon tableau, est-ce que cela fonctionne encore ?
Re : VBA : macro simple qui ne fonctionne que dans certains cas
Re Bonsoir, est-ce qu'il existe l'équivalent de .ClearContents pour effacer non seulement les valeurs d'une cellule mais aussi sa mise en forme ?
Merci !