Boucle si cellule contient un commentaire
Résolu
conrade82
Messages postés
96
Date d'inscription
Statut
Membre
Dernière intervention
-
Le Pingou Messages postés 12249 Date d'inscription Statut Contributeur Dernière intervention -
Le Pingou Messages postés 12249 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
A voir également:
- Boucle si cellule contient un commentaire
- Excel cellule couleur si condition texte - Guide
- Google sheet si cellule contient texte alors afficher ✓ - Forum Excel
- Commentaire word - Guide
- Si cellule contient texte alors ✓ - Forum Excel
- Le fichier à télécharger comporte plusieurs calques. l’un d’eux contient un mot caché. quel est ce mot ? - Forum Téléchargement
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 :
J'ai enlevé le "Workbooks("Test1")." car par défaut il s'agit du classeur courant
A tester
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 ,
Avec départ A10 et fin en A6
Avec départ A10 et fin en A6
For i = 10 To 6 Step -1
.....
.....
Next i
Bonjour,
Au passage macro avec For et Do en commençant par la fin :
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 Sub
Sub 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.
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...!
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 .....
Soit :
Soit :
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 If
Exit Do
Soit :
Sheets("mb").Range("E" & c).Interior.ColorIndex = 39
Exit Do
End If
ç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:
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.
Merci de votre aide.