probleme avec ma macro

  • Initiateur de la discussion Initiateur de la discussion fenec
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

fenec

XLDnaute Impliqué
Bonjour le forum
Un petit soucis que je ne parviens pas à résoudre
J'utilise cette macro pour enregistrer sous mon document et lui incrémenter un N° de devis
Jusque la tout va bien et mon fichier modèle se rouvre pour pouvoir continuer avec un autre client

Private Sub CommandButton7_Click()
ActiveWorkbook.SaveAs Filename:="C:\Users\toto\Documents\Clients en attente\" & [E17].Value & ".xlt"
num = Format(Val(Right(Range("R18"), 3)) + 1, "000")
ActiveSheet.Unprotect
Range("R18") = Left(Range("R18"), 8) & num
ActiveSheet.Protect
Workbooks.Open Filename:= _
"C:\Users\toto\Documents\Devis.xlt"
End Sub

mon souci est que je n'arrive pas à ce que le N° de mon fichier modèle prenne le N°de la sauvegarde et ainsi poursuivre mon travail sans avoir besoin de rechercher ce N°

J'espère avoir ete assez clair

Merci d'avance
 
Re : probleme avec ma macro

Bonjour le forum
Un petit souci que je ne parviens pas à résoudre

J'utilise cette macro pour enregistrer sous mon document (c’est le document Modèle ?) et lui incrémenter un N° de devis (enregistrer sous un numéro crée incrémenté XXX) Jusque la tout va bien et mon fichier modèle se rouvre (Comment il est ouvert ‘’par macro ‘’ ou c’est toi ‘’qui l’ouvre manuellement’’ ??) pour pouvoir continuer avec un autre client (les autres client pour les futurs fichier ?)

Private Sub CommandButton7_Click()
ActiveWorkbook.SaveAs Filename:="C:\Users\toto\Documents\Clients en attente\" & [E17].Value & ".xlt"
num = Format(Val(Right(Range("R18"), 3)) + 1, "000")
ActiveSheet.Unprotect
Range("R18") = Left(Range("R18"), 8) & num
ActiveSheet.Protect
Workbooks.Open Filename:= _
"C:\Users\toto\Documents\Devis.xlt"
End Sub

mon souci est que je n'arrive pas à ce que le N° de mon fichier modèle (Fichier Modèle le premier ? ou celui que tu as créer avec le numéro incrémenté ?) prenne le N°de la sauvegarde (La sauvegarde C’est un autre Numéro c'est-à-dire pas celui incrémenté ?) et ainsi poursuivre mon travail sans avoir besoin de rechercher ce N° (le quelle celui de la sauvegarde ou celui incrémenté ?)

Laurent

Ps : c'est pour vous répondre au mieux et trouver la solution a votre soucis
 
Re : probleme avec ma macro

Bonsoir le forum et Laurent950

En fait j'ai un fichier modèle "devis xlt" je le rempli et l'enregistre sous "[E17] nom du client" en format xlt pour le modifier si besoin

ActiveWorkbook.SaveAs Filename:="C:\Users\toto\Documents\Clients en attente\" & [E17].Value & ".xlt"

A l'enregistrement le fichier [E17] s'incrémente d'un N° de devis

num = Format(Val(Right(Range("R18"), 3)) + 1, "000")
ActiveSheet.Unprotect
Range("R18") = Left(Range("R18"), 8) & num
ActiveSheet.Protect

Le problème est qu'à l'ouverture de mon fichier modèle "devis xlt" celui-ci n'a pas pris le N° du devis enregistré

Workbooks.Open Filename:= _
"C:\Users\toto\Documents\Devis.xlt"

Voila en gros mon problème

Le petit plus serait que si le devis enregistrer sous [E17] n'était pas confirmer par sa sauvegarde (bouton :sauvegarder devis) mon modèle "devis xlt" redevienne N° -1

Pardonner moi si j'abuse

ci joint un bout de mon fichier

Merci d'avance à ceux qui se pencheront sur mon problème
 

Pièces jointes

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
 

Pièces jointes

Re : probleme avec ma macro

Bonsoir le forum et Laurent950

Déjà merci pour ton aide

Viens de mettre en application ton code, il fonctionne nickel, c’est exactement ce que je voulais pour l’incrémentation du N°.
Par contre viens de voir que je n’enregistre que la feuille devis

Sheets("Devis").Copy

Et non pas le fichier modèle dans sa totalité ce qui m’empêche d’accéder à mes autres feuilles et ne voit pas comment y remédier

Par conséquent encore besoin de ton aide
 
Re : probleme avec ma macro

Bonsoir :

voici le complément des feuilles a ajouter au classeur crée (en rapport avec le classeur modéle) comme dans votre classeur modéle j'ai pas les feuilles j'ai extrapolé les feuilles devant exister en fonction du code de votre macro (a corrigé) Voici le code inséret je vous renvois le fichier.

le codes :

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' Copy des autres feuilles du classeur (je ne les connais pas voici le code
' Par rapport a votre macro) a dapater
' Mettre le non des feuilles je pense que
' Menu et facture et Fournitures et Archives et Clients en attente (font partie du classeur)
' Activer le code de la macro ci-dessous (je le laisse actif, si sa plante mettre le bon nom des feuilles)
' .Sheets(1) = la derniere feuille connu du classeur est Devis et (1) pour la position ==>>> After = aprés
' Dont aprés la feuille Devis en Position 1 dans le classeur inséret la Feuille menu qui s'insert juste aprés
' la feuille devis... etc.
Sheets("Menu").Copy After:=Workbooks("Devis").Sheets(1)
Sheets("Facture").Copy After:=Workbooks("Menu").Sheets(2)
Sheets("Fournitures").Copy After:=Workbooks("Facture").Sheets(3)
Sheets("Achives").Copy After:=Workbooks("Fournitures").Sheets(4)
Sheets("Clients en attente").Copy After:=Workbooks("Achives").Sheets(5)
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''


Laurent
 

Pièces jointes

Re : probleme avec ma macro

Bonsoir le forum et Laurent950

Une fois encore merci mais sa fait deux heures que j'essaie en vain d'appliquer ton code la je ne comprends plus

Toujours erreur d'excécution'9':l'indice n'appartient pas à la sélection

Te joint mon fichier comme je l'ai modifié

D'avance merci pour ton aide
 

Pièces jointes

Re : probleme avec ma macro

Bonsoir,

L’explication :

C’est ici que ca bloque :

- Sheets("Devis.xlt").Copy

Donc Sheets = une feuille du classeur en l’occurrence la feuille Devis… c’est cette feuille qui est copie et lors de la copie Excel crée un nouveau classeur vierge est duplique la feuille initiale de votre classeur modèle (celui ou il y a toute vos feuille juste pour info) dont cette feuille choisi de ce classeur ici Devis est (copier dans un nouveau classeur vierge contenant cette seule feuille)

Donc vous avez ajouté l’extension .xlt à Devis ce qui est faux car (ici il n’y a pas de classeur existant s’appelant Devis.xlt.

Pour la suite de l’information :

Je viens maintenant copier toute les feuilles de votre classeur modèle dans ce nouveau classeur Crée avec pour seul contenance la feuille devis.

Donc la copie des 5 feuilles vont maintenant être copié dans ce nouveau classeur (qui est maintenant complet.

Ce classeur peux être maintenant enregistré (à l’ endroit désiré de votre disque dur) avec pour nom d’enregistrement le nom de votre client (contenu dans la variable =>> NonClient)

Pour la compréhension du code. Comme le classeur actif est le nouveau crée par defaut, il faut l’adresse du classeur ou l’on va copier les feuilles donc modification du code.

===================================================================
Workbooks("Devis.xls").Sheets("Clients en attente").Copy Before:=Sheets("Devis")

Workbooks("Devis.xls") = le classeur ou les feuilles sont copier
Sheets("Clients en attente") = la feuilles du classeur Devis.xls que l’on va copier
Sheets("Devis") = La feuille copier sur le nouveau classeur.
===================================================================
Befor = Avant et After = Après
===================================================================

Le code est modifié.

Aussi attention au nom des variables les feuilles doivent êtres nommée correctement comme par exemple

Dans votre classeur = Achives que j’ai remplacé par Archives (le nom de la feuilles onglet Excel)

Donc Vérifier tous les noms des Onglets des feuilles qui doivent être écrit de la même manière dans le programme VBA.

' figé l'écrans
Application.ScreenUpdating = False ‘ Début de la macro
' Réactivé l’écran figé
Application.ScreenUpdating = True ‘ Fin de la macro

Pour info :

Les modules :
Feuilles : Usurform1
Et
Modules : Module1
Module2

Contenant les macros ne sont pas recopier dans le classeur crée.

Et même si il y avait un code dans le classeur Initial Microsoft Excel Objects
Pour le Module ThisWorkbook (ne serais pas copier dans le cas ou il y aurait
Une instruction) C’est n’est pas le cas ici

Donc attention a la finalité de cette archive crée (je parle du nouveau classeur
Qui porte le nom du client)

Laurent
 

Pièces jointes

Re : probleme avec ma macro

Bonsoir le forum et Laurent950

Une fois de plus merci Laurent et excuse moi mais viens juste de tester c’est nickel pour l’incrémentation de N°
Dommage cependant que les macros ne fonctionnent plus comme tu me le signalais
De plus je rencontre un autre souci avec cette façon d’enregistrer
Je m’explique :
Ma feuille facture étant remplie par liaison avec la feuille devis : je perds cette liaison
J’ai ensuite essayé de me servir de ta façon d’incrémenter le N° à ma facture sachant qu’un devis n’étant pas forcément conclu d’où N° différent de celui du devis
Le N° de la facture devant s’incrémenté uniquement lors de sa sauvegarde
J’espère ne pas abuser mais la je suis totalement bloqué
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Y
Réponses
0
Affichages
1 K
yann_160
Y
T
Réponses
3
Affichages
1 K
tetchounie
T
M
Réponses
2
Affichages
1 K
Mariano
M
Y
Réponses
2
Affichages
821
G
Réponses
8
Affichages
3 K
georgesdelta
G
Retour