Forum Discussion

David59460's avatar
David59460
Copper Contributor
May 24, 2022

Excell VBA erreur 400

Bonjour les amis,
je viens de programmer cela et je rencontre aléatoirement une erreur 400 sur ma macro

j'ai bien vérifier les variables... avant de venir vous en parler, l'erreur n'apparait jamais au même moment, et parfois, par chance, la macro s'excécute jusqu'au bout...

Le but était de sélectionner un nom si l'élève avait commandé des cours
et d'envoyer une plage de cellules sous forme d'image JPEG dans un répertoire. Ainsi que l'emploi du temps de l'élève (lui aussi sous formes d'image JPEG

Merci pour vos lumières 🙂


voici le code ...


Sub CreateJPEG()

' Creation des variables
Dim pic_rng As Range
Dim sh_temp As Worksheet
Dim ch_temp As Chart
Dim PicTemp As Picture
Dim Nom_Eleve As Variant ' tous types
Dim Eleve_Ligne As Byte ' nbre jusque 255
Dim Eleve_LigneFin As Byte ' nbre jusque 255


' CREATION D'UNE BOUCLE M23 ... M63

' Initialisation des valeurs des variables

Nom_Eleve = ""
Eleve_Ligne = 23 ' Commence à la ligne 23
Eleves_ligneFin = Sheets("ELEVES").Cells(Rows.Count, 4).End(xlUp).Row ' Indique la dernière ligne de l'élève (utile pour la boucle)



Do While Eleve_Ligne <= Eleves_ligneFin ' Tant que Ligne_Eleve est inférieure à la ligne max du dernier élève
If Worksheets("ELEVES").Range("M" & Eleve_Ligne).Value <> "" Then

Nom_Eleve = Range("D" & Eleve_Ligne)
Worksheets("ELEVES").Range("P2") = Nom_Eleve

' Nom temporaire avant que la boucle ne soit finie
' Nom_Eleve = Worksheets("ELEVES").Range("P2")

' Creation d'une feuille temporaire et de la plage à copier-coller
Application.ScreenUpdating = False
Set pic_rng = Worksheets("ELEVES").Range("N1:AE45")
Set sh_temp = Worksheets.Add
Charts.Add
ActiveChart.Location Where:=xlLocationAsObject, Name:=sh_temp.Name
Set ch_temp = ActiveChart
pic_rng.CopyPicture Appearance:=xlScreen, Format:=xlPicture
ch_temp.Paste
Set PicTemp = Selection

' Dimension de l'image JPEG
With ch_temp.Parent
.Width = 1280
.Height = 720
End With

' Enregistrement de l'image JPEG
ch_temp.Export Filename:="C:\Users\Admin\Documents\A - GESTIONS\DEMANDE PAIEMENT\" & Nom_Eleve & ".jpeg"

' Retablissement des constantes
Application.DisplayAlerts = False
sh_temp.Delete ' effacement de la feuille temporaire
Application.DisplayAlerts = True
Application.ScreenUpdating = True

Worksheets("PLAN-ELEVE").Range("E3") = Nom_Eleve
Worksheets("PLAN-ELEVE").Unprotect

' Creation d'une feuille temporaire et de la plage à copier-coller
Application.ScreenUpdating = False
Set pic_rng = Worksheets("PLAN-ELEVE").Range("A1:AA54")
Set sh_temp = Worksheets.Add
Charts.Add
ActiveChart.Location Where:=xlLocationAsObject, Name:=sh_temp.Name
Set ch_temp = ActiveChart
pic_rng.CopyPicture Appearance:=xlScreen, Format:=xlPicture
ch_temp.Paste
Set PicTemp = Selection

' Dimension de l'image JPEG
With ch_temp.Parent
.Width = 1280
.Height = 720
End With

' Enregistrement de l'image JPEG
ch_temp.Export Filename:="C:\Users\Admin\Documents\A - GESTIONS\DEMANDE PAIEMENT\" & Nom_Eleve & " - PLAN" & ".jpeg"

' Retablissement des constantes
Application.DisplayAlerts = False
sh_temp.Delete ' effacement de la feuille temporaire
Application.DisplayAlerts = True
Application.ScreenUpdating = True

ActiveSheet.Protect



End If
Eleve_Ligne = Eleve_Ligne + 1

Loop

' Message TEST Reussite
MsgBox ("Le fichier est bien enregistré")

End Sub

  • JKPieterse's avatar
    JKPieterse
    Silver Contributor

    David59460 What is the highest number of rows the macro needs to process?
    I expect changing these two lines:

    Dim Eleve_Ligne As Byte ' nbre jusque 255
    Dim Eleve_LigneFin As Byte ' nbre jusque 255

    to:

    Dim Eleve_Ligne As Long ' Much, much larger number
    Dim Eleve_LigneFin As Long ' Much, much larger number

    should help? 

    • David59460's avatar
      David59460
      Copper Contributor

      JKPieterse 

      j'avais choisi "Byte" car le nombre allant dedans ne dépasse pas 68
      donc de 23 à 68

      mais je vais changer en : As long

      • David59460's avatar
        David59460
        Copper Contributor
        Eleve_Ligne commence à 23 et ira au maximum jusque 68

        Eleve_Ligne_Fin et compris entre 23 et 68 aussi

Resources