Boucle si cellule contient un commentaire
Résolu
conrade82
Messages postés
105
Statut
Membre
-
Le Pingou Messages postés 12274 Date d'inscription Statut Contributeur Dernière intervention -
Le Pingou Messages postés 12274 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
Je souhaite créer une boucle vba dans Excel afin que sur une plage donnée, si une cellule contient un commentaire quelconque, que la cellule soit coloriée. J'ai donc crée le code suivant:
Sub Macro4()
Dim i As Integer
lastli = Workbooks("Test1").Sheets("mb").Range("A6").End(xlDown).Row
For i = 6 To lastli
If Workbooks("Test1").Sheets("mb").Range("E" & i).Comment.Text <> False Then Workbooks("Test1").Sheets("mb").Range("E" & i).Interior.ColorIndex = 39
Next
End Sub
J'ai fait un test en mettant un commentaire en E6 et en E28. Quand je lance la macro, elle colorie la cellule E6. Mais ensuite elle affiche une erreur:
"Run-time error '91': Object variable or with block variable not set.
Pourriez-vous me dire où est mon erreur ?
Merci d'avance de votre aide.
https://www.cjoint.com/?DBCoPFhnC8E
Je souhaite créer une boucle vba dans Excel afin que sur une plage donnée, si une cellule contient un commentaire quelconque, que la cellule soit coloriée. J'ai donc crée le code suivant:
Sub Macro4()
Dim i As Integer
lastli = Workbooks("Test1").Sheets("mb").Range("A6").End(xlDown).Row
For i = 6 To lastli
If Workbooks("Test1").Sheets("mb").Range("E" & i).Comment.Text <> False Then Workbooks("Test1").Sheets("mb").Range("E" & i).Interior.ColorIndex = 39
Next
End Sub
J'ai fait un test en mettant un commentaire en E6 et en E28. Quand je lance la macro, elle colorie la cellule E6. Mais ensuite elle affiche une erreur:
"Run-time error '91': Object variable or with block variable not set.
Pourriez-vous me dire où est mon erreur ?
Merci d'avance de votre aide.
https://www.cjoint.com/?DBCoPFhnC8E
6 réponses
-
Bonjour,
En fait c'est comment.Text qui provoque une erreur si le commentaire n'existe pas. Il faut tester autrement. Voici une solution :Sub Macro4() Dim i As Integer lastli = Sheets("mb").Range("A6").End(xlDown).Row For i = 6 To lastli If Not Sheets("mb").Range("E" & i).Comment Is Nothing Then Sheets("mb").Range("E" & i).Interior.ColorIndex = 39 End If Next i End Sub
J'ai enlevé le "Workbooks("Test1")." car par défaut il s'agit du classeur courant
A tester-
Bonjour,
ça fonctionne super bien. J'aurai une question, est-ce possible de faire une boucle inversée ? La boucle actuelle va de 6 à 10 par exemple. Mais peut-on partir de la cellule A10 à la cellule A6 ? Exemple que j'ai tenté et qui ne fonctionne pas:
Sub Macro4()
Dim i As Integer, decal as Integer
decal = 10
lastli = Sheets("mb").Range("A6").End(xlDown).Row
For i = decal - 1 To 6
If Not Sheets("mb").Range("E" & i).Comment Is Nothing Then
Sheets("mb").Range("E6").Interior.ColorIndex = 39
End If
Next i
End Sub
L'idée est la même que ma première question à savoir si en remontant de 10 à 6, si on tombe sur un commentaire, alors on colorie la cellule E6.
Merci du coup de main. -
j'ai tenté ceci mais je bloque pour la fin du code:
Do
decal1 = 10 - 1
If Not Sheets("mb").Range("E" & decal1).Comment Is Nothing Then
Sheets("mb").Range("E" & decal1).Copy
With Sheets("mb").Range("E6")
.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
.PasteSpecial Paste:=xlPasteComments, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
End With
End If
Loop Until Sheets("mb").Range("E" & decal1).Comment = True 'je bloque ici'
Merci de votre aide.
-
-
Bonjour ,
Avec départ A10 et fin en A6For i = 10 To 6 Step -1
.....
.....
Next i
-
Bonjour,
Au passage macro avec For et Do en commençant par la fin :Sub Macro_fornext()
Dim i As Integer, decal As Integer
lastli = Sheets("mb").Range("A6").End(xlDown).Row
For i = lastli To 6 Step -1
If Not Sheets("mb").Range("E" & i).Comment Is Nothing Then
Sheets("mb").Range("E" & i).Interior.ColorIndex = 39
End If
Next i
End SubSub Macro_doloop()
Dim i As Integer, decal As Integer
lideb = 6
lifin = Sheets("mb").Range("A6").End(xlDown).Row
c = lifin
Do
If Not Sheets("mb").Range("E" & c).Comment Is Nothing Then
Sheets("mb").Range("E" & c).Interior.ColorIndex = 39
End If
c = c - 1
Loop Until c < lideb
End Sub
-
Bonjour,
Le problème avec les boucles ci-dessus, c'est qu'elles ne s'arrêtent pas en fonction du contenu de la cellule mais en fonction de i donc de la plage définie. Or, je voudrai que ma boucle s'arrête dès que la condition IF NOT est avérée. En l'occurence, sur la palge lideb et lifin (exemple de A6 à A10), si la cellule A8 contient un commentaire, je voudrai que la macro effectue la manoeuvre (copier/coller) et la boucle s'arrête nette/ou passe au code suivant. Le but de ma démarche est de déterminer le dernier commentaire créer sur la plage de A6 à A10 par exemple car il se peut qu'il y ait des commentaires en A6, A8 et A9. Il me faut le dernier commentaire en partant de A6.
Afin de contourner cela, j'ai pensé à la boucle en Step -1 afin de faire la démarche à l'envers et ainsi déterminer le premier commentaire en partant de A10 à A6.
Désolé si je ne suis pas parvenu au premier abord de mieux exprimer mon besoin. Suite à ce que je viens d'évoquer à l'instant, comment pourrai-je faire ça ?
Merci d'avance.
-
-
Bonjour,
Je comprends, vous voulez le dernier commentaire soit le numéro de ligne le plus élevé réaliser le copier/coller et on sort de la macro. Oui / Non !
Remarque il n'y a pas de copier/coller dans votre code mais simplement une couleur de fond...! -
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
Bonjour,
Alors pour il faut insérer une instruction juste après la ligne :
Sheets("mb").Range("E" & c).Interior.ColorIndex = 39
Pour la macro For to .....Exit For
Soit :Sheets("mb").Range("E" & c).Interior.ColorIndex = 39Pour la macro Do Loop ......
Exit For
End IfExit Do
Soit :Sheets("mb").Range("E" & c).Interior.ColorIndex = 39
Exit Do
End If
-
Merci, de rien.