Forum Discussion
David59460
May 24, 2022Copper Contributor
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
- JKPieterseSilver 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?
- David59460Copper Contributor
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- David59460Copper ContributorEleve_Ligne commence à 23 et ira au maximum jusque 68
Eleve_Ligne_Fin et compris entre 23 et 68 aussi