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 !