Rechercher : dans
Par :

Modèle Excel - Code VBA

Dernière réponse le 28 avr 2008 à 12:13:06 marcbaertschi, le 28 avr 2008 à 08:01:51 
 Signaler ce message aux modérateurs

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

Configuration: Windows XP
Internet Explorer 7.0

1

gbinforme, le 28 avr 2008 à 09:36:23
  • +1

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.
Toujours zen

Répondre à gbinforme

2

marcbaertschi, le 28 avr 2008 à 10:15:28

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 ?

Répondre à marcbaertschi

3

marcbaertschi, le 28 avr 2008 à 10:45:09

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.

Répondre à marcbaertschi

4

 zavenger, le 28 avr 2008 à 12:13:06
  • +1

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

Répondre à zavenger