Correction de code?

Bonjour

J'ai réalisé une macro pour le sujet

https://forum.excel-pratique.com/excel/impression-de-graphiques-t62140.html

De façon incompréhensible(pour moi), la macro fonctionne correctement x fois et de façon soudaine, un bug apparaît

Ci dessous le Code avec la ligne ou se produit le bug et le fichier en question

Qui peut apporter la correction.

Sub Créer_Feuilles()
'Application.ScreenUpdating = False
Dim Cel As Range
For Each Cel In Range("A6", Range("A" & [a65000].End(xlUp).Row))
Sheets("Modele").Copy After:=Sheets(Sheets.Count)
      ActiveSheet.Name = Cel.Value
With ActiveSheet
Range("B2") = Cel
Range("D2") = Cel.Offset(0, 1)
Range("B5") = Cel.Offset(0, 2)
Range("C5") = Cel.Offset(0, 3)
Range("D5") = Cel.Offset(0, 4)
Range("E5") = Cel.Offset(0, 5)
Range("F5") = Cel.Offset(0, 6)
End With
Next Cel
'Call Pied_de_Page (inutile pour cette question)
End Sub

La ligne en défaut

Sheets("Modele").Copy After:=Sheets(Sheets.Count)

Cordialement

28creer-feuilles.zip (15.51 Ko)

Je n'ai pas eu de plantage ... les 25 feuilles se sont bien créées.

J'ai essayé 2 fois.

Question de fin d'instruction si la machine est chargée, notamment dans la mise à jour des graphiques ? dans ce cas essaie de mettre une tempo de 1 seconde par feuille ...

Bonjour,

sur ma version 2003, pas de souci la première fois. Mais dès la deuxième, cela plante vers l'élève 19 ou 20 …

Idem en optimisant le code :

Sub Créer_Feuilles()
Dim Cel As Range
Application.ScreenUpdating = False

For Each Cel In Range("A6", Cells(Rows.Count, 1).End(xlUp))
    Feuil2.Copy , Worksheets(Worksheets.Count)

    With Cel
            ActiveSheet.Name = .Value
           Range("B2").Value = .Value
           Range("D2").Value = .Offset(, 1).Value
        Range("B5:F5").Value = .Offset(, 2).Resize(, 5).Value
    End With
Next
End Sub

Plus de souci en copiant les données des deux premières feuilles dans un nouveau classeur !

Et en paramétrant le pied de page de la feuille modèle, plus besoin de coder une procédure …

Bonjour,

Une variante supplémentaire.

Sub Créer_Feuilles()
Dim Cel As Range
Dim modCalc As Integer

    With Application
        modCalc = .Calculation
        .Calculation = xlCalculationManual
        .ScreenUpdating = False
    End With

    For Each Cel In Range("A6", Range("A" & [a65000].End(xlUp).Row))
        Worksheets("Modele").Copy After:=Worksheets(Worksheets.Count)
        ActiveSheet.Name = Cel.Value
        [B2] = Cel.Value
        [C2] = Cel.Offset(0, 1).Value
        [B5:F5] = Cel.Offset(0, 2).Resize(, 5).Value
    Next Cel

    'Call Pied_de_Page

    Application.Calculation = xlCalculationAutomatic

End Sub

Bonjour

Comme quoi, avoir l'idée et la bonne volonté n'est pas suffisant.

Avoir appris avec XL4 est une bonne école pour les formules, mais n'est pas vraiment un atout pour coder en VBA.

Merci à tous pour ces explications

Bien cordialement

De mon côté avec une version 2003, toujours le souci même en désactivant le mode de calcul automatique …

Jean-Eric, t'as oublié d'utiliser à la fin ta variable modCalc

Et il est vraiment dommage de transformer le Range renvoyé par la propriété End en numéro de ligne

puis de le reconvertir immédiatement dans le Range initial ‼ Autant le laisser directement en Range, non ?

Sans compter l'adresse de la cellule de départ erronée en dur …

Re,

Bonjour Marc L,

En effet, en fin de procédure c'est :

Application.Calculation=modCalc
Rechercher des sujets similaires à "correction code"