klm1234
XLDnaute Nouveau
Bonjour le forum!
Voilà je me fait une petite macro toute bête qui pourtant me cause bien des problèmes. Le but est simple : supprimer des cellules vides.
Je cherche à déclencher cette macro lorsqu'une modification est apportée à la feuille. En fait cette feuille est une liste de choix sur plusieurs colonnes qui est utilisée dans une liste en validation sur une autre feuille. Le problème c'est que la macro tourne en boucle continuellement sans jamais s'arrêter.
Voici mon code :
Je soupçonne plusieurs problèmes, à mon avis je ne m'y prend pas du tout de la bonne manière. La plage "rPl" est douteuse... Étant donné que "Target.Column" ne renvoie pas la lettre mais le numéro de la colonne j'ai du faire une macro qui transforme ce chiffre en colonne. Je stock cette lettre dans la variable sColL qui elle me sert à construire la plage rPl. Cette plage est tout simplement la colonne entière, moins l'en-tête (ie : "F2:F65536").
Deuxio, si mon code marche, le tout plante puisqu'en supprimant la cellule vide, cela re-déclenche le lancement de la macro, etc.
Merci tout le monde!
J'ai mis de petites explications dans le fichiers pour les visuels
Voilà je me fait une petite macro toute bête qui pourtant me cause bien des problèmes. Le but est simple : supprimer des cellules vides.
Je cherche à déclencher cette macro lorsqu'une modification est apportée à la feuille. En fait cette feuille est une liste de choix sur plusieurs colonnes qui est utilisée dans une liste en validation sur une autre feuille. Le problème c'est que la macro tourne en boucle continuellement sans jamais s'arrêter.
Voici mon code :
Code:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As range)
Dim rPl As range
Dim i As Long, x As Long
Dim sColL$
For i = Int(Log(CDbl(25 * (CDbl(Target.Column) + 1))) / Log(26)) - 1 To 0 Step -1
x = (26 ^ (i + 1) - 1) / 25 - 1
If Target.Column > x Then
sColL = sColL & Chr(((Target.Column - x - 1) \ 26 ^ i) Mod 26 + 65)
End If
Next i
Set rPl = range(sColL & "2:" & sColL & "65536")
For Each cel In rPl
If cel.Value = "" Then
If cel.Offset(1, 0) = "" Then cel.Delete (xlShiftUp)
Else Exit Sub
End If
Next
cel = Empty
End Sub
Je soupçonne plusieurs problèmes, à mon avis je ne m'y prend pas du tout de la bonne manière. La plage "rPl" est douteuse... Étant donné que "Target.Column" ne renvoie pas la lettre mais le numéro de la colonne j'ai du faire une macro qui transforme ce chiffre en colonne. Je stock cette lettre dans la variable sColL qui elle me sert à construire la plage rPl. Cette plage est tout simplement la colonne entière, moins l'en-tête (ie : "F2:F65536").
Deuxio, si mon code marche, le tout plante puisqu'en supprimant la cellule vide, cela re-déclenche le lancement de la macro, etc.
Merci tout le monde!
J'ai mis de petites explications dans le fichiers pour les visuels