Déboggage End If et Erreur '9

Hello tout le monde,

Pour le code suivant le débogueur me renvoie un "Wend sans While" et "End if" sans "Bloc if", pourriez-vous m'aider ?

Merci d'avance !!!

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
' envoi un mail automatique avec le contenu de l'anomalie
' Consignes de migration: rajouter un statut "Non diffusée" dans la dernière colonne du tableau
' Donner accès à Excel 2010
' Intégrer la liste de diffusion des acheteurs
' Contrôle de statut " Non diffusée

Dim ol As Object, monItem As Object
    Dim i
Dim j
Dim k
Dim cont
Dim pays
Dim SKU
Dim Référence
Dim commentaire
Dim da
Dim Coloris
Dim Dimensions

i = 2
j = 2
te = 0
k = 2

' On récupère la ou les lignes concernées par un éventuel envoi
For i = 2 To 2000

    If Worksheets("Masters _manquants").Range("I" & i).Value = "Non diffusée" Then
    Worksheets("Masters _manquants").Range("R" & j).Value = i
    j = j + 1
    End If

Next i

' On envoie les mails concernés

While Worksheets("Masters _manquants").Range("R" & k).Value <> ""
    cont = CInt(Worksheets("Masters _manquants").Range("R" & k).Value)
    'On récupère les données
    pays = Worksheets("Masters _manquants").Range("C" & cont).Value
    Référence = Worksheets("Masters _manquants").Range("B" & cont).Value
    Signature = Worksheets("Masters _manquants").Range("P" & cont).Value
    commentaire = Worksheets("Masters _manquants").Range("D" & cont).Value
    da = Worksheets("Masters _manquants").Range("A" & cont).Value
    Coloris = Worksheets("Masters _manquants").Range("E" & cont).Value
    Dimensions = Worksheets("Masters _manquants").Range("G" & cont).Value

    'On envoit le mail en question
    Set ol = CreateObject("outlook.application")
    Set monItem = ol.CreateItem(olMailItem)
    'monItem.To = " brice.pacheco@louisvuitton.com "
    If Worksheets("Master_manquants").Range("c2").Value = "Brésil" Then
    monItem.To = " brice.pacheco@louisvuitton.com "
    Else
        If Worksheets("Master_manquants").Range("c2").Value = "Chili" Then
    monItem.To = " brice.pacheco2@louisvuitton.com "
    Else
        If Worksheets("Master_manquants").Range("c2").Value = "Colombie" Then
    monItem.To = " brice.pacheco3@louisvuitton.com "
    Else
        If Worksheets("Master_manquants").Range("c2").Value = "Israël" Then
    monItem.To = " brice.pacheco4@louisvuitton.com "
    Else
        If Worksheets("Master_manquants").Range("c2").Value = "Ukraine" Then
    monItem.To = " brice.pacheco5@louisvuitton.com "
    Else
        If Worksheets("Master_manquants").Range("c2").Value = "Russie" Then
    monItem.To = " brice.pacheco6@louisvuitton.com "
    Else
        If Worksheets("Master_manquants").Range("c2").Value = "Kazakhstan" Then
    monItem.To = " brice.pacheco7@louisvuitton.com "
    Else
     monItem.To = " brice.pacheco8@louisvuitton.com "
    End If
    monItem.Cc = " brice.pacheco@louisvuitton.com; Controle_Qualite_DERET.fr@louisvuitton.com "
    monItem.Subject = "Countrylabeling default " & Référence & pays
    monItem.Body = "Hello," & Chr(13) & Chr(13) & "For the sipment n°" & Référence & " for " & pays & " on " & da & ", we could not labelised all products. Thanks to be careful to the coloured pastille on the concerning parcels" & Chr(13) & Chr(13) & "Best regards," & Chr(13) & Chr(13) & Signature
    monItem.Send
    Set ol = Nothing
    k = k + 1

    'On change le statut de l'anomalie
    Worksheets("Masters _manquants").Range("I" & cont).Value = "OK"
Wend

Worksheets("Masters _manquants").Range("R2:R40").ClearContents

End Sub

Bonjour,

Incremente ton code et tu verras que tu as une qté de IF sans END IF

Bonjour M12 et merci de ta réponse,

Je suis un peu débutant, que veux-tu dire par incrémenter ?

Néanmoins j'ai compris qu'il manquait des End If (comme il manquerait des fermetures de parenthèses sur Excel).

J'ai donc réécris mon code (à voir ci-dessous) mais j'obtiens l'erreur "Erreur d'exécution '9' : L'indice n'appartient pas à la sélection sur ma ligne :

 If Worksheets("Master_manquants").Range("C2").Value = "Brésil" Then

Je suppose avoir le même problème sur les lignes d'en-dessous. Quel est la nature de cette erreur s'il vous plaît ?

Merci d'avance !

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
' envoi un mail automatique avec le contenu de l'anomalie
' Consignes de migration: rajouter un statut "Non diffusée" dans la dernière colonne du tableau
' Donner accès à Excel 2010
' Intégrer la liste de diffusion des acheteurs
' Contrôle de statut " Non diffusée

Dim ol As Object, monItem As Object
    Dim i
Dim j
Dim k
Dim cont
Dim pays
Dim SKU
Dim Référence
Dim commentaire
Dim da
Dim Coloris
Dim Dimensions

i = 2
j = 2
te = 0
k = 2

' On récupère la ou les lignes concernées par un éventuel envoi
For i = 2 To 2000

    If Worksheets("Masters _manquants").Range("E" & i).Value = "Non diffusée" Then
    Worksheets("Masters _manquants").Range("R" & j).Value = i
    j = j + 1
    End If

Next i

' On envoie les mails concernés

While Worksheets("Masters _manquants").Range("R" & k).Value <> ""
    cont = CInt(Worksheets("Masters _manquants").Range("R" & k).Value)
    'On récupère les données
    pays = Worksheets("Masters _manquants").Range("C" & cont).Value
    Référence = Worksheets("Masters _manquants").Range("B" & cont).Value
    Signature = Worksheets("Masters _manquants").Range("P" & cont).Value
    commentaire = Worksheets("Masters _manquants").Range("D" & cont).Value
    da = Worksheets("Masters _manquants").Range("A" & cont).Value
    Coloris = Worksheets("Masters _manquants").Range("E" & cont).Value
    Dimensions = Worksheets("Masters _manquants").Range("G" & cont).Value

    'On envoit le mail en question
    Set ol = CreateObject("outlook.application")
    Set monItem = ol.CreateItem(olMailItem)
    'monItem.To = " brice.pacheco@louisvuitton.com "
    If Worksheets("Master_manquants").Range("C2").Value = "Brésil" Then
    monItem.To = " brice.pacheco@louisvuitton.com "
    Else
        If Worksheets("Master_manquants").Range("c2").Value = "Chili" Then
    monItem.To = " brice.pacheco2@louisvuitton.com "
    Else
        If Worksheets("Master_manquants").Range("c2").Value = "Colombie" Then
    monItem.To = " brice.pacheco3@louisvuitton.com "
    Else
        If Worksheets("Master_manquants").Range("c2").Value = "Israël" Then
    monItem.To = " brice.pacheco4@louisvuitton.com "
    Else
        If Worksheets("Master_manquants").Range("c2").Value = "Ukraine" Then
    monItem.To = " brice.pacheco5@louisvuitton.com "
    Else
        If Worksheets("Master_manquants").Range("c2").Value = "Russie" Then
    monItem.To = " brice.pacheco6@louisvuitton.com "
    Else
        If Worksheets("Master_manquants").Range("c2").Value = "Kazakhstan" Then
    monItem.To = " brice.pacheco7@louisvuitton.com "
    Else
     monItem.To = " brice.pacheco8@louisvuitton.com "
    End If
    End If
    End If
    End If
    End If
    End If
    End If
    monItem.Cc = " brice.pacheco@louisvuitton.com; Controle_Qualite_DERET.fr@louisvuitton.com "
    monItem.Subject = "Countrylabeling default " & Référence & pays
    monItem.Body = "Hello," & Chr(13) & Chr(13) & "For the sipment n°" & Référence & " for " & pays & " on " & da & ", we could not labelised all products. Thanks to be careful to the coloured pastille on the concerning parcels" & Chr(13) & Chr(13) & "Best regards," & Chr(13) & Chr(13) & Signature
    monItem.Send
    Set ol = Nothing
    k = k + 1

    'On change le statut de l'anomalie
    Worksheets("Masters _manquants").Range("E" & cont).Value = "OK"
Wend

Worksheets("Masters _manquants").Range("R2:R40").ClearContents

End Sub

Bonjour,

tu devrais installer smart Indent : https://www.add-ins.com/macro-products-for-Microsoft-Excel/how-to-indent-vba-code/how-to-indent-vba-code.htm

Par contre je ne sais pas si c'est ok sur 2016

Voilà ton code correctement indenté :

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    ' envoi un mail automatique avec le contenu de l'anomalie
    ' Consignes de migration: rajouter un statut "Non diffusée" dans la dernière colonne du tableau
    ' Donner accès à Excel 2010
    ' Intégrer la liste de diffusion des acheteurs
    ' Contrôle de statut " Non diffusée

    Dim ol As Object, monItem As Object
    Dim i
    Dim j
    Dim k
    Dim cont
    Dim pays
    Dim SKU
    Dim Référence
    Dim commentaire
    Dim da
    Dim Coloris
    Dim Dimensions

    i = 2
    j = 2
    te = 0
    k = 2

    ' On récupère la ou les lignes concernées par un éventuel envoi
    For i = 2 To 2000

        If Worksheets("Masters _manquants").Range("I" & i).Value = "Non diffusée" Then
            Worksheets("Masters _manquants").Range("R" & j).Value = i
            j = j + 1
        End If

    Next i

    ' On envoie les mails concernés

    While Worksheets("Masters _manquants").Range("R" & k).Value <> ""
        cont = CInt(Worksheets("Masters _manquants").Range("R" & k).Value)
        'On récupère les données
        pays = Worksheets("Masters _manquants").Range("C" & cont).Value
        Référence = Worksheets("Masters _manquants").Range("B" & cont).Value
        Signature = Worksheets("Masters _manquants").Range("P" & cont).Value
        commentaire = Worksheets("Masters _manquants").Range("D" & cont).Value
        da = Worksheets("Masters _manquants").Range("A" & cont).Value
        Coloris = Worksheets("Masters _manquants").Range("E" & cont).Value
        Dimensions = Worksheets("Masters _manquants").Range("G" & cont).Value

        'On envoit le mail en question
        Set ol = CreateObject("outlook.application")
        Set monItem = ol.CreateItem(olMailItem)
        'monItem.To = " <!-- e --><a href="mailto:brice.pacheco@louisvuitton.com">brice.pacheco@louisvuitton.com</a><!-- e --> "
        If Worksheets("Master_manquants").Range("c2").Value = "Brésil" Then
            monItem.To = " <!-- e --><a href="mailto:brice.pacheco@louisvuitton.com">brice.pacheco@louisvuitton.com</a><!-- e --> "
        Else
            If Worksheets("Master_manquants").Range("c2").Value = "Chili" Then
                monItem.To = " <!-- e --><a href="mailto:brice.pacheco2@louisvuitton.com">brice.pacheco2@louisvuitton.com</a><!-- e --> "
            Else
                If Worksheets("Master_manquants").Range("c2").Value = "Colombie" Then
                    monItem.To = " <!-- e --><a href="mailto:brice.pacheco3@louisvuitton.com">brice.pacheco3@louisvuitton.com</a><!-- e --> "
                Else
                    If Worksheets("Master_manquants").Range("c2").Value = "Israël" Then
                        monItem.To = " <!-- e --><a href="mailto:brice.pacheco4@louisvuitton.com">brice.pacheco4@louisvuitton.com</a><!-- e --> "
                    Else
                        If Worksheets("Master_manquants").Range("c2").Value = "Ukraine" Then
                            monItem.To = " <!-- e --><a href="mailto:brice.pacheco5@louisvuitton.com">brice.pacheco5@louisvuitton.com</a><!-- e --> "
                        Else
                            If Worksheets("Master_manquants").Range("c2").Value = "Russie" Then
                                monItem.To = " <!-- e --><a href="mailto:brice.pacheco6@louisvuitton.com">brice.pacheco6@louisvuitton.com</a><!-- e --> "
                            Else
                                If Worksheets("Master_manquants").Range("c2").Value = "Kazakhstan" Then
                                    monItem.To = " <!-- e --><a href="mailto:brice.pacheco7@louisvuitton.com">brice.pacheco7@louisvuitton.com</a><!-- e --> "
                                Else
                                    monItem.To = " <!-- e --><a href="mailto:brice.pacheco8@louisvuitton.com">brice.pacheco8@louisvuitton.com</a><!-- e --> "
                                End If
                                monItem.Cc = " <!-- e --><a href="mailto:brice.pacheco@louisvuitton.com">brice.pacheco@louisvuitton.com</a><!-- e -->; <!-- e --><a href="mailto:Controle_Qualite_DERET.fr@louisvuitton.com">Controle_Qualite_DERET.fr@louisvuitton.com</a><!-- e --> "
                                monItem.Subject = "Countrylabeling default " & Référence & pays
                                monItem.Body = "Hello," & Chr(13) & Chr(13) & "For the sipment n°" & Référence & " for " & pays & " on " & da & ", we could not labelised all products. Thanks to be careful to the coloured pastille on the concerning parcels" & Chr(13) & Chr(13) & "Best regards," & Chr(13) & Chr(13) & Signature
                                monItem.Send
                                Set ol = Nothing
                                k = k + 1

                                'On change le statut de l'anomalie
                                Worksheets("Masters _manquants").Range("I" & cont).Value = "OK"
                            Wend

                            Worksheets("Masters _manquants").Range("R2:R40").ClearContents

                        End Sub

Je pense que c'est Else If que tu voulais et non Else

Tu peux aussi utiliser Select Case comme structure,

voire même une table sur une feuille qui t'évitera de reprendre ton code à chaque modif, et que tu pourras étendre à volonté.

eric

Bonjour Eriiic,

Merci de ta réponse mais je ne comprends pas bien où tu veux en venir. Remplacer mes Else par Else if m'éviterait les erreur '9' ?

Si je remplace Else par Else if, je dois quand même laisser le If juste en dessous n'est-ce pas ?

Merci d'avance

Pour vous expliquer plus clairement, je souhaite que selon le pays renseigné dans la case, la liste de diffusion change.

Merci d'avance !!

Bonjour,

Voir le chapitre 4 du menu Cours VBA de ce site.

eric

Merci beaucoup Eriiic, j'ai fini par faire remarcher tout cela !

Rechercher des sujets similaires à "deboggage end erreur"