Boucle si cellule contient un commentaire

Résolu/Fermé
conrade82 Messages postés 96 Date d'inscription dimanche 21 avril 2013 Statut Membre Dernière intervention 9 septembre 2016 - 28 févr. 2014 à 14:41
Le Pingou Messages postés 12041 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 22 avril 2024 - 14 mars 2014 à 11:41
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

6 réponses

pilas31 Messages postés 1825 Date d'inscription vendredi 5 septembre 2008 Statut Contributeur Dernière intervention 24 avril 2020 643
28 févr. 2014 à 15:47
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
0
conrade82 Messages postés 96 Date d'inscription dimanche 21 avril 2013 Statut Membre Dernière intervention 9 septembre 2016 4
1 mars 2014 à 18:23
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.
0
conrade82 Messages postés 96 Date d'inscription dimanche 21 avril 2013 Statut Membre Dernière intervention 9 septembre 2016 4
Modifié par conrade82 le 1/03/2014 à 20:01
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.
0
Le Pingou Messages postés 12041 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 22 avril 2024 1 425
1 mars 2014 à 22:32
Bonjour ,
Avec départ A10 et fin en A6
For i = 10 To 6 Step -1
.....
.....
Next i

0
conrade82 Messages postés 96 Date d'inscription dimanche 21 avril 2013 Statut Membre Dernière intervention 9 septembre 2016 4
2 mars 2014 à 01:18
Merci Le Pingou. J'ai posté un code avec une boucle en Do et Loop until car en plus d'une boucle inversée, je voudrai que ma boucle s'arrête dès qu'une cellule contient un commentaire sur la place allant de A10 à A6. Mais mon code Loop until génère un bug. Où est mon erreur?

Merci d'avance.
0
conrade82 Messages postés 96 Date d'inscription dimanche 21 avril 2013 Statut Membre Dernière intervention 9 septembre 2016 4 > conrade82 Messages postés 96 Date d'inscription dimanche 21 avril 2013 Statut Membre Dernière intervention 9 septembre 2016
2 mars 2014 à 01:22
Si je garde le corps du code de Pilas31 et au lieu de la boucle For i, je prends une boucle en do until / loop, ça fonctionnerait? J'essaie demain ou vous dirai. Merci en tout cas de votre patience et de votre aide.
0
Le Pingou Messages postés 12041 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 22 avril 2024 1 425
2 mars 2014 à 14:30
Bonjour,
Note: ma proposition pour la boucle For ..To ....Next
Salutations.
Le Pingou
0
Le Pingou Messages postés 12041 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 22 avril 2024 1 425
2 mars 2014 à 15:04
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 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

0
conrade82 Messages postés 96 Date d'inscription dimanche 21 avril 2013 Statut Membre Dernière intervention 9 septembre 2016 4
4 mars 2014 à 16:41
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.
0
Le Pingou Messages postés 12041 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 22 avril 2024 1 425
4 mars 2014 à 17:23
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...!
0
conrade82 Messages postés 96 Date d'inscription dimanche 21 avril 2013 Statut Membre Dernière intervention 9 septembre 2016 4
4 mars 2014 à 19:18
Oui vous m'avez compris.
Remarque: vous avez raison, il ne s'agit pas de copier/coller mais de couleur de fond.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Le Pingou Messages postés 12041 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 22 avril 2024 1 425
4 mars 2014 à 21:51
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 = 39
Exit For
End If
Pour la macro Do Loop ......
Exit Do

Soit :
Sheets("mb").Range("E" & c).Interior.ColorIndex = 39
Exit Do
End If

0
conrade82 Messages postés 96 Date d'inscription dimanche 21 avril 2013 Statut Membre Dernière intervention 9 septembre 2016 4
14 mars 2014 à 09:57
Excellent! Merci beaucoup!
0
Le Pingou Messages postés 12041 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 22 avril 2024 1 425
14 mars 2014 à 11:41
Merci, de rien.
0