Afficher le N° du devis sur une feuille

Ok, je valide

pour ce qui concerne l'action de valider, j'ai apporté qq indications

Private Sub CB_Valider_Click()
     '*********************
     ' bouton Valider
     '*********************
.../...
     If OptionButtonHonda = False Then
          If OptionButtonAdaptable = False Then MsgBox "Vous devez choisir entre pièce Honda d'origine ou une pièce adaptable.", 64, "Pièce d’origine ou adaptable ?"
          If TextBoxQuantiteDevis = "" Then MsgBox "Vous devez indiquer une quantité de pièce pour ce devis.", 64, "QUANTITÉ MANQUANTE"
     End If

   ' //  PROJET  ajoute au Tableau1

      '    [[Tableau1].Selection] = "+"        ' // ajoute un "+" dans la colonne [Selection] du Tableau1

   ' //  PROJET  ajoute au TableauDevis
      ' selon le bouton OptionButton activé, Origine ou Adaptable, ce sera le prix et la référence correspondants qui seront ajoutés au TableauDevis    papicx28/06/2025

     '      QuXX = TextBoxQuantiteDevis
      '     SelXX = "+"                      ' // ajoute un "+" dans la colonne [SelXX] du TableauDevis

         If OptionButtonHonda = True Then
     '       ReferenceXX = TextBoxNewRefHonda
     '       PrixXX = TextBoxDPCTTC

         End If

         If OptionButtonAdaptable = True Then
     '       ReferenceXX = TextBoxRefAdaptable
     '       PrixXX = TextBoxTTC€Adapable
     '       AdapXX = "Adaptable"  ' ajoute la mention "Adaptable" dans la colonne AdapXX

         End If

End Sub

Oup's

Pressé que j'étais car le repas arrive, je me rends compte que jai juste testé l'affichage du No du devis + NomPrenom + titre mais que je n'ai pas testé l'ajout d'un article.

En effet, les 3 fonctionnent
Est ce que c'est ça que tu voulais que je regarde ?

re, oui, je n'avais fait que les 3 premiers, parce que t'as indiqué que tu voulais faire toi-même le max possible, donc je suis un peu paresseux maintenant

Je parlais de l'image dans le texte de la msgbox.

Bon, j'ai essayé d'avancer, mais je souffre.

Je n'ai pas trouvé comment on "récupère" le N° de la ligne en l'ayant sélectionnée. (que j'ai affublé de la variable "t" )

J'ai cherché dans les formulaires précédents, et même là je n'ai pas trouvé ce qui fait que le clic sur une ligne des listbox fait qu'elle soit reconnue.

Voilà mon miteux code du bouton " AjouterACeDevis"

Sub CB_AjouterACeDevis_Click()
     ' PROJET :
     ' si la TextBoxDevisEnCours est vide, => msg " aucun devis est sélectionné ! " et proposera d'ouvrir le formulaire TousLesDevis            FAIT
     ' si la TextBoxDevisEnCours est renseignée, ce bouton ( AjouterACeDevis ) ouvrira le formulaire AjouterAuDevis (du TableauDevis) Fait
     ' en ayant copié le N+ du devis dans la TextBoxDevisEnCours dans la feuille "Honda"    FAit
     ' en ayant copié les informations de la ligne sélectionnée.   en cours au 29/08/2025
     ' ceci permettra de choisir entre une pièce adaptable (et donc son prix) ou Honda d'origine (et son prix) et ajuster la quantité.
     ' voir le formulaire AjouterAuDevis
     Dim s, r, t, SH

     Set SH = Sheets("Devis")                ' attention dans le module d'une feuille, il faut ajouter à la feuille la plage d'une autre feuille !!!
     s = Sheets("Honda").TextBoxDevisEnCours.Text     'le contenu du Textbox "Devis en cours"
 '    t =       ' ligne sélectionnée dans le Tableau1

  '    Dim LOT1
   '   Set LOT1 = Sheets("Honda")         'le tableau structuré Tableau1 des pièces Honda

     If s = "" Then
          If MsgBox("Aucun devis n'est sélectionné." & vbLf & "Veuillez sélectionner un devis.", vbExclamation, "Devis à sélectionner") = vbYes Then TousLesDevis.Show
     Else
          r = Application.IfError(Application.Match(s, SH.Range("TableauDevis[NoDevis]"), 0), 0)     'position dans le TS "TableauDevis"
          If r = 0 Then
               MsgBox "devis inconnu": Exit Sub
          Else
               With AjouterAuDevis           'cet userform
                           ' // récupère les valeurs du TableauDevis
                    .TextBoxNomPrenom = SH.Range("TableauDevis[NomPrenom]").Cells(r, 1).Value2     'nom correspondant
                    .TextBoxNoDevis = s
                    .TextBoxTitreDevis = SH.Range("TableauDevis[Titredevis]").Cells(r, 1).Value2   'titre correspondant

                           ' // récupère les valeurs du Tableau1 (onglet Honda)
.TextBoxQu = Range("Tableau1[Qu]").Cells(t, 1).Value2                         ' quantité prévue est présent à titre indicatif sur le formlaire
                    .TextBoxDesignation = Range("Tableau1[designation]").Cells(t, 1).Value2
                    .TextBoxRefOriginale = Range("Tableau1[Honda_Origine]").Cells(t, 1).Value2
                    .TextBoxRefAlternative = Range("Tableau1[Ref_Alt]").Cells(t, 1).Value2
                    .TextBoxNewRefHonda = Range("Tableau1[New_Ref_Honda]").Cells(t, 1).Value2
                    .TextBoxDPCTTC = Range("Tableau1[DPC_TTC]").Cells(t, 1).Value2
                    .TextBoxRefAdaptable = Range("Tableau1[REF_HG]").Cells(t, 1).Value2
                    .TextBoxFournisseur = Range("Tableau1[Fournisseurs]").Cells(t, 1).Value2
                    .TextBoxTTC€Adapable = Range("Tableau1[TTC_€_adapt]").Cells(t, 1).Value2

                    .Show
               End With
          End If
     End If
End Sub

edit 13h30

Au vu de la réponse faite à ce sujet (déplacement des sub dans les modules), ne serait il pas préférable de le faire pour celui-ci également car cette procédure sera sollicité par au moins 2 boutons (celui du formulaire ModifierHonda et celui de la page "Honda").

Bon, ça marche... un peu.

Ça ne tient pas compte de la ligne car je n'ai pas trouvé comment il faut faire ça. Du coup, j'ai les titres ! C'est déjà ça

J'ai corrigé des erreurs de noms de champs, notamment celui là.
Le nom de champs dans le Tableau1 était Founisseurs ( au pluriel et surtout il manque le R après le FOU ). J'ai supprimé le S du pluriel
J'ai tout remis en ordre, enfin je pense (Tableau1, Tabel19, Tableau20)

        .TextBoxFournisseur = Range("Tableau1[Fournisseur]").Cells(t, 1).Value2
2025 08 29 140216

Merci de votre aide.

voir ce message que je n'ai pas encore appliqué. (J'ai faim ! )

J'ai appliqué le code proposé par Saboh12617.

voici le fichier à prendre en compte donc. (version 22)

Merci d'avance de votre aide.

je n'ai pas lu tous les postes, mais j'ai pris le dernier fichier. Puis j'ai ajouté 2 boutons dans "AjouterAuDevis" (ajouter un article) et "RechercherHonda" (ajouter au devis actuel) et puis copié et collé vos adaptations.

C'est cela que tu veux ?

Bonsoir,

J'ai testé le fichier, ce qui m'a permis de résoudre un problème dû à un oubli de ma part.
Le bug survenait quand on sélectionnait Honda ou Adaptable sur le formulaire AjouterAuDevis si la quantité n'était pas renseignée.

Ce que j'aurai souhaité, c'est que depuis l'onglet Honda, si je clique sur une ligne (simple clic, pour sélectionner) et que je clique sur le bouton Ajouter au devis, que la pièce sélectionnée soit celle qui s'affiche dans le formulaire AjouterAuDevis avec le numéro de devis sélectionné que l'on voit sur la TextBoxDevisEnCours.

Je demandais quelle est le code qui permet cela. (récupérer la valeur de la ligne pour l'utiliser dans le bouton).

2025 08 30 230512

Le formulaire AjouterAuDevis s'affiche déjà rempli.
Les prix ne s'affichent pas avec les décimales tant que je n'ai pas fais de choix ou indiqué de quantité.

2025 08 30 230637

j'indique la quantité pour ce devis puis le choix.

Si je fais le choix en premier puis la quantité,Là, j'ai une anomalie : le total ne s'affiche pas.

il faut que je bascule sur l'autre choix et revient sur le premier pour que ça s'affiche.

2025 08 30 230907 2025 08 30 230921

En cliquant sur le bouton Valider ça devrait remplir la ligne du devis.


Sur le formulaire ModifierHonda, si on clique sur le bouton Ajouter au devis , ça ferait la même chose que le bouton Ajouter au devis, mais en plus sauvegarde les modifications apportées.
C'est la raison pour laquelle le code du bouton Sauvegarder a été déplacé dans le Module2 grâce au code que m'a transmis Saboh12617 hier.

2025 08 30 232640

Merci de votre aide.

re,

je suppose quelque chose comme ceci

Merci Bart, on avance...

Je réponds à ta question que j'ai vu dans les codes du formulaire AjouterAuDevis :

'on doit prendre quelle valeur unitaire ?

Private Sub TextBoxQuantiteDevis_Change()
     TextBoxQuantiteDevis = Abs(Val(TextBoxQuantiteDevis))     'la valeur absolue de la partie numérique

     If OptionButtonAdaptable = True Then       ' si choix Honda origine, alors prix unitaire d'origine
     TextBoxTotal1Ref = Format(Val(TextBoxQuantiteDevis) * Val(Replace(TextBoxTTC€Adapable.Text, ",", ".")), "#,##0.00")     
     End If

     If OptionButtonHonda = True Then           ' si choix fournisseur adaptable, alors Dernier Prix Connu Toutes Taxes Comprise
          TextBoxTotal1Ref = Format(Val(TextBoxQuantiteDevis) * Val(Replace(TextBoxDPCTTC.Text, ",", ".")), "#,##0.00")     'on doit prendre quelle valeur unitaire ?
     End If
End Sub

Je ne sais pas si c'est propre, mais ça fonctionne !

Était-ce vraiment nécessaire de prendre la valeur absolue de la quantité voulue pour le devis, vu que la saisie impose un nombre sans décimale ?

     TextBoxQuantiteDevis = Format(TextBoxQuantiteDevis, "#,##0")

Pour le bouton Valider, j'ai fais ça.

Un grand mystère pour moi que la msg affiche "plein" à la place du (0) , ....

Bon, là je pense que c'est propre. Dis le moi svp

Private Sub CB_Valider_Click()
     Dim Arr, c

     Arr = f_TextBoxDevisEnCours()
 '    If VarType(Arr(0)) = vbString Then MsgBox "erreur " & Arr(0): Exit Sub
     If VarType(Arr(0)) = vbString Then MsgBox "erreur " & Arr(0) & " Veuillez créer un autre devis pour faire la suite. Merci": Exit Sub
     If Val(Me.TextBoxQuantiteDevis.Text) = 0 Then MsgBox "Vous devez indiquer une quantité de pièce pour ce devis.", 64, "QUANTITÉ MANQUANTE": Exit Sub

     If OptionButtonHonda = False Then
          If OptionButtonAdaptable = True Then
          End If
          If OptionButtonAdaptable = False Then MsgBox "Vous devez choisir entre pièce Honda d'origine ou une pièce adaptable.", 64, "Pièce d’origine ou adaptable ?": Exit Sub
     End If

     Set c = Range("TableauDevis").Cells(Arr(0), Arr(1))     'cellule du nouveau référence à ajouter
     c(1, 2).Value = "-+-??"
     c(1, 4).Value = Me.TextBoxQuantiteDevis

     If OptionButtonHonda = True Then
          c(1, 1).Value = Me.TextBoxNewRefHonda   ' Référence d'origine Honda
          c(1, 5).Value = Me.TextBoxDPCTTC        ' prix unitaire pièce Honda d'origine
     End If

     If OptionButtonAdaptable = True Then
          c(1, 1).Value = Me.TextBoxRefAdaptable  ' Référence de pièce adaptable
          c(1, 3).Value = "Adaptable"
          c(1, 5).Value = Me.TextBoxTTC€Adapable  ' prix unitaire pièce Honda d'origine
     End If

  '   c(1, 5).Value = Me.TextBoxTotal1Ref
     Unload Me                               'vider et désactiver l’userform
     Exit Sub

Dans la Feuille Honda, après de nombreux tests pour formater les prix (Honda et Adaptable) dès l'affichage du formulaire, j'ai mis ça et ça fonctionne.
Pareil, je ne sais pas si c'est propre...

Sub CB_AjouterACeDevis_Click()
     ' PROJET :
     ' si la TextBoxDevisEnCours est vide, => msg " aucun devis est sélectionné ! " et proposera d'ouvrir le formulaire TousLesDevis      FAIT
     ' si la TextBoxDevisEnCours est renseignée, ce bouton ( AjouterACeDevis ) ouvrira le formulaire AjouterAuDevis (du TableauDevis)     FAIT
     ' en ayant copié les informations de la ligne sélectionnée.                                                                          FAIT
     ' ceci permettra de choisir entre une pièce adaptable (et donc son prix) ou Honda d'origine (et son prix) et ajuster la quantité.
     ' voir le formulaire AjouterAuDevis                                                                                                   FAIT :)

     ' M_AjouterACeDevis
     '// la procédure suivante est à déplacer dans le Module2 et à inclure dans  M_AjouterACeDevis

     Dim s, r, t, SH, DPCTTC, TTC€Adapable

     Set SH = Sheets("Devis")                ' attention dans le module d'une feuille, il faut ajouter à la feuille la plage d'une autre feuille !!!
     s = Sheets("Honda").TextBoxDevisEnCours.Text     'le contenu du Textbox "Devis en cours"
     '    t =       ' ligne sélectionnée dans le Tableau1

     If s = "" Then
          If MsgBox("Aucun devis n'est sélectionné." & vbLf & "Veuillez sélectionner un devis.", vbExclamation, "Devis à sélectionner") = vbYes Then TousLesDevis.Show
     Else
          r = Application.IfError(Application.Match(s, SH.Range("TableauDevis[NoDevis]"), 0), 0)     'position dans le TS "TableauDevis"
          If r = 0 Then
               MsgBox "devis inconnu": Exit Sub
          Else
               With AjouterAuDevis           'cet userform
                    ' // récupère les valeurs du TableauDevis
                    .TextBoxNomPrenom = SH.Range("TableauDevis[NomPrenom]").Cells(r, 1).Value2     'nom correspondant
                    .TextBoxNoDevis = s
                    .TextBoxTitreDevis = SH.Range("TableauDevis[Titredevis]").Cells(r, 1).Value2     'titre correspondant  BsAlv 28/08/2025

                    If StrComp(ActiveSheet.Name, "Honda", 1) <> 0 Then MsgBox "mauvaise feuille": Exit Sub
                    If Intersect(ActiveCell, Range("Tableau1").Resize(, 7)) Is Nothing Then MsgBox "active cell n'est pas dans les 5 premières colonnes": Exit Sub
                    t = ActiveCell.Row - Range("tableau1").Row + 1
                    'sera fait dans l'userform "rechercherHonda" après sélection d'un article
                    ' // récupère les valeurs du Tableau1 (onglet Honda)
                    .TextBoxQu = Range("Tableau1[Qu]").Cells(t, 1).Value2     ' quantité prévue est présent à titre indicatif sur le formlaire
                    .TextBoxDesignation = Range("Tableau1[designation]").Cells(t, 1).Value2
                    .TextBoxRefOriginale = Range("Tableau1[Honda_Origine]").Cells(t, 1).Value2
                    .TextBoxRefAlternative = Range("Tableau1[Ref_Alt]").Cells(t, 1).Value2
                    .TextBoxNewRefHonda = Range("Tableau1[New_Ref_Honda]").Cells(t, 1).Value2

               '     .TextBoxDPCTTC = Range("Tableau1[DPC_TTC]").Cells(t, 1).Value2
                     ' // essai de mise au format des prix avec les 2 décimales  papicx 01/09/2025
                     DPCTTC = Range("Tableau1[DPC_TTC]").Cells(t, 1).Value2
                     .TextBoxDPCTTC = Format(DPCTTC, "#,##0.00")

                    .TextBoxRefAdaptable = Range("Tableau1[REF_HG]").Cells(t, 1).Value2
                    .TextBoxFournisseur = Range("Tableau1[Fournisseur]").Cells(t, 1).Value2

               '     .TextBoxTTC€Adapable = Range("Tableau1[TTC_€_adapt]").Cells(t, 1).Value2
                    ' // essai de mise au format des prix avec les 2 décimales  papicx 01/09/2025
                    TTC€Adapable = Range("Tableau1[TTC_€_adapt]").Cells(t, 1).Value2
                    .TextBoxTTC€Adapable = Format(TTC€Adapable, "#,##0.00")

                    .Show
               End With
          End If
     End If
End Sub

Le devis 2025/07/20_d est plein ( 22 articles ), mais la liste ne présente que les 10 premières lignes...

Je vais tâcher de débusquer où est la limite... d'autant que j'avais initialement prévu la largeur de la ListBox pour contenir l'ascenseur sur la droite.

NB : Ne tient pas compte des erreurs de calcul vu que depuis j'ai résolu le problème du choix du prix initial, comme mentionné ci-dessus.

2025 09 01 124551 2025 09 01 125051 2025 09 01 124638

J'ai trouvé pour la dernière question !

Les pièces sans référence ne sont pas affichées.
J'ai donc complété à la main les cases de référence vides, et tout s'affiche bien.

En fait, je corrige le commentaire car c'est " n'affiche pas les lignes sans références."

Dans le formulaire TousLesDevis, il y a ça :

     With DetailsDuDevis.ListBoxDetailDuDevis
          If ptr = 0 Then
               .Clear
          Else
               .List = aOut                  ' coller matrice dans listbox
               For i = ptr + 1 To UBound(aOut)     ' supprimer les lignes vides (sans référence)
                    .RemoveItem ptr
               Next
               FormaterNombreDetail          ' la liste est remplie, on formate les totaux des devis
          End If
     End With
     DetailsDuDevis.TextBoxTotal = MonTotal
     DetailsDuDevis.Show
End Sub

Ce point est donc résolu.

re, il y a encore des choses à resoudre ?

Bonjour Bart,

oui, il y a ce petit bug qui doit tenir à pas grand chose.
J'en parle dans ce message à Saboh12617 car c'est lui qui m'a proposé ce code.

si tu as la solution, alors go.


J'ai répondu dans le code du formulaire ModificationHonda, procédure Private Sub AjouterAuDevis_Click()

 '    Dim Arr, c        '//     6 lignes mise en commentaire par papicx le 03/09/2025

     'ceci est une copie de la macro dans "ajouterAuDevis" mais nécessite des autres TBs !!!!    BsAlv
     ' // Réponse de papicx : non, ce bouton doit sauveagarder les modifications faite sur cet article puis ouvrir le formulaire
     ' // AjouterAuDevis dans lequel l'utilisateur doit faire le choix entre pièce adaptable ou d'origine.
     ' // C'est le bouton VALIDER qui ajoutera la pièce choisie (avec son prix et sa référence) dans le TableauDevis    Papicx

'     Arr = f_TextBoxDevisEnCours()           'cellule pour ajouter cet article modifié
'     If VarType(Arr(0)) = vbString Then MsgBox "erreur " & Arr(0): Exit Sub
     'If Val(Me.TextBoxQuantiteDevis.Text) = 0 Then MsgBox "quantité inconnu": Exit Sub 'autre TB?

Dans tous les cas, il reste 2 choses à terminer :

  • L'affichage des photos dans le formulaire AjouterAuDevis
  • Ajouter un bouton "Mettre à jour la fiche" dans ce formulaire pour aller directement sur le formulaire ModificationHonda sur la référence de cette pièce, cequi permettra de mettre à jour une fiche existante (prix, photo, ajout de la référence de l'adaptable, etc.) puis, de revenir sur le formulaire AjouterAudevis (via le bouton qui est dans la capture ci-dessous) pour faire le choix entre adaptable ou origine et continuer le devis. (bouton valider)
  • L'édition des factures sur papier. ( il y a l'ébauche d'un masque dans l'onglet MasqueDevis ) mais on pourra voir ça plus tard.
2025 08 30 232640

Ce bouton sauvegarde les modifications puis retourne sur le formulaire AjouterAuDevis. d'où la nécessité d'avoir la procédure dans le Module2.

Merci de ton aide.

Rechercher des sujets similaires à "afficher devis feuille"