je travaille actuellement sur une feuille excel associée à deux macros.
Je dois faire varier un paramètre p de ma feuille excel, en lui faisant prendre 4 valeurs différentes (Dans l'exemple ci-joint :1,2,3,4). Puis j'aimerais afficher le résultat d'un calcul (ici, le rapport p/10) dans quatre nouvelles feuilles excel avec quatre noms différents.
J'ai donc écrit ces deux macros
1ère macro : lit les valeurs dans la feuille,fait le rapport des deux et l'écrit.
Code:
Sub Test()
Dim nb1, nb2 As Integer
nb1 = Cells(3, 3).Value
nb2 = Cells(4, 3).Value
Cells(6, 3).Value = nb1 / nb2
End Sub
2ème macro : boucle sur i=1..4 pour faire tourner la macro 1 pour quatre valeurs différentes et créer les quatre feuilles de résultat (Résultat1--> Résultat4)
Code:
Sub Boucle()
Dim i As Integer
Dim nom As String
For i = 1 To 4
[INDENT]Cells(3, 3).Value = i
Call Test
nom = "Résultat " & i
Feuil1.Copy after:=Worksheets(Worksheets.Count)
Worksheets(Worksheets.Count).Select
Worksheets(Worksheets.Count).Activate
ActiveSheet.Name = nom
Feuil1.Activate
[/INDENT]
Next i
End Sub
Dans ce fichier (mis en PJ), tout marche bien.
Voilà enfin mon problème :
Dans un fichier utilisant le même principe, mais avec un calcul (ici la macro Test() ) beaucoup plus volumineux, avec beaucoup plus de paramètres, tout se passe bien pour faire le calcul 6 fois de suite et la 7ème fois ça plante
Le message d'erreur est :
Erreur d'exécution '1004":
La méthode 'Copy de l'objet '_Worksheet' a échoué
Et un clic sur "débogage" me dit que c'est la ligne suivante qui pose problème :
Feuil2.Copy after:=Worksheets(Worksheets.Count)
Je n'arrive pas à comprendre quel est le problème et surtout pourquoi ça marche six fois sans problème et pas plus...
Re : Copie d'une feuillle avec macro VBA - pb au bout d'un certain nombre d'exécution
Bonjour,
A tout hasard, essayez avec votre code modifié
Code:
Sub Boucle()
Dim S As Worksheet
Dim i As Integer, j As Integer
Dim nom As String
'Efface les feuilles créées lors des précédentes exécutions de la macro
j = Worksheets.Count
Application.DisplayAlerts = False
If j > 3 Then
For i = j To 2 Step -1
Set S = Worksheets(i)
S.Delete
Set S = Nothing
Next i
End If
Application.DisplayAlerts = True
Set S = Sheets(1)
nom = "Résultat "
For i = 1 To 4
S.Copy after:=Worksheets(Worksheets.Count)
With ActiveSheet
.Cells(3, 3).Value = i
Call Test
.Shapes("CommandButton1").Cut
.Name = nom & i
End With
Next i
S.Activate
End Sub
Sub Test()
Dim nb1 As Integer, nb2 As Integer
nb1 = Cells(3, 3).Value
nb2 = Cells(4, 3).Value
Cells(6, 3).Value = nb1 / nb2
End Sub