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 SubOup'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 Subedit 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 !
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
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).
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é.
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.
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.
Merci de votre aide.
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 SubJe 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 SubDans 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 SubLe 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.
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 SubCe 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.
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.