Afficher le devis en cours
Bonjour à tous,
Sur l'onglet Honda, j'ai un bouton "Afficher le devis" CB_AfficherLeDevis_Click() que j'essaye de faire fonctionner.
Le bouton à sa droite permet de sélectionner un devis. Une fois sélectionné, le N° du devis s'affiche dans la TextBoxDevisEnCours que vous voyez.
Les Devis sont dans le TableauDevis qui est dans l'onglet Devis.
J'ai essayé de faire ce code en m'inspirant de ce qui existe dans la feuille TousLesDevis et de son bouton AfficherCeDevis ( CB_AfficherDevis_Click() )
Voici ce que j'ai essayé de faire, qui évidemment bugue sur la ligne.
En fait, le problème est que je n'arrive pas à comprendre comment se font les tableaux "Array" et comment les gérer.
r = Application.IfError(Application.Match(MonDevis, Range("TableauDevis[NoDevis]"), 0), 0) ' la ligne du devis (enfin, c'est ce que je voulais... )Private Sub CB_AfficherLeDevis_Click()
'**************************
' ouvre le devis affiché dans la TextBoxDevisEnCours de l'onglet Honda
'**************************
' // ouvre le devis sélectionné en détail dans le formulaire DetailsDuDevis
Dim C As Range, MonDevis, r, Arr, aOut, ptr, i, MonTotal
MonDevis = Me.TextBoxDevisEnCours 'le numero du devis
If MonDevis = "" Then
MonDevis = MsgBox("Aucun devis sélectionné !", vbCritical)
Exit Sub
Else
With MonDevis
r = Application.IfError(Application.Match(MonDevis, Range("TableauDevis[NoDevis]"), 0), 0) ' la ligne du devis (enfin, c'est ce que je voulais... )
If r = 0 Then
MsgBox "Aucun devis sélectionné !": Exit Sub
Else
Arr = Range("TableauDevis").Rows(r).Value2 'contenu de la ligne de ce Devis
End If
End With
Arr = Array(Range("TableauDevis").Rows(r).Value2) 'contenu de la ligne de ce Devis
DetailsDuDevis.TextBoxNomPrenom = Arr(1, 1) ' NomPrenom Nom et Prénom
DetailsDuDevis.TextBoxNoDevis = Arr(1, 3) ' NoDevis N° du devis
DetailsDuDevis.TextBoxTitreDevis = Arr(1, 4) ' TitreDevis ' corrigé le 24/08/2025 papicx
DetailsDuDevis.OptionButton1 = (StrComp(Arr(1, 2), "Ouvert", 1) = 0) ' bouton "ouvert"
DetailsDuDevis.OptionButton2 = (StrComp(Arr(1, 2), "Verrouillé", 1) = 0) ' bouton "Verrouillé"
' DetailsDuDevis.TextBoxAdrCPVille = [TableauClients].Item(pos, 2) & " " & [TableauClients].Item(pos, 3) & " " & [TableauClients].Item(pos, 4) ' adresse, CP, ville
' DetailsDuDevis.TextBoxMotoCoulImmat = [TableauClients].Item(pos, 5) & " " & [TableauClients].Item(pos, 6) & " " & [TableauClients].Item(pos, 7) ' Moto, couleur, immatriculation
r = 0
For i = 7 To UBound(Arr, 2) Step 6 'les colonnes des ReferenceXX ' modifié le 5 en 6 car les colonnes "designation" ont été ajoutées au TableauDevis papicx le 22/07/2026
r = r - (Len(Arr(1, i)) > 0) 'nombre non-vide
Next
ReDim aOut(1 To Application.max(1, r), 1 To 7) 'préparer une matrice la plus adaptée pour tous ces références utiles changer le 6 en 7 papicx le 20/07/2026
For i = 7 To UBound(Arr, 2) Step 6 'boucler toutes les colonnes "Referencexx" les colonnes "designation" ont été ajoutées au TableauDevis papicx le 22/07/2026
If Arr(1, i) <> "" Then 'référence connue
ptr = ptr + 1 'augmenter pointer
aOut(ptr, 1) = Arr(1, i) 'reference
aOut(ptr, 2) = Arr(1, i + 3) ' Adap01
aOut(ptr, 3) = Arr(1, i + 1) ' designation
aOut(ptr, 4) = Arr(1, i + 4) ' Qu01
aOut(ptr, 5) = Arr(1, i + 5) ' Prix01
aOut(ptr, 6) = aOut(ptr, 4) * aOut(ptr, 5) ' calcul du total par référence (prix X quantité)
MonTotal = MonTotal + aOut(ptr, 6) ' total du devis
End If
Next
MonTotal = Format(MonTotal, "# ##0.00 €") ' formatage du total du devis, attention le mettre en dehors de la boucle !!! papicx 24/08/2025 ajout du € le 28/08/2025
With DetailsDuDevis.ListBoxDetailDuDevis
If ptr = 0 Then
.Clear
Else
.List = aOut ' coller matrice dans listbox
For i = ptr + 1 To UBound(aOut) ' n'affiche pas les lignes 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 If
End Sub
Merci de votre aide bienveillante.