Erreur 400 VB

doudou69820 Messages postés 18 Date d'inscription mercredi 26 mai 2010 Statut Membre Dernière intervention 10 juin 2010 - 26 mai 2010 à 13:42
jrivet Messages postés 7393 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 - 26 mai 2010 à 16:35
Bonjour,
Quand j'éxécute ce macro, l'erreur 400 apparait et je ne trouve pas le pourquoi...
Je suis débutant en VB donc merci de m'aider!

Voici mon programme :

Sub Vérification_générale()
'création d'une nouvelle feuille contenant les retards
nom = "retard au " & DateTime.Date$ 'nom de la nouvelle feuille
ActiveWorkbook.Sheets.Add After:=Worksheets(Worksheets.Count) 'ajoute la nouvelle feuille à la suite des autres
ActiveSheet.Name = nom
ActiveSheet.Columns("A:K").Select
Selection.ColumnWidth = 15.71 'largeur de la colonne de la nouvelle feuille
'je mets les noms aux colonnes
ActiveSheet.Range("B1").Value = Sheets("Vérif").Range("B1").Value
ActiveSheet.Range("c1").Value = Sheets("Vérif").Range("c1").Value
ActiveSheet.Range("d1").Value = Sheets("Vérif").Range("d1").Value
ActiveSheet.Range("e1").Value = Sheets("Vérif").Range("e1").Value
ActiveSheet.Range("f1").Value = Sheets("Vérif").Range("f1").Value
ActiveSheet.Range("g1").Value = Sheets("Vérif").Range("g1").Value
ActiveSheet.Range("h1").Value = Sheets("Vérif").Range("h1").Value
ActiveSheet.Range("i1").Value = Sheets("Vérif").Range("i1").Value
ActiveSheet.Range("j1").Value = Sheets("Vérif").Range("j1").Value
ActiveSheet.Range("k1").Value = Sheets("Vérif").Range("k1").Value
ActiveSheet.UsedRange.Rows(1).EntireRow.Select
Selection.Orientation = 90
Selection.RowHeight = 97.5
Selection.WrapText = True
'ActiveSheet est la nouvelle feuille

Dim NumLigne As Integer
NumLigne = 4 'première ligne d'agence
Dim NumColonne As Integer
'pour chaque colonne
For NumColonne = 2 To 11
' tant qu'il y a des agences dans la colonne
While Not Sheets("Vérif").Range("A" & NumLigne).Value = ""
If Not Sheets("Vérif").Cells(NumLigne, NumColonne).Value = "" Then 'je test si la case est vide, puisque dans ce cas le calcul ne doit pas être fait
'pour chaque agence, je test la date
If Sheets("Vérif").Range("L27").Value > Sheets("Vérif").Cells(NumLigne, NumColonne).Value + Sheets("Vérif").Cells(3, NumColonne).Value Then
'si la date est passé, je change la couleur de la case
Sheets("Vérif").Cells(NumLigne, NumColonne).Interior.ColorIndex = 3
Dim j As Integer
j = 2
'puis je met le nom de l'agence en question dans le tableau de la feuil3 à la première case vide
While Not ActiveSheet.Cells(j, NumColonne).Value = ""
j = j + 1
Wend
ActiveSheet.Cells(j, NumColonne).Value = Sheets("Vérif").Range("A" & NumLigne).Value
End If
End If
NumLigne = NumLigne + 1 ' j'incrémente la variable de boucle
Wend
NumLigne = 4 'on remet le compteur à la première ligne
Next NumColonne
ActiveSheet.Range("A1").Select
Call Feuil1.envoi_mail
End Sub




Public Sub envoi_mail()
' corps du message
Dim corps As String
Dim NumColonne
Dim NumLigne As Integer
NumLigne = 4 'première ligne d'agence
Dim olApp As Object
Set olApp = CreateObject("Outlook.Application")

' pour chaque agence, on cherche quelles colonnes sont en retard
While Not Sheets("Vérif").Range("A" & NumLigne).Value = ""
'le corps du message est contenu dans la variable "corps"
corps = "Mesdames et Messieurs, Veuillez trouver ci-après la liste des vérifications périodiques en retard dans votre agence.
Si aucune liste présente ci-dessous, vos visites périodiques sont donc à jour.
"
For NumColonne = 2 To 11
Dim ligne As Integer
ligne = 2
While Not Sheets(Worksheets.Count).Cells(ligne, NumColonne) = ""
If Sheets(Worksheets.Count).Cells(ligne, NumColonne) = Sheets("Vérif").Range("A" & NumLigne).Value Then
corps = corps & Sheets(Worksheets.Count).Cells(1, NumColonne) & "
"
End If
ligne = ligne + 1
Wend
Next NumColonne
corps = corps & "Merci de bien vouloir réguler la situation, si nécessaire, dans les plus brefs délais et/ou nous transmettre une copie du rapport de vérification.
Merci de vérifier les dates de vos prochaines visites.

Cordialement, Service QSE Message généré automatiquement, pour toute remarque appeler le service prévention au 04.74.08.90.64"
If Not corps = "" Then
Dim destinataire1 As String
Dim destinataire2 As String
Dim destinataire3 As String
destinataire1 = Sheets("adresses mail").Cells(NumLigne - 3, 2)
destinataire2 = Sheets("adresses mail").Cells(NumLigne - 3, 3)
destinataire3 = Sheets("adresses mail").Cells(NumLigne - 3, 4)
With olApp.CreateItem(0)
.Recipients.Add destinataire1
.Recipients.Add destinataire2
.Recipients.Add destinataire3
.Subject = "retard vérification(s) périodique(s)"
' .body = corps
.htmlbody = corps
.ReadReceiptRequested = False

'.Attachments.Add "c:\Dok1.doc"
.Send
End With
'Dim iMsg As Object, iConf As Object
'Set iMsg = CreateObject("CDO.Message")
'Set iConf = CreateObject("CDO.Configuration")
'With iMsg
' Set .Configuration = iConf
'.To = destinataire1
'.From = 'youralias@yourdomain.com'
' .Subject = "retard vérification(s) périodique(s)"
' .HTMLBody = corps
'.Fields('urn:schemas:mailheader:disposition-notification-to') = 'expediteur@monMail.fr'
'.Fields('urn:schemas:mailheader:return-receipt-to') = 'expediteur@monMail.fr'
'.Fields.Update
' .Send
' End With
End If
NumLigne = NumLigne + 1
Wend


Set olApp = Nothing
End Sub

10 réponses

jrivet Messages postés 7393 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
26 mai 2010 à 14:39
Salut,
IL ne te donne pas une ligne spéciale?
Un peu de couleur?
Public Sub envoi_mail()
' corps du message
Dim corps As String
Dim NumColonne
Dim NumLigne As Integer
NumLigne =  4 'première ligne d'agence
Dim olApp As Object
Set olApp = CreateObject("Outlook.Application")

    ' pour chaque agence, on cherche quelles colonnes sont en retard
    While Not Sheets("Vérif").Range("A" & NumLigne).Value = ""
    'le corps du message est contenu dans la variable "corps"
        corps = "Mesdames et Messieurs, Veuillez trouver ci-après la liste des vérifications périodiques en retard dans votre agence.
Si aucune liste présente ci-dessous, vos visites périodiques sont donc à jour.
"
        For NumColonne = 2 To 11
            Dim ligne As Integer
            ligne = 2
            While Not Sheets(Worksheets.Count).Cells(ligne, NumColonne) = ""
                If Sheets(Worksheets.Count).Cells(ligne, NumColonne) = Sheets("Vérif").Range("A" & NumLigne).Value Then
                    corps = corps & Sheets(Worksheets.Count).Cells(1, NumColonne) & "
"
                End If
                ligne = ligne + 1
            Wend
        Next NumColonne
        corps = corps & "Merci de bien vouloir réguler la situation, si nécessaire, dans les plus brefs délais et/ou nous transmettre une copie du rapport de vérification.
Merci de vérifier les dates de vos prochaines visites.

Cordialement, Service QSE Message généré automatiquement, pour toute remarque appeler le service prévention au 04.74.08.90.64"
        If Not corps  = "" Then
            Dim destinataire1 As String
            Dim destinataire2 As String
            Dim destinataire3 As String
            destinataire1 = Sheets("adresses mail").Cells(NumLigne - 3, 2)
            destinataire2 = Sheets("adresses mail").Cells(NumLigne - 3, 3)
            destinataire3 = Sheets("adresses mail").Cells(NumLigne - 3, 4)
            With olApp.CreateItem(0)
                .Recipients.Add destinataire1
                .Recipients.Add destinataire2
                .Recipients.Add destinataire3
                .Subject = "retard vérification(s) périodique(s)"
                .htmlbody = corps
                .ReadReceiptRequested = False
                Call .Send
            End With
        
        End If
        NumLigne = NumLigne + 1
    Wend


Set olApp = Nothing
End Sub


Sub Vérification_générale()

Dim NumLigne As Integer
Dim NumColonne As Integer
Dim j As Integer
    'création d'une nouvelle feuille contenant les retards
    nom = "retard au " & DateTime.Date$ 'nom de la nouvelle feuille
    ActiveWorkbook.Sheets.Add After:=Worksheets(Worksheets.Count) 'ajoute la nouvelle feuille à la suite des autres
    ActiveSheet.Name = nom
    ActiveSheet.Columns("A:K").Select
    Selection.ColumnWidth = 15.71 'largeur de la colonne de la nouvelle feuille
    'je mets les noms aux colonnes
    ActiveSheet.Range("B1").Value = Sheets("Vérif").Range("B1").Value
    ActiveSheet.Range("c1").Value = Sheets("Vérif").Range("c1").Value
    ActiveSheet.Range("d1").Value = Sheets("Vérif").Range("d1").Value
    ActiveSheet.Range("e1").Value = Sheets("Vérif").Range("e1").Value
    ActiveSheet.Range("f1").Value = Sheets("Vérif").Range("f1").Value
    ActiveSheet.Range("g1").Value = Sheets("Vérif").Range("g1").Value
    ActiveSheet.Range("h1").Value = Sheets("Vérif").Range("h1").Value
    ActiveSheet.Range("i1").Value = Sheets("Vérif").Range("i1").Value
    ActiveSheet.Range("j1").Value = Sheets("Vérif").Range("j1").Value
    ActiveSheet.Range("k1").Value = Sheets("Vérif").Range("k1").Value
    ActiveSheet.UsedRange.Rows(1).EntireRow.Select
    Selection.Orientation = 90
    Selection.RowHeight = 97.5
    Selection.WrapText = True
    'ActiveSheet est la nouvelle feuille

    

    'pour chaque colonne
    For NumColonne = 2 To 11
        NumLigne = 4 'première ligne d'agence
        ' tant qu'il y a des agences dans la colonne
        While Not Sheets("Vérif").Range("A" & NumLigne).Value = ""
            If Not Sheets("Vérif").Cells(NumLigne, NumColonne).Value = "" Then 'je test si la case est vide, puisque dans ce cas le calcul ne doit pas être fait
            'pour chaque agence, je test la date
                If Sheets("Vérif").Range("L27").Value > Sheets("Vérif").Cells(NumLigne, NumColonne).Value + Sheets("Vérif").Cells(3, NumColonne).Value Then
                'si la date est passé, je change la couleur de la case
                    Sheets("Vérif").Cells(NumLigne, NumColonne).Interior.ColorIndex = 3
                    j = 2
                    'puis je met le nom de l'agence en question dans le tableau de la feuil3 à la première case vide
                    While Not ActiveSheet.Cells(j, NumColonne).Value = ""
                        j = j + 1
                    Wend
                    ActiveSheet.Cells(j, NumColonne).Value = Sheets("Vérif").Range("A" & NumLigne).Value
                End If
            End If
            NumLigne = NumLigne + 1 ' j'incrémente la variable de boucle
        Wend
    Next NumColonne
    Call ActiveSheet.Range("A1").Select
    Call Feuil1.envoi_mail
End Sub



@+: Ju£i€n
Pensez: Réponse acceptée
0
doudou69820 Messages postés 18 Date d'inscription mercredi 26 mai 2010 Statut Membre Dernière intervention 10 juin 2010
26 mai 2010 à 15:04
Oui julien^^
Mais il m'affiche maintenan un message d'erreur avec rien d'écrit dedans...
0
jrivet Messages postés 7393 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
26 mai 2010 à 15:08
Avec ton code d'origine ou celui que j'ai coloré? => si c'est le mien , il est possible que j'ai fait une boulette

- As tu essayé de débugger pas à pas?

Au passage pourrais tu rappeler l'intitulé de l'erreur 400 ?



@+: Ju£i€n
Pensez: Réponse acceptée
0
doudou69820 Messages postés 18 Date d'inscription mercredi 26 mai 2010 Statut Membre Dernière intervention 10 juin 2010
26 mai 2010 à 15:12
Avec ton code!
Il y a une erreur de compilation au niveau du premier module :
Call Feuil1.envoi_mail
0

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

Posez votre question
jrivet Messages postés 7393 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
26 mai 2010 à 15:31
OK.

On reprends le tien pour continuer alors.

[b]
- As tu essayé de débugger pas à pas?
- Au passage pourrais tu rappeler l'intitulé de l'erreur 400 ?
/b
@+: Ju£i€n
Pensez: Réponse acceptée
0
doudou69820 Messages postés 18 Date d'inscription mercredi 26 mai 2010 Statut Membre Dernière intervention 10 juin 2010
26 mai 2010 à 15:40
Oui j'ai essayé de débugger pas à pas et cette ligne merde toujours (Call Feuil1.envoi_mail).
Dans le message d'erreur, il marque juste "400"...
0
jrivet Messages postés 7393 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
26 mai 2010 à 15:49
OK,


quelques pistes à suivre
- Si tu met un point d'arrêt sur cette ligne
Public Sub envoi_mail() 

Est ce que l'erreur arrive avant ou après l'arrêt sur cette ligne ?
- Est ce que Feuil1 possède bien cette sub envoi_mail?
- Est ce que si tu déplaces le code de envoi_mail dans un module et que du appelle simplement par Call envoi_mail cela corrige t il le problème


@+: Ju£i€n
Pensez: Réponse acceptée
0
doudou69820 Messages postés 18 Date d'inscription mercredi 26 mai 2010 Statut Membre Dernière intervention 10 juin 2010
26 mai 2010 à 16:27
Alors si je mets un point d'arrêt, l'erreur apparait avant.

Ma feuil1 n'a pas la sub envoi_mail.
Si je remplace par "all envoi_mail", j'ai cette erreur qui apparait =
"end sub attendu" sur un DIM ... as object
0
doudou69820 Messages postés 18 Date d'inscription mercredi 26 mai 2010 Statut Membre Dernière intervention 10 juin 2010
26 mai 2010 à 16:33
j'ai remplacé "envoi_mail" par une page qui existe vraiment et maintenant j'ai une erreur d'exécution "287"
erreur définit par l'application ou l'object
0
jrivet Messages postés 7393 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
26 mai 2010 à 16:35
Re,

Mais si ta feuil1 (le module de code feuil1) ne possède pas envoi_mail pourquoi appeler par Call Feuil1.envoi_mail

OU est ton code exactement???
Aussi bien Sub Vérification_générale() que envoi_mail.

S'ils sont au même endroit pas besoin de feuil1 un simple Call envoi_mail est suffisant

Donc si on récapitule pour l'instant tout ce que l'on sait c'est que le problème viens de Sub Vérification_générale()

@+: Ju£i€n
Pensez: Réponse acceptée
0
Rejoignez-nous