Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Mise en place d'un "aide mémoire"

7 réponses
Avatar
Céline06
Bonjour à tous,

Voilà ce que je cherche a faire. Je pense que vous allez pouvoir m'aider.
J'ai mis en place une facture dans un classeur, celle ci est complétée
automatiquement garce à des macros et en fonction des données présentes dans
les feuilles précedentes. La seule chose que je dois faire, c'est changer le
numero de la facture avant de l'enregistrer. Ce que je voudrais c'est faire
une sorte de "pense bête" qui me dise quel est le prochain numero. Ca
pourrait se faire sous forme de barre d'outil car je ne veux pas que le
munero suivant apparaisse sur les factures quand je les imprime.
J'ai pas trop d'idées sur le type d'outil a mettre en place. Peut être une
barre d'outil sur laquelle serait recopié le dernier numero de facture ou
alors le dernier numero +1.

Merci d'avance pour votre aide.

7 réponses

Avatar
MichDenis
Bonjour Céline06,

Voici un début de suggestion : Le principe de base, Incrémenter le numéro de facture qui apparaît dans un contrôle d'un
barre d'outils à chaque fois que tu sauvegarde la feuille. Tout ce qui suit a besoin d'être raffiné selon ta méthode de
travail ou celle que tu aimerais implanter ! Attention... dans les deux dernières procédures, j'utilise la "Feuil1" pour
les fins de l'exemple... tu devrais modifier selon ton application.

Sub Combo_No_Facture est une procédure qui affiche dans ton programme, une nouvelle barre d'outil et affiche à
l'intérieur le prochain numéro de facture devant être utilisé.

Prochain_No_Facture = est un procédure permettant de mettre à jour l'information de la nouvelle barre d'outils et
d'afficher le prochain numéro de facture devant être utilisé.

Cependant, lorsque tu fermes ton fichier, tu dois trouver un endroit où sauvegarder l'information du numéro de facture.
Tu pourrais utiliser une cellule de ta feuille inutilisé comme IV65535 .

Tout ceci pour être gérer à partir d'événement situé dans le ThisWorkbook comme :

Ce qui suit dans le ThisWorkbook de ton classeur
'----------------
Private Sub Workbook_Open()
Combo_No_Facture
End Sub
'----------------


'----------------------
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Prochain_No_Facture
End Sub


Dans le module de la feuille :
'----------------
Private Sub Worksheet_Activate()
Combo_No_Facture
End Sub
'----------------
Private Sub Worksheet_Deactivate()
On Error Resume Next
Application.CommandBars("No Facture").Delete
End Sub
'----------------


Ce qui suit dans un module Standard.
'-----------------------------
Sub Combo_No_Facture()

Dim Mbar As CommandBar
Dim Comb As CommandBarComboBox

On Error Resume Next
Application.CommandBars("No Facture").Delete

Set Mbar = Application.CommandBars.Add _
("No Facture", msoBarTop, False, True)
With Mbar
.Position = msoBarFloating
.Left = 750
.Top = 150
.Visible = True
.Protection = msoBarNoChangeVisible + msoBarNoCustomize _
+ msoBarNoMove
Set Comb = .Controls.Add(msoControlComboBox)
With Comb
.Caption = "Suivant : "
.Width = 110
.TooltipText = "Votre prochain No Facture"
If Worksheets("Feuil1").Range("IV65535") = "" Then
Worksheets("Feuil1").Range("IV65535") = 1
.AddItem 1
.ListIndex = 1
Else
.Clear
.AddItem Worksheets("Feuil1").Range("IV65535")
.ListIndex = 1
End If
.Style = msoComboLabel
End With
End With
Set Comb = Nothing: Set Mbar = Nothing
End Sub

'-----------------------------
Sub Prochain_No_Facture()

Dim A As Long
With Application.CommandBars("No Facture").Controls(1)
A = Val(.List(.ListIndex))
.Clear
.AddItem A + 1
Application.EnableEvents = False
Worksheets("Feuil1").Range("IV65535") = A + 1
Application.EnableEvents = True
.ListIndex = 1

End With

End Sub
'-----------------------------


Salutations!


"Céline06" a écrit dans le message de news:

Bonjour à tous,

Voilà ce que je cherche a faire. Je pense que vous allez pouvoir m'aider.
J'ai mis en place une facture dans un classeur, celle ci est complétée
automatiquement garce à des macros et en fonction des données présentes dans
les feuilles précedentes. La seule chose que je dois faire, c'est changer le
numero de la facture avant de l'enregistrer. Ce que je voudrais c'est faire
une sorte de "pense bête" qui me dise quel est le prochain numero. Ca
pourrait se faire sous forme de barre d'outil car je ne veux pas que le
munero suivant apparaisse sur les factures quand je les imprime.
J'ai pas trop d'idées sur le type d'outil a mettre en place. Peut être une
barre d'outil sur laquelle serait recopié le dernier numero de facture ou
alors le dernier numero +1.

Merci d'avance pour votre aide.
Avatar
Céline06
Merci,

C'est tout a fait ce que je cherchais. C'est super !!!!!!!


Bonjour Céline06,

Voici un début de suggestion : Le principe de base, Incrémenter le numéro de facture qui apparaît dans un contrôle d'un
barre d'outils à chaque fois que tu sauvegarde la feuille. Tout ce qui suit a besoin d'être raffiné selon ta méthode de
travail ou celle que tu aimerais implanter ! Attention... dans les deux dernières procédures, j'utilise la "Feuil1" pour
les fins de l'exemple... tu devrais modifier selon ton application.

Sub Combo_No_Facture est une procédure qui affiche dans ton programme, une nouvelle barre d'outil et affiche à
l'intérieur le prochain numéro de facture devant être utilisé.

Prochain_No_Facture = est un procédure permettant de mettre à jour l'information de la nouvelle barre d'outils et
d'afficher le prochain numéro de facture devant être utilisé.

Cependant, lorsque tu fermes ton fichier, tu dois trouver un endroit où sauvegarder l'information du numéro de facture.
Tu pourrais utiliser une cellule de ta feuille inutilisé comme IV65535 .

Tout ceci pour être gérer à partir d'événement situé dans le ThisWorkbook comme :

Ce qui suit dans le ThisWorkbook de ton classeur
'----------------
Private Sub Workbook_Open()
Combo_No_Facture
End Sub
'----------------


'----------------------
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Prochain_No_Facture
End Sub


Dans le module de la feuille :
'----------------
Private Sub Worksheet_Activate()
Combo_No_Facture
End Sub
'----------------
Private Sub Worksheet_Deactivate()
On Error Resume Next
Application.CommandBars("No Facture").Delete
End Sub
'----------------


Ce qui suit dans un module Standard.
'-----------------------------
Sub Combo_No_Facture()

Dim Mbar As CommandBar
Dim Comb As CommandBarComboBox

On Error Resume Next
Application.CommandBars("No Facture").Delete

Set Mbar = Application.CommandBars.Add _
("No Facture", msoBarTop, False, True)
With Mbar
.Position = msoBarFloating
.Left = 750
.Top = 150
.Visible = True
.Protection = msoBarNoChangeVisible + msoBarNoCustomize _
+ msoBarNoMove
Set Comb = .Controls.Add(msoControlComboBox)
With Comb
.Caption = "Suivant : "
.Width = 110
.TooltipText = "Votre prochain No Facture"
If Worksheets("Feuil1").Range("IV65535") = "" Then
Worksheets("Feuil1").Range("IV65535") = 1
.AddItem 1
.ListIndex = 1
Else
.Clear
.AddItem Worksheets("Feuil1").Range("IV65535")
.ListIndex = 1
End If
.Style = msoComboLabel
End With
End With
Set Comb = Nothing: Set Mbar = Nothing
End Sub

'-----------------------------
Sub Prochain_No_Facture()

Dim A As Long
With Application.CommandBars("No Facture").Controls(1)
A = Val(.List(.ListIndex))
.Clear
.AddItem A + 1
Application.EnableEvents = False
Worksheets("Feuil1").Range("IV65535") = A + 1
Application.EnableEvents = True
.ListIndex = 1

End With

End Sub
'-----------------------------


Salutations!


"Céline06" a écrit dans le message de news:

Bonjour à tous,

Voilà ce que je cherche a faire. Je pense que vous allez pouvoir m'aider.
J'ai mis en place une facture dans un classeur, celle ci est complétée
automatiquement garce à des macros et en fonction des données présentes dans
les feuilles précedentes. La seule chose que je dois faire, c'est changer le
numero de la facture avant de l'enregistrer. Ce que je voudrais c'est faire
une sorte de "pense bête" qui me dise quel est le prochain numero. Ca
pourrait se faire sous forme de barre d'outil car je ne veux pas que le
munero suivant apparaisse sur les factures quand je les imprime.
J'ai pas trop d'idées sur le type d'outil a mettre en place. Peut être une
barre d'outil sur laquelle serait recopié le dernier numero de facture ou
alors le dernier numero +1.

Merci d'avance pour votre aide.





Avatar
Céline06
Après un essai de ton code, me voila de retour. Malheureusement, j'ai un
petit problème. Je m'explique. Le truc c'est qu'avec ce code, le numero de la
"facture suivante" change a chaque enregistrement du classeur. Le problème
c'est que la facture fait partie d'un classeur qui est souvent modifié et le
numero change a chaque fois même lorsqu'une facture n'est pas editée. J'ai
donc pensé a une chose. J'ai une barre d'outil qui a a ce code:

Set myControl6 = myBar.Controls _
.Add(Type:=msoControlButton)
With myControl6
.FaceId = 397
.Caption = "Incrémenter N° facture"
.OnAction = "incrementer"
End With
etc

La macro "incrementer" me permet en cliquant sur le bouton de la barre de
changé le numero de la facture.
Voila la macro:

Private Sub incrementer()

If ActiveWorkbook.Path <> "" Then
If ActiveWorkbook.Name = "Base de données" Then Exit Sub
With Sheets("Facture")
.Range("E11").Value = .Range("E11").Value + 1
End With
End If

End Sub

Pensez vous qu'à cette macro je pourrais ajouter le fait de créer une autre
barre d'outil et d'y insérer le prochain numero de facture. J'ai essayé de
faire un truc dans ce sens mais j'ai pas reussi.

Merci pour votre aide.
Avatar
MichDenis
Bonjour Céline06,

J'étais bien au fait de cet état ce chose ... C'est ce pourquoi je disais que cette façon de faire avait besoin d'être
raffinée.

Est-ce que tu travailles à partir d'un modèle de facture ?

Au lieu de choisir l'événement Enregistrer, moi j'aurais utilisé quelque chose comme ceci :

P.S. Cependant, si tu utilises le même classeur pour réouvrir d'ancienne facture, Il va falloir que tu ajoutes un test
pour t'assurer que la facture n'est pas une nouvelle ... et que le compteur n'a pas à être mis à jour. Pour ce faire,
essaie de trouver un champ ...(une cellule) qui doit être obligatoire rempli pour que l'usager puisse l'enregistrer
comme étant une facture valide .... à défaut de quoi, la procédure enregistrer ... refuse d'effectuer ce travail. Ce
même champ pourrait alors être testé avant de faire la mise à jour dans cette procédure. Tout ceci, n'est que suggestion
... je ne connais pas ton environnement !

à copier dans le ThisWorkbook .... Cette procédure n'a pas été testée.
'---------------------------------
Private Sub Workbook_BeforeClose(Cancel As Boolean)

Dim Res As VbMsgBoxResult
Res = MsgBox("Désirez enregistrer votre facture ?" _
, vbInformation + vbYesNoCancel, "Sauvegarde")

Select Case Res
Case Is = vbYes
Cancel = False
Prochain_No_Facture 'la procédure de mise à jour
' ThisWorkbook.SaveAs ...Chemin et nom du fichier
Case Is = vbNo
Cancel = False
ThisWorkbook.Saved = True
Case Is = vbCancel
Cancel = True
End Select

End Sub
'---------------------------------


Salutations!



"Céline06" a écrit dans le message de news:

Après un essai de ton code, me voila de retour. Malheureusement, j'ai un
petit problème. Je m'explique. Le truc c'est qu'avec ce code, le numero de la
"facture suivante" change a chaque enregistrement du classeur. Le problème
c'est que la facture fait partie d'un classeur qui est souvent modifié et le
numero change a chaque fois même lorsqu'une facture n'est pas editée. J'ai
donc pensé a une chose. J'ai une barre d'outil qui a a ce code:

Set myControl6 = myBar.Controls _
.Add(Type:=msoControlButton)
With myControl6
.FaceId = 397
.Caption = "Incrémenter N° facture"
.OnAction = "incrementer"
End With
etc

La macro "incrementer" me permet en cliquant sur le bouton de la barre de
changé le numero de la facture.
Voila la macro:

Private Sub incrementer()

If ActiveWorkbook.Path <> "" Then
If ActiveWorkbook.Name = "Base de données" Then Exit Sub
With Sheets("Facture")
.Range("E11").Value = .Range("E11").Value + 1
End With
End If

End Sub

Pensez vous qu'à cette macro je pourrais ajouter le fait de créer une autre
barre d'outil et d'y insérer le prochain numero de facture. J'ai essayé de
faire un truc dans ce sens mais j'ai pas reussi.

Merci pour votre aide.
Avatar
MichDenis
Pour compléter mon message précédent,

Dans le ThisWorkbook, tu pourrais avoir un test similaire ...(plus exhaustif au besoin) pour t'assurer que l'usager
n'enregistre pas des "factures bidons" ...et ce critère pour être utilisé dans la procédure que je t'ai proposé pour
déterminer si le numéro de facture doit être incrémenté.


Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)

With ThisWorkbook
With .Worksheets("Feuil1")
If .Range("A10") = "" And .Range("D25") = "" Then
Cancel = True
End If
End With
End With

End Sub



Salutations!


"Céline06" a écrit dans le message de news:

Après un essai de ton code, me voila de retour. Malheureusement, j'ai un
petit problème. Je m'explique. Le truc c'est qu'avec ce code, le numero de la
"facture suivante" change a chaque enregistrement du classeur. Le problème
c'est que la facture fait partie d'un classeur qui est souvent modifié et le
numero change a chaque fois même lorsqu'une facture n'est pas editée. J'ai
donc pensé a une chose. J'ai une barre d'outil qui a a ce code:

Set myControl6 = myBar.Controls _
.Add(Type:=msoControlButton)
With myControl6
.FaceId = 397
.Caption = "Incrémenter N° facture"
.OnAction = "incrementer"
End With
etc

La macro "incrementer" me permet en cliquant sur le bouton de la barre de
changé le numero de la facture.
Voila la macro:

Private Sub incrementer()

If ActiveWorkbook.Path <> "" Then
If ActiveWorkbook.Name = "Base de données" Then Exit Sub
With Sheets("Facture")
.Range("E11").Value = .Range("E11").Value + 1
End With
End If

End Sub

Pensez vous qu'à cette macro je pourrais ajouter le fait de créer une autre
barre d'outil et d'y insérer le prochain numero de facture. J'ai essayé de
faire un truc dans ce sens mais j'ai pas reussi.

Merci pour votre aide.
Avatar
Céline06
Merci beaucoup. Ca me semble pas simple tout ca! Rien de tel qu'un essai,
c'est ce que je vais faire tout de suite.

Merci encore!


Pour compléter mon message précédent,

Dans le ThisWorkbook, tu pourrais avoir un test similaire ...(plus exhaustif au besoin) pour t'assurer que l'usager
n'enregistre pas des "factures bidons" ...et ce critère pour être utilisé dans la procédure que je t'ai proposé pour
déterminer si le numéro de facture doit être incrémenté.


Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)

With ThisWorkbook
With .Worksheets("Feuil1")
If .Range("A10") = "" And .Range("D25") = "" Then
Cancel = True
End If
End With
End With

End Sub



Salutations!


"Céline06" a écrit dans le message de news:

Après un essai de ton code, me voila de retour. Malheureusement, j'ai un
petit problème. Je m'explique. Le truc c'est qu'avec ce code, le numero de la
"facture suivante" change a chaque enregistrement du classeur. Le problème
c'est que la facture fait partie d'un classeur qui est souvent modifié et le
numero change a chaque fois même lorsqu'une facture n'est pas editée. J'ai
donc pensé a une chose. J'ai une barre d'outil qui a a ce code:

Set myControl6 = myBar.Controls _
.Add(Type:=msoControlButton)
With myControl6
.FaceId = 397
.Caption = "Incrémenter N° facture"
.OnAction = "incrementer"
End With
etc

La macro "incrementer" me permet en cliquant sur le bouton de la barre de
changé le numero de la facture.
Voila la macro:

Private Sub incrementer()

If ActiveWorkbook.Path <> "" Then
If ActiveWorkbook.Name = "Base de données" Then Exit Sub
With Sheets("Facture")
.Range("E11").Value = .Range("E11").Value + 1
End With
End If

End Sub

Pensez vous qu'à cette macro je pourrais ajouter le fait de créer une autre
barre d'outil et d'y insérer le prochain numero de facture. J'ai essayé de
faire un truc dans ce sens mais j'ai pas reussi.

Merci pour votre aide.





Avatar
Céline06
Ca a été dur et j'ai pas tout compris surtout en ce qui concerne le fait
d'avoir une cellule qui doit être remplie avant l'enregistrement. Je n'ai
aucune idée sur la facon de mettre en place cela. Par contre, lorsque ma
facture est sur la feuille 1, je peux enregistrer le classeur en me placant
sur une autre feuille et a ce moment là le numero de facture ne tourne pas.
Neanmoins, cela produit une erreur.

Comme je ne suis pas specialement douée :-), je pense que je vais arranger
tout cela a ma sauce et deplacer ma facture vers un autre classseur. Je
pourrais ensuite mettre ce code en place. Ca me parait plus simple.

Merci pour ton aide!



Merci beaucoup. Ca me semble pas simple tout ca! Rien de tel qu'un essai,
c'est ce que je vais faire tout de suite.

Merci encore!


Pour compléter mon message précédent,

Dans le ThisWorkbook, tu pourrais avoir un test similaire ...(plus exhaustif au besoin) pour t'assurer que l'usager
n'enregistre pas des "factures bidons" ...et ce critère pour être utilisé dans la procédure que je t'ai proposé pour
déterminer si le numéro de facture doit être incrémenté.


Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)

With ThisWorkbook
With .Worksheets("Feuil1")
If .Range("A10") = "" And .Range("D25") = "" Then
Cancel = True
End If
End With
End With

End Sub



Salutations!


"Céline06" a écrit dans le message de news:

Après un essai de ton code, me voila de retour. Malheureusement, j'ai un
petit problème. Je m'explique. Le truc c'est qu'avec ce code, le numero de la
"facture suivante" change a chaque enregistrement du classeur. Le problème
c'est que la facture fait partie d'un classeur qui est souvent modifié et le
numero change a chaque fois même lorsqu'une facture n'est pas editée. J'ai
donc pensé a une chose. J'ai une barre d'outil qui a a ce code:

Set myControl6 = myBar.Controls _
.Add(Type:=msoControlButton)
With myControl6
.FaceId = 397
.Caption = "Incrémenter N° facture"
.OnAction = "incrementer"
End With
etc

La macro "incrementer" me permet en cliquant sur le bouton de la barre de
changé le numero de la facture.
Voila la macro:

Private Sub incrementer()

If ActiveWorkbook.Path <> "" Then
If ActiveWorkbook.Name = "Base de données" Then Exit Sub
With Sheets("Facture")
.Range("E11").Value = .Range("E11").Value + 1
End With
End If

End Sub

Pensez vous qu'à cette macro je pourrais ajouter le fait de créer une autre
barre d'outil et d'y insérer le prochain numero de facture. J'ai essayé de
faire un truc dans ce sens mais j'ai pas reussi.

Merci pour votre aide.