Modèle Excel - Code VBA
Résolu
marcbaertschi
Messages postés
24
Date d'inscription
Statut
Membre
Dernière intervention
-
zavenger Messages postés 811 Date d'inscription Statut Membre Dernière intervention -
zavenger Messages postés 811 Date d'inscription Statut Membre Dernière intervention -
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
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:
- Modèle Excel - Code VBA
- Code ascii - Guide
- Liste déroulante excel - Guide
- Modèle organigramme word - Guide
- Word et excel gratuit - Guide
- Code puk bloqué - Guide
2 réponses
bonjour
Tu n'as besoin que d'une seule macro "open" dans thisworkbook"
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.
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.
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.
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.
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
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
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 ?