BUG aléatoire sur macro .comments [RESOLU]

leakim

XLDnaute Occasionnel
Bonjour,
J'avance sur un projet de planning de groupe dans lequel je dois gérer les doublons. Avec le soutiens je jpb388, je suis parvenu à faire ce que je voulais.
Dans ma première demande
HTML:
http://www.excel-downloads.com/forum/234625-resolu-msgbox-dans-une-boucle-selon-countif.html
je procédais avec des MFC. Mais il serait mieux de marquer les doublons avec des commentaires qui sont attribués à chaque cellule qui est de doublon. Du reste, j'ai quasiment réussi à faire cela.

Je suis parfois stoppé par un bug relatif à l'inscription de commentaire, qui arrive en intermittente.

Je joints le fichier.
Leakim

Ps: question complémentaire: Dans le fichier final, j'ai pas mal de plage dynamique dans le gestionnaire de noms et plus j'avance plus la macro s'allonge en durée. Comment y remédier?
 

Pièces jointes

  • Répartition résidents forum.xls
    175.5 KB · Affichages: 52
  • Répartition résidents forum.xls
    175.5 KB · Affichages: 44
Dernière édition:

leakim

XLDnaute Occasionnel
Re : BUG aléatoire sur macro .comments

Bonjour eriiiic,
Oui c'est bien cela. Quand un commentaire existe déjà alors il est parfois pas content, et c'est le parfois qui me trouble. Je pense que c'est dû au référencement de la cellule cel. Parfois il me dit que j'ai un souci avec comme message " erreur d’exécution '91' variable d'objet ou variable de bloc with non définie" En quand je veux débugger, cela m'affiche la capture que j'ai joints, ou deux lignes plus haut If cel.Comment Is Nothing Then.

Merci,

Leakim
 
Dernière édition:

eriiic

XLDnaute Barbatruc
Re : BUG aléatoire sur macro .comments

Je n'avais pas vu que tu l'avais mis dans ton code...
Mais je m'étais basé sur ta capture écran où il n'y est pas. Sur celle-ci je l'aurais plutôt mis après le with cel. Tu es sûr de ce que tu fais dans ton code ?
Il faudrait que tu dises quelles manip faire pour avoir le pb.
eric
 

leakim

XLDnaute Occasionnel
Re : BUG aléatoire sur macro .comments

Re,
Tu es sûr de ce que tu fais dans ton code ?
C'est bien pour çà que je m'en viens sur ce post...
Je suis sûr de rien...
Lorsque tu cliques sur la zone jaune, un userform s'ouvre et tu choisis les noms. sur l'autre zone jaune tu choisis les mêmes noms et là c'est le bug... mais pas à chaque fois.
L'idée est que si il y a un doublon alors j’insère un commentaire sur les deux cellules. Mais il peut y avoir des triplons et là c'est le drame. Car je ne peux pas faire addcomment sur une cellule qui en a déjà un. alors je test si la cellule en doublon en a dejà si oui alors je mets triplon. L'idée c'est çà, mais la mise en code, c'est autre chose.

Cordialement,
Leakim
 

eriiic

XLDnaute Barbatruc
Re : BUG aléatoire sur macro .comments

Car je ne peux pas faire addcomment sur une cellule qui en a déjà un.
C'est bien pour ça que je te propose de ne l'ajouter que s'il n'y en a pas, sinon non :
Code:
If .Comment Is Nothing Then .AddComment

Et dans ta capture on lit :
Code:
                    If cel Is Nothing Then
                            With cel
dans le fichier :
Code:
                    If cel.Comment Is Nothing Then
                            With cel


Ce qui n'est pas du tout pareil comme fonctionnement. On ne sait pas où tu en es, ce que tu as choisi... Si tu ne mets pas ton code corrigé comment veux-tu qu'on sache où on en est ?
 

leakim

XLDnaute Occasionnel
Re : BUG aléatoire sur macro .comments

Re,
Je te remets là où j'en suis avec une capture à jour.
Je suis un peu perdu dans ce code que je pensai pouvoir géré...

Leakim
 

Pièces jointes

  • Captureerrorcode.JPG
    Captureerrorcode.JPG
    35.2 KB · Affichages: 56
  • Captureerrorcode.JPG
    Captureerrorcode.JPG
    35.2 KB · Affichages: 52

eriiic

XLDnaute Barbatruc
Re : BUG aléatoire sur macro .comments

Ok. Mais là on sort de la question de départ.
C'est tout le code qu'il faut revoir, sa logique.
A commencer par :
Code:
            On Error Resume Next
                 y = IsError(Range(Plage(ActiveCell)).Find(ListBox2.List(i) & d, , , xlWhole).Address)
                If y <> "" Then
                Set cel = Range(Plage(ActiveCell)).Find(ListBox2.List(i) & d, , , xlWhole)
                Lg = PremiereLigne(ActiveCell)
                Col = cel.Column
                MsgBox ListBox2.List(i) & vbCr & "doublon en " & cel.Address _
                 & vbLf & "Animateur : " & Cells(Lg - 3, Col).Text _
                 & vbLf & "Lieu : " & Cells(Lg - 2, Col).Text, vbInformation, "Attention !"
                 End If
                
            On Error GoTo 0
Déjà 6 lignes avant le on error goto 0 ça ne va pas.
Que tu aies 1 ligne (ou 2) avec une erreur attendue et connue que tu gères d'accord. Mettre plus que l'instruction en cause c'est mettre la poussière sous le tapis, met le on error goto 0 aussitôt après cette instruction.
Et fait un pas à pas en contrôlant les variables voir si ça correspond bien à ce que tu attends dans les différents cas.
Par exemple :
Code:
y = IsError(Range(Plage(ActiveCell)).Find(ListBox2.List(i) & d, , , xlWhole).Address)
                If y <> "" Then
Vu que y= True ou False je ne vois pas quand il peut être autre chose que <>"" ?
Code:
 Set cel = Range(Plage(ActiveCell)).Find(ListBox2.List(i) & d, , , xlWhole)
A moins d'être sûr à 100% de trouver la valeur (ce qui est loin d'être le cas ici), on teste ensuite pour le cas qui intéresse ou les 2 cas possibles :
Code:
if cel is nothing then
'...
else
'...
endif
Donc corrige déjà ça et reprend tout ton code en pas à pas pour tester sa logique. Je n'ai regardé qu'un bout, il y a peut-être d'autres erreurs avant.
eric

PS: et colle le texte du code en le mettant en forme plutôt qu'une image.
 

leakim

XLDnaute Occasionnel
Re : BUG aléatoire sur macro .comments

Merci eriiiic pour ton accompagnement didactique.
Je te joint le fichier dernière mouture avec les corrections de codes que tu m'as suggérés.

Code:
Private Sub CommandButton_done_Click()
Dim i, counter As Integer
Dim y, d As String
Dim Col, lg0, col0 As Integer
Dim cel As Range


    lg0 = PremiereLigne(ActiveCell)
    col0 = ActiveCell.Column
    
Application.Calculation = xlCalculationManual
    
    If CheckBox1 = True Then
    max = 15
        For i = 0 To ListBox1.ListCount - 1
            ActiveCell.Offset(i, 0) = ListBox1.List(i)
            If i = max Then Exit For
            Next i
            
    End If
    
    If CheckBox2 = True Then
    d = " 0,5"
    End If
    
        For i = 0 To ListBox1.ListCount - 1
            If ListBox1.Selected(i) = True Then ListBox2.AddItem ListBox1.List(i)
        Next i
        
        For i = 0 To ListBox2.ListCount - 1
            If ListBox2.Selected(i - counter) Then
                ListBox2.RemoveItem (i - counter)
                counter = counter + 1
            End If
        Next i
        
        For i = 0 To ListBox2.ListCount - 1
            On Error Resume Next
                 y = IsError(Range(Plage(ActiveCell)).Find(ListBox2.List(i) & d, , , xlWhole).Address)
            On Error GoTo 0
                If y = False Then
                Set cel = Range(Plage(ActiveCell)).Find(ListBox2.List(i) & d, , , xlWhole)
                Lg = PremiereLigne(ActiveCell)
                Col = cel.Column
                MsgBox ListBox2.List(i) & vbCr & "doublon en " & cel.Address _
                 & vbLf & "Animateur : " & Cells(Lg - 3, Col).Text _
                 & vbLf & "Lieu : " & Cells(Lg - 2, Col).Text, vbInformation, "Attention !"
             
                
                   If cel.Comment Is Nothing Then
                            With cel
                                .AddComment
                                .Comment.Visible = True
                                .Comment.Text Text:="ATTENTION DOUBLON !" _
                                & Chr(10) & cel.Value _
                                & Chr(10) & "Avec " & Cells(lg0 - 3, col0).Text _
                                & Chr(10) & "à " & Cells(lg0 - 2, col0).Text _
                                & Chr(10) & "cellule " & ActiveCell.Offset(i, 0).Address

                            End With
                            With ActiveCell.Offset(i, 0)
                                .Value = ListBox2.List(i) & d
                                .AddComment
                                .Comment.Visible = True
                                .Comment.Text Text:="ATTENTION DOUBLON !" _
                                & Chr(10) & ListBox2.List(i) _
                                & Chr(10) & "Animateur : " & Cells(Lg - 3, Col).Text _
                                & Chr(10) & "Lieu : " & Cells(Lg - 2, Col).Text

                            End With
                    Else
                        MsgBox "TRIPLON..." & Chr(10) & "En demi-séance c'est possible, sinon vérifier les attributions.", vbExclamation, "ATTENTION"                     'il y a déjà un commentaire dans la cellule
                            With ActiveCell.Offset(i, 0)                                    'commentaire dans la nouvelle cellule
                                .Value = ListBox2.List(i) & d
                                '.Interior.Color = 255
                                .AddComment
                                .Comment.Visible = True
                                .Comment.Text Text:="ATTENTION TRIPLON !" _
                                & Chr(10) & "en " & cel _
                                & Chr(10) & "Animateur : " & Cells(Lg - 3, Col).Text _
                                & Chr(10) & "Lieu : " & Cells(Lg - 2, Col).Text
                            End With
                    End If
                End If
                
                ActiveCell.Offset(i, 0) = ListBox2.List(i) & d

        Next i
                        Call tailleZoneCommentaire
                        Call modificationCommentaires
        
Application.Calculation = xlCalculationAutomatic

Unload UserForm1
'ActiveCell.Offset(0, 1).Select
End Sub
il il bug pas du tout au même endroit ?

J'ai laissé un commentaire dans le fichier pour que tu puisses toi aussi créer le bug.

Merci encore,
Leakim
 

Pièces jointes

  • Répartition résidents forum.xls
    174.5 KB · Affichages: 30
  • Captureerrorcode.jpg
    Captureerrorcode.jpg
    25.2 KB · Affichages: 44
  • Répartition résidents forum.xls
    174.5 KB · Affichages: 29
  • Captureerrorcode.jpg
    Captureerrorcode.jpg
    25.2 KB · Affichages: 55
Dernière édition:

eriiic

XLDnaute Barbatruc
Re : BUG aléatoire sur macro .comments

Honnetement pas trop envie de corriger ton code qui manque de logique à plusieurs endroits ce qui fait qu'on a du mal à deviner ce que tu bricoles.
Remplace ta boucle par ça :
Code:
    Dim pl as Range, c as Range
    For i = 0 To ListBox2.ListCount - 1        
        Set pl = Range(Plage(ActiveCell))
        If Not pl Is Nothing Then
            Set c = pl.Find(ListBox2.List(i) & d, , , xlWhole)
            If c Is Nothing Then
                'MsgBox "ok"
            Else
                If ActiveCell.Comment Is Nothing Then ActiveCell.AddComment
                With ActiveCell.Comment
                    .Visible = True
                    .Text Text:="ATTENTION DOUBLON avec " & c.Address
                End With
                MsgBox "Doublon"
            End If
        End If
    Next i
J'ai essayé de deviner ce que tu voulais.
Si je ne suis pas trop à coté de la plaque ça te donnera peut-être un meilleur départ.
eric
 
Dernière édition:

leakim

XLDnaute Occasionnel
Re : BUG aléatoire sur macro .comments

Re,
Juste pour t'informer de ce que cela donne

Voici le code avec lequel cela semble fonctionner. N'hésites pas à me dire ce que tu en penses.
Code:
    For i = 0 To ListBox2.ListCount - 1
        Set pl = Range(Plage(ActiveCell))
        If Not pl Is Nothing Then
            Set c = pl.Find(ListBox2.List(i) & d, , , xlWhole)
            If c Is Nothing Then
                'MsgBox "ok"
            Else
                Lg = PremiereLigne(c)
                Col = c.Column
                If ActiveCell.Offset(i, 0).Comment Is Nothing Then ActiveCell.Offset(i, 0).AddComment
                    With ActiveCell.Offset(i, 0).Comment
                        .Visible = True
                        .Text Text:="ATTENTION DOUBLON !" _
                        & Chr(10) & c _
                        & Chr(10) & "Animateur : " & Cells(Lg - 3, Col).Text _
                        & Chr(10) & "Lieu : " & Cells(Lg - 2, Col).Text
                    End With
                
                lg0 = PremiereLigne(ActiveCell)
                col0 = ActiveCell.Column
                If c.Comment Is Nothing Then c.AddComment
                    With c.Comment
                        .Visible = True
                        .Text Text:="ATTENTION DOUBLON !" _
                        & Chr(10) & c _
                        & Chr(10) & "Animateur : " & Cells(lg0 - 3, col0).Text _
                        & Chr(10) & "Lieu : " & Cells(lg0 - 2, col0).Text
                    End With
           
                MsgBox c & vbCr & "doublon en " & c.Address _
                 & vbLf & "Animateur : " & Cells(Lg - 3, Col).Text _
                 & vbLf & "Lieu : " & Cells(Lg - 2, Col).Text, vbInformation, "Attention !"
            End If
            
        End If
        ActiveCell.Offset(i, 0) = ListBox2.List(i) & d
    Next i

Je pense que je vais m'arrêter là dessus tant pis pour les triplons.

En tout cas les lenteurs auxquelles je faisais référence #1 me semble avoir disparues.

Leakim
 

Statistiques des forums

Discussions
312 215
Messages
2 086 331
Membres
103 188
dernier inscrit
evebar