Re : probleme avec ma macro
Bonsoir fenec,
J'ai eu du mal a comprendre la finalité de votre macro, mais j'ai compris la choses suivante :
pour le bouton enregistrer sous :
1 ) si (NON) pas de confirmation de l'enregistrement, ne rien enregistrer (donc si erreur boite de message de confirmation) si non aucune action sur le devis (il n'est pas enregistrer)
2 ) si (OUI) enregistrer sous
a - le nom du client doit etre noté (pour crée un classeur avec le nom de se client pour l'enregistremen) attention au caractére spéciaux ou si le client et deux fois au même endroit dans le repertoire (un nom unique par dossier d'enregistrement)
b - copier de la feuille devis (active) puis création d'un nouveau classeur avec cette même feuille (le classeur s'enregistre sous le nom du client)
c - le numéro d'incrémentation est la suite du fichier model, et sur le fichier model le nom du client et effacer.
recape = fichier crée = nom du client et numéro d'incrémentation du numéro modéle + 1
fichier modéle (validé par le classeur crée) c'est a dire report du numéro crée sur le fichier model (qui est enregistrer mais pas encore fermer)
c - le fichier modéle est propre et sera fermer. (opération non visible)
d - retour sur le fichier crée (vous pouver le remplir)
Voici le code détailler : (je vous ai joint le fichier)
Pour info j'ai travailler comme vous pour que vous puissier comprendre, j'ai pas tous passer en variable Objet car c'est plus complexe, a vous de l'adapter par la suite mais cela fonctionne bien
'======================================================
Private Sub CommandButton7_Click()
' Copie de la Feuille devis avant l'enregistrement sous "Du fichier Model"
' L'avantage c'est que le fichier Model ne se ferme pas et cela va servir pour l'incrémentation
' du suivie des numéros
' Désactiver la boite de dialogue de confirmation de l'enregistrement
Application.DisplayAlerts = False
' Boite msgbox de confirmation
Confimé = MsgBox("Etes vous sur de vouloir enregistrer le dodument ?", vbYesNo)
' Condition if si la condition est respecté
If Confimé = vbNo Then
' cliqué sur NON :
' - J'ai choisi de ne rien enregistrer ou de fermer
' - car c'est l'option enregistrer sous et pas enregistrer le document
''''''''''''Range("E17") = Empty
''''''''''''Workbooks("exemple").Close
' Réactiver la boite de dialogue de confirmation de l'enregistrement
Application.DisplayAlerts = True
Else
' il a cliqué sur OUI :
' Mettre en mémoire le nom du client
NonClient = Range("E17")
' Numéro d'incrémentation par rapport au fichier model (la suite)
num = Format(Val(Right(Range("R18"), 3)) + 1, "000")
ActiveSheet.Unprotect
' Mise en mémoire du numéro sous la variable num
' et ranger le numéro au bonne endroit
Range("R7") = num
ActiveSheet.Protect
' Copie de la feuille devis dans un nouveau classeur
Sheets("Devis").Copy
' Enregistrement du document (sans fermeture)
' [E17].Value = remplacer par la variable "NonClient" contenant
' Le nom du client et pour le chemin ("C:\") = L'adapter a votre
' enregistrement
'ActiveWorkbook.SaveAs Filename:="C:\" & [E17].Value & ".xlt"
ActiveWorkbook.SaveAs Filename:="C:\" & NonClient & ".xlt"
'Workbooks.Open Filename:= _
'"C:\Users\Philippe\Documents\Devis.xlt"
'''' Activé le Classeur modéle toujours ouvert
Workbooks("exemple.xls").Activate
'''
' effacer le nom du client (car classeur modéle)
Range("E17") = Empty
'''' enregistrer le classeur modéle
ActiveWorkbook.Save
' Réactiver la boite de dialogue de confirmation de l'enregistrement
Application.DisplayAlerts = True
'''' Activé le Classeur crée
Workbooks(NonClient).Activate
' fermer le classeur modéle avec son numéro d'incrémentation
' identique a celui crée
Workbooks("exemple.xls").Close
End If
End Sub
======================================================
au plaisir de vous avoir aider
Laurent