Excell VBA erreur 400

Copper Contributor

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

3 Replies

@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? 

@Jan Karel Pieterse 

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

Eleve_Ligne commence à 23 et ira au maximum jusque 68

Eleve_Ligne_Fin et compris entre 23 et 68 aussi