VBA : macro simple qui ne fonctionne que dans certains cas

Choops

XLDnaute Occasionnel
Bonjour à toutes et à tous,

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 ?

Merci d'avance ! :)
 
G

Guest

Guest
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

A+
 

did85

XLDnaute Junior
Re : VBA : macro simple qui ne fonctionne que dans certains cas

Bonjour Choops,
tu ne conditionnes pas ton effacement.
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
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
 

Choops

XLDnaute Occasionnel
Re : VBA : macro simple qui ne fonctionne que dans certains cas

Juste une chose Hasco, comment traduire exactement en français
Code:
Cells(1000, 1).End(xlUp).Row
?

Cells(1000, 1) c'est 1000 lignes, 1 colonne ?
Comment écrire pour que toute la colonne A sauf A1 et A2 soit effacée ?
 

did85

XLDnaute Junior
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 :
Range("A3: j1000").ClearContents
Tu videras le contenu en 1 seule fois du début de plage A3 jusqu'à J1000
Bonne lecture
Did85
 

Choops

XLDnaute Occasionnel
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 ?
 
G

Guest

Guest
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

Range("A3:C" & DerLigne & ",F3:F" & DerLigne & ",H3:H" & DerLigne & ",J3:M" & DerLigne).ClearContents

A+
 

Choops

XLDnaute Occasionnel
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 ?
 
G

Guest

Guest
Re : VBA : macro simple qui ne fonctionne que dans certains cas

Re,

La seule raison, est que toi tu y fasses référence dans la macro que tu nous as donnée plus haut[A1000]
Code:
For Each cel In Range([A3], [A1000].End(xlUp))

Si tu veux à partir du bas de la feuille:
Code:
DerLigne = Cells(Rows.count, 1).End(xlUp).Row

A+
 
Dernière modification par un modérateur:

Discussions similaires

Réponses
5
Affichages
192

Statistiques des forums

Discussions
312 248
Messages
2 086 595
Membres
103 250
dernier inscrit
keks974