Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Microsoft 365 Code VBA Bon Commande

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 !

mld.sebastien

XLDnaute Junior
Bonjour,

Je cherche un code VBA pour autant de ligne dans le bon de commande.

Pour chaque textbox : Tbx_Quantité , Tbx_Prix qui ce multiplie et donne un Montant en Tbx_Montant.
Et à la fin un Tbx_Total en additionnant les Montant.

Je l'ai fait pour chaque ligne comme cela :

VB:
Private Sub Tbx_Prix1_Change()
    Tbx_Montant1.Value = Format(Tbx_Quantie1.Value * Tbx_Prix1.Value, "#,##0.00 €")
End Sub

Private Sub Tbx_Montant1_Change()
    Tbx_Total.Value = Format(Tbx_Montant1.Value + Tbx_Montant2.Value, "#,##0.00 €")
End Sub

Je cherche si il y pas plus simple ??

@job75 m'avait super bien aider à un moment je le remercie d'ailleurs, j'utilise toujours tous le temps ses codes.

Cordialement.
 
Solution
non j'ai pas vraiment regardé, juste ceci:
quand tu créés une nouvelle commande, il faudrait vider le bon de commande (formulaire), parce que si tu recliques sur "Valider", la commande est à nouveau enregistrée dans la table
Bonjour,

Je met a disposition mon fichier si cela intéresse, merci beaucoup à @vgendron pour sont aide.
Il y a sans doute des améliorations, voir en posant le poste j'ai sans doute fait des modifications ensuite.

Cordialement.
Bonjour, @vgendron

Excuse moi de te déranger directement, je suis sur mon fichier j'ai une données qui veux pas s'afficher correctement.

Dans l'onglet Bon de commande je sélectionne le NomPrenom aucun souci, puis la date aucun souci dans la sélection, mais mon numéro de commande dans le Lbl_NumCommande n'est pas le bon si je sélection la 3eme date il prend la 2eme date.

Peu tu m'aider, j'ai fait pas mal d’amélioration. Tu me dit si je dois faire sur mon ancien post, faut que j’enlève des données.

Je pense avoir un souci sur cette partis du code .
VB:
Private Sub Cbx_DateCommande_Change() ' Lors de la sélection change dans le combo

On Error GoTo ErrorHandler ' Gestion d'erreur

Dim trouve As Range
Dim ligne As Long

   
    ' Désactivation des événements pour éviter une boucle infinie
    If Not EnableEvents Then Exit Sub
   
    ' Si aucune date n'est sélectionnée, effacer les données
    If Me.Cbx_DateCommande = "" Then
        Me.Range("B13:F34").ClearContents
        Exit Sub
    End If
   
    ' Vérification de la sélection valide de "Nom Prenom"
    If Me.Cbx_NomPrenom.ListIndex = -1 Then
        ViderBdC
        Exit Sub
    End If
       
    ' Recherche dans la feuille "Lst_Clients"
    With Sheets("Lst_Clients").ListObjects("Lst_Tab_Clients")
        ' Cherche le "Nom Prénom" dans la colonne correspondante
        Set trouve = .ListColumns("Nom Prénom").Range.Find(Me.Cbx_NomPrenom.Value, LookAt:=xlWhole, LookIn:=xlValues)
        If Not trouve Is Nothing Then ' Si trouvé
            ligne = trouve.Row - .Range.Row '+ 1 Calculer la ligne de la table
            ' Remplir les labels avec les valeurs de la table
            Me.Lbl_NomPrenom = .ListColumns("Nom Prénom").DataBodyRange(ligne)
            Me.Lbl_Téléphone = .ListColumns("Téléphone").DataBodyRange(ligne)
            Me.Lbl_Mail = .ListColumns("Mail").DataBodyRange(ligne)
            Me.Lbl_Adresse = .ListColumns("Adresse").DataBodyRange(ligne) & " " & .ListColumns("Code Postal").DataBodyRange(ligne) & " " & .ListColumns("Ville").DataBodyRange(ligne)
            Me.Lbl_DateAnniverssaire = .ListColumns("Date Anniversaire").DataBodyRange(ligne)
        End If
    End With

    ' Recherche dans la feuille "Evt_Achat"
    With Sheets("Evt_Achat").ListObjects("Lst_Tab_Achat")
        ' Cherche le "Date de Commande" dans la colonne correspondante
         Set trouve = .ListColumns("Nom Prénom").Range.Find(Me.Cbx_NomPrenom.Value)
         If Not trouve Is Nothing Then ' Si trouvé
             ligne = trouve.Row - .Range.Row '+ 1 Calculer la ligne de la table
             ' Remplir les labels avec les valeurs de la table
             Me.Lbl_DateCommande = Me.Cbx_DateCommande.Value
             Me.Lbl_NumCommande = Format(.ListColumns("NumCommande").DataBodyRange(ligne), "0000")
             Me.Chx_virement = .ListColumns("Virement").DataBodyRange(ligne)
             Me.Chx_Chèque = .ListColumns("Chèque").DataBodyRange(ligne)
             Me.Chx_Espèces = .ListColumns("Espèces").DataBodyRange(ligne)
             Me.Chx_Paylib = .ListColumns("Paylib").DataBodyRange(ligne)
         End If
    End With
   
    ' Charger les informations du bon de commande
    Call LoadBonDeCommande(Me.Cbx_NomPrenom, CDate(Me.Cbx_DateCommande))
   
    Exit Sub ' Sortie normale du sub
   
ErrorHandler:     ' Gestion des erreurs
        MsgBox "Une erreur est survenue : " & Err.Description, vbCritical

End Sub
Cordialement.
 
Dernière édition:
Hello

Tu ne remplis pas les infos de la bonne ligne

VB:
Private Sub Cbx_DateCommande_Change() ' Lors de la sélection change dans le combo
Dim trouve As Range
Dim ligne As Long
Dim i As Long
Dim ligneTable As Long
Dim nbArticles As Long
Dim lastRow As Long
Dim found As Boolean
    
    If Not EnableEvents Then Exit Sub
    If Me.Cbx_DateCommande = "" Then Me.Range("B13:F34") = "": Exit Sub
    If Me.Cbx_NomPrenom.ListIndex = -1 Then 'si il n'y a pas de selection OU qu'il y a une saisie ne correspondant pas à la liste du combo
        ViderBdC
        Exit Sub
    End If
        
    ' Recherche dans la feuille "Lst_Clients"
    With Sheets("Lst_Clients").ListObjects("Lst_Tab_Clients")
        ' Cherche le "Nom Prénom" dans la colonne correspondante
        Set trouve = .ListColumns("Nom Prénom").Range.Find(Me.Cbx_NomPrenom.Value, LookAt:=xlWhole, LookIn:=xlValues)
        If Not trouve Is Nothing Then ' Si trouvé
            ligne = trouve.Row - .Range.Row '+ 1 Calculer la ligne de la table
            ' Remplir les labels avec les valeurs de la table
            Me.Lbl_NomPrenom = .ListColumns("Nom Prénom").DataBodyRange(ligne)
            Me.Lbl_Téléphone = .ListColumns("Téléphone").DataBodyRange(ligne)
            Me.Lbl_Mail = .ListColumns("Mail").DataBodyRange(ligne)
            Me.Lbl_Adresse = .ListColumns("Adresse").DataBodyRange(ligne) & " " & .ListColumns("Code Postal").DataBodyRange(ligne) & " " & .ListColumns("Ville").DataBodyRange(ligne)
            Me.Lbl_DateAnniverssaire = .ListColumns("Date Anniversaire").DataBodyRange(ligne)
        End If
    End With
    
    ' Recherche dans la feuille "Evt_Achat"
    With Sheets("Evt_Achat").ListObjects("Lst_Tab_Achat")
        ' Cherche le "Date de Commande" dans la colonne correspondante
         Set trouve = .ListColumns("Nom Prénom").Range.Find(Me.Cbx_NomPrenom.Value, LookAt:=xlWhole, LookIn:=xlValues)
         If Not trouve Is Nothing Then ' Si trouvé PREMIERE LIGNE DU CLIENT (Quelque soit la date)
             ligne = trouve.Row - .Range.Row '+ 1 Calculer la ligne de la table
             For ligneTable = ligne To .ListRows.Count 'on cherche la première ligne du client ET de la date pour avoir le bon numéro de commande et type de paiement
                If .ListColumns("Nom Prénom").DataBodyRange(ligneTable) = Me.Cbx_NomPrenom.Value And Trim(.ListColumns("Date de commande").DataBodyRange(ligneTable)) = CDate(Me.Cbx_DateCommande) Then ' Colonne 3 = Date de Commande
                    ' Remplir les labels avec les valeurs de la table
                    Me.Lbl_DateCommande = Me.Cbx_DateCommande.Value
                    Me.Lbl_NumCommande = Format(.ListColumns("NumCommande").DataBodyRange(ligneTable), "0000")
                    Me.Chx_virement = .ListColumns("Virement").DataBodyRange(ligneTable)
                    Me.Chx_Chèque = .ListColumns("Chèque").DataBodyRange(ligneTable)
                    Me.Chx_Espèces = .ListColumns("Espèces").DataBodyRange(ligneTable)
                    Me.Chx_Paylib = .ListColumns("Paylib").DataBodyRange(ligneTable)
                    Exit For
                End If
            Next ligneTable
         End If
    End With
    Call LoadBonDeCommande(Me.Cbx_NomPrenom, CDate(Me.Cbx_DateCommande))
End Sub
 
Oui, j'ai vue mon erreur hier. Impeccable ces la même chose que j'ai rajouter après quelques heures de recherche et comprendre pourquoi. J'ai fait beaucoup d'amélioration ta regarder?
 
non j'ai pas vraiment regardé, juste ceci:
quand tu créés une nouvelle commande, il faudrait vider le bon de commande (formulaire), parce que si tu recliques sur "Valider", la commande est à nouveau enregistrée dans la table
 
non j'ai pas vraiment regardé, juste ceci:
quand tu créés une nouvelle commande, il faudrait vider le bon de commande (formulaire), parce que si tu recliques sur "Valider", la commande est à nouveau enregistrée dans la table
Bonjour,

Je met a disposition mon fichier si cela intéresse, merci beaucoup à @vgendron pour sont aide.
Il y a sans doute des améliorations, voir en posant le poste j'ai sans doute fait des modifications ensuite.

Cordialement.
 

Pièces jointes

- 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

Réponses
6
Affichages
347
Réponses
2
Affichages
598
Réponses
3
Affichages
317
Réponses
3
Affichages
543
Réponses
10
Affichages
839
  • Question Question
Microsoft 365 Code VBA
Réponses
2
Affichages
522
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…