VBA pour Lancement et fermeture (auto-save)
Je commence dans le codage VBa mais tranquillement j'apprend les bases (comme la plupart qui écrivent sur le forum probablement).
Je vous explique mon problème. J'ai créé une feuille de soumission qui ajoute 1 (+1) à la cellule F11 (qui est le numéro de la facture) à chaque fois que j'ouvre le fichier "Soumissions.xls". À la fermeture du fichier, si les cases sont vides, donc qu'aucune soumission est en cours, un macro enlève 1 à la cellule F11 (pour qu'à l'ouverture le numéro de soumission se suit au lieu d'augmenter même si la dernière fois que le fichier a été ouvert aucune soumission n'a été écrite).
Si à la fermeture les cases ne sont pas vide, une sauvegarde se fait sous le nom "Soumission #"cellule F11" & "le nom de la personne dans la cellule B14" & "la date d'Aujourd'hui".xls". Ensuite, toujours dans la fermeture, les cellules qui doivent être vides se font effacer avec ClearContents (sans effacer le numéro en F11) et finalement une sauvegarde est fait du fichier en "Soumissions.xls" pour avoir le modèle de base avec le nouveau numéro de soumission.
Jusque là tout marche comme sur des roulettes. Le problème est que si j'ouvre une ancienne soumission, en la fermant ça refait les macros de "si les cases ne sont pas vide" donc en bout de ligne, si j'étais rendu à la soumission #60 mais que j'ouvre la 34, en réouvrant le modèle de base je me retrouve à 35 au lieu de 61.
Bref, est-ce que c'est possible de dire au fichier "Si à ton ouverture, le worksheet est "Soumissions.xls", agis normalement, sinon, cancel le macro de sorti." ou une autre manière qui me permettrait de ne pas sauvegarder le modèle "Soumissions.xls" en sortant si la feuille est remplie tout en pouvant faire continuer le numérotage des soumissions la prochaine fois que j'ouvre le fichier.
Je vous copie mon code du "ThisWorkbook" :
Option Explicit
Private Sub Workbook_Open()
If ThisWorkbook.Name = "Soumissions.xls" Then
Range("F11").Value = Range("F11").Value + 1
End If
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
If Range("B14,B15,B16,B17,B18,B19,B20,B21") = Empty Then
Range("F11").Value = Range("F11").Value - 1
SaveOri --> (C'est mon macro qui enregistre par dessus le modèle de base de Soumission.xls)
ThisWorkbook.Saved = True
Else
SaveAsA1 --> (Le macro qui enregistre-sous la feuille sous un autre nom)
Application.ScreenUpdating = False
reset --> (Le macro qui efface les données pour avoir un modèle vierge tout en gardant la case F11)
SaveOri
End If
End Sub
On m'a suggéré d'insérer la ligne : If ThisWorkbook.Name <> "Soumissions.xls" Then Exit Sub au début du "Workbook_BeforeClose" mais ça ne marche pas. Ça avait l'air de marcher au début mais une fois le fichier excel chez le client, le problème persiste, quand j'ouvre une ancienne soumission, que je la ferme et que je réouvre le modèle de base, le numéro de la soumission est celui après l'ancienne soumission ouverte au lieu de suivre celle de la dernière soumission enregistrée.
Merci!
Bonjour,
Si j'ai bien compris
Dans un module général (Module1 par exemple) mettre une variable publique.
Public PasSauver as BooleanDans le Open..
Private Sub Workbook_Open()
If ThisWorkbook.Name = "Soumissions.xls" Then
Range("F11").Value = Range("F11").Value + 1
Else
PasSauver = True
End If
End Subet dans le Close..
Private Sub Workbook_BeforeClose(Cancel As Boolean)
if PasSauver then exit sub
... la suite du codeA+
Correction..
Private Sub Workbook_BeforeClose(Cancel As Boolean)
If passauver Then
[F11] = [AA1]
Reset
SaveOri
Exit Sub
End If
If Range("B14,B15,B16,B17,B18,B19,B20,B21") = Empty Then
Range("F11").Value = Range("F11").Value - 1
[AA1] = [F11] 'Mémorise F11 En AA1 par exemple
SaveOri '--> (C'est mon macro qui enregistre par dessus le modèle de base de Soumission.xls)
ThisWorkbook.Saved = True
Else
[AA1] = [F11] 'Mémorise F11 En AA1 par exemple
SaveAsA1 '--> (Le macro qui enregistre-sous la feuille sous un autre nom)
Application.ScreenUpdating = False
Reset '--> (Le macro qui efface les données pour avoir un modèle vierge tout en gardant la case F11)
SaveOri
End If
End SubAprès relecture de ton exposé.
Prochaine fois balise ton code, le sélectionner et cliquer sur le bouton Code. C'est plus facile à décoder.
A+
Merci de bien vouloir m'aider et désolé pour le code, je ne savais pas!
J'ai testé et je comprend ce que ça doit faire mais ça ne marche pas. Quand je ferme une vieille soumission ça enregistre en AA1 le numéro en F11, comme si ça ne sortait pas du SUB. J'ai l'impression qu'il manque un [F11] = [AA1] ou le contraire quelque part, peut-être dans le Sub d'ouverture!?
Merci encore!
Edit : Finalement en ajustant des p'tites choses dans ce que tu m'as écris j'ai pu corriger le tout pour que ca marche. Merci énormément, ça fait plus d'une semaine que je me creuse la tête pour trouver une solution sans connaitre la fonction boolean qui a réglé ça assez facilement -_-
Vu que tu a trouver la solution.. oublie pas
A+