Modèle Excel - Code VBA

Résolu/Fermé
marcbaertschi Messages postés 24 Date d'inscription lundi 31 mars 2008 Statut Membre Dernière intervention 13 octobre 2008 - 28 avril 2008 à 08:01
zavenger Messages postés 811 Date d'inscription vendredi 29 février 2008 Statut Membre Dernière intervention 20 avril 2012 - 28 avril 2008 à 12:13
Bonjour,

J'ai un petit problème avec du code VBA dans un modèle Excel.

Ce que ça doit faire:
-Lorsque j'ouvre un fichier en partant du modèle (fichier.xlt) (Double-clique dessus) le fichier doit incrémenter de 1 le nombre d'une cellule (à chaque ouverture).
-Lorsque je l'ouvre il doit aussi s'enregistrer chaque fois dans un nom différent en .xls (ex: fichier1.xls, fichier2.xls, fichiers3.xls, ...)

Ce que ça fait pour le moment:
-À la première ouverture il incrémente la cellule correctement, mais après il ne garde pas en mémoire le nouveau nombre.(ex: il fera chaque fois 0+1).
-À la première ouverture le fichier.xls s'enregistre correctement vu qu'il en existe pas d'autre mais lorsque je fais sa une deuxieme fois il me demande de changer le nom car un fichiee portant le meme nom existe déjà (C'est normal).

Mon code actuel (Surement totu faux)
Sheet1:
Private Sub Worksbook_Open()
i = i + 1
Range("F4") = i
ThisWorksbook.Save
End Sub

ThisWorkbook:
Private Sub Worksbook_Open()
i = i + 1
Range("F4") = i
ThisWorksbook.Save
End Sub

PS: Je suis sur Office 2007
A voir également:

2 réponses

gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 684
28 avril 2008 à 09:36
bonjour

Tu n'as besoin que d'une seule macro "open" dans thisworkbook"
Private Sub Workbook_Open()
Dim chemin As String    ' indiquer le répertoire des fichiers
chemin = "C:\Mes documents\fichiers\excel\" ' par exemple
                        ' plus 1 sur la zone numéro fichier
Worksheets("sheet1").Range("F4").Value = Worksheets("sheet1").Range("F4").Value + 1
ThisWorkbook.Save       ' sauvegarde modéle
                        ' sauvegarde classeur
ThisWorkbook.SaveAs chemin & "fichier" & Worksheets("sheet1").Range("F4").Value & ".xls"
End Sub

Le code est commenté pour te permettre de mieux comprendre.
Le "chemin" te permet de sauvegarder tes différents fichiers sur le répertoire choisis et tu peux rajouter l'année ou le mois dans ton chemin si tu le souhaites.
2
marcbaertschi Messages postés 24 Date d'inscription lundi 31 mars 2008 Statut Membre Dernière intervention 13 octobre 2008
28 avril 2008 à 10:15
Merci, mais:

Erreur d'éxécution 9
L'indice n'appartient pas é la séléction

La ligne surlignée dans le débogger est:
Worksheets("sheet1").Range("F4").Value = Worksheets("sheet1").Range("F4").Value + 1

Est-ce que ça change quelquechose si le nom de la feuille (Sur l'interface graphique) n'est pas sheet1 ?
-1
marcbaertschi Messages postés 24 Date d'inscription lundi 31 mars 2008 Statut Membre Dernière intervention 13 octobre 2008
28 avril 2008 à 10:45
C'est bon j'ai réussi, il me manque juste quelque chose:

Comment faire pour qu'il arrête d'éxecuté le code dans les fichiers .xls, parce que quand j'essaie d'ouvrir les .xls ils incrémente toujours la celulle. :-S

Marci d'avance.
-1
zavenger Messages postés 811 Date d'inscription vendredi 29 février 2008 Statut Membre Dernière intervention 20 avril 2012 161
28 avril 2008 à 12:13
Bonjour,
J'ai trouvé ce code qui efface tout le code vba d'un classeur. Tu dois pouvoir l'adapter en applicant sur ton nouveau fichier.

Sub DeleteAllVBA()
Dim VBComp As Variant
Dim VBComps As Variant

Set VBComps = ActiveWorkbook.VBProject.VBComponents
For Each VBComp In VBComps
Select Case VBComp.Type
Case 1 To 3
VBComps.Remove VBComp
Case Else
With VBComp.CodeModule
.DeleteLines 1, .CountOfLines
End With
End Select
Next VBComp

End Sub
0