Création d'un tableau à partir d'une liste sur feuille séparée

AUXINE

XLDnaute Nouveau
Bonjour à tous et à toutes :)

J'ai un problème quant à la réalisation d'un devis à partir d'une liste de prix.

Je pars d'une liste d'articles de plus de 1600 références et souhaiterai créer un document Excel me permettant de remplir facilement une grille pour en faire un devis.

J'ai essayé les listes déroulantes associées à la formule Recherche mais avec 1600 références je me perds dans la liste et il est très compliqué de travailler ainsi.

Du coup voici l'idée, je souhaiterai remplir mes quantités directement sur la feuille où se trouve ma liste de prix et que dans mon tableau de devis se remplissent les désignations, prix, quantités et Tva correspondantes aux lignes de ma liste de prix pour lesquelles j'ai renseigné une quantité.

Je sais qu'il faut utiliser une fonction matricielle pour cela (ou une macro ai-je pu lire) mais j'en suis incapable car mes connaissances en Excel se résument aux formules de base.

Je sollicite donc votre aide sur ce problème et je remercie d'avance ceux qui prendront le temps de m'aider.

Ci-joint un fichier d'exemple que j'ai fait en diminuant le nombre de référence pour que ce soit plus pratique pour vous.

Christian :)
 

Pièces jointes

  • Question report de quantités.xlsx
    13 KB · Affichages: 53

Gen Rose

XLDnaute Impliqué
Supporter XLD
Re : Création d'un tableau à partir d'une liste sur feuille séparée

Bonjour AUXINE,
Gardien de phare :)
Le Forum,

Une autre solution sans macro, seulement par tableau avec une somme matricielle et une MFC (à cause des lignes vides du devis).

Cdt,
 

Pièces jointes

  • Exemple_devis.xlsx
    18.3 KB · Affichages: 42

Regueiro

XLDnaute Impliqué
Re : Création d'un tableau à partir d'une liste sur feuille séparée

Bonsoir à Tous
Voir fichier en PJ
Sur la Feuille ( Devis )
Double-Click ( souris gauche ) uniquement valable en Colonne 2 du Tableau2[Désignation]
Userform1 s'ouvre

Code:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
   If Not Intersect([Tableau2[Désignation]], Target) Is Nothing And Target.Count = 1 Then
    UserForm1.Show
  End If
End Sub

Ensuite sur USF
Tu choisis ta Famille dans le Combobox1
Tu choisis ta Désignation dans le Combobox2
Click sur le bouton OK
Le tout est transférer sur la Feuille ( Devis ) sur la cellule active et décalage pour les
autres données

Code dans le USF
Code:
Option Compare Text
Dim MaListe As ListObject
Dim mondico
 Private Sub UserForm_Initialize()
    Dim temp
    Dim c As Range
    Set MaListe = Sheets("Liste de prix").ListObjects("Tableau1")
    Set mondico = CreateObject("Scripting.Dictionary")
    'For Each c In Range("Tableau1[Colonne1]")
    For Each c In MaListe.DataBodyRange.Columns(2).Cells
       If c.Value <> "" Then mondico.Item(c.Value) = c.Value
    Next c
       temp = mondico.items
    Call tri(temp, LBound(temp), UBound(temp))
    Me.ComboBox1.List = temp
  End Sub
 Sub tri(a, gauc, droi) ' Quick sort
    ref = a((gauc + droi) \ 2)
    g = gauc: d = droi
    Do
      Do While a(g) < ref: g = g + 1: Loop
      Do While ref < a(d): d = d - 1: Loop
      If g <= d Then
        temp = a(g): a(g) = a(d): a(d) = temp
        g = g + 1: d = d - 1
      End If
    Loop While g <= d
    If g < droi Then Call tri(a, g, droi)
    If gauc < d Then Call tri(a, gauc, d)
  End Sub
Private Sub ComboBox1_Click()
  Me.ComboBox2.Clear
   Set mondico = CreateObject("Scripting.Dictionary")
       For Each c In MaListe.DataBodyRange.Columns(2).Cells
      If c = Me.ComboBox1 Then mondico(c.Offset(, 1).Value) = "" ' si famille alors on ajoute l'élément de la sous-famille au dictionnaire
   Next c
   Me.ComboBox2.List = mondico.keys
 End Sub
Private Sub ComboBox2_Click()
 For Each c In MaListe.DataBodyRange.Columns(2).Cells
     If c = Me.ComboBox1 And c.Offset(, 1) = Me.ComboBox2 Then
     Me.TextBox1 = c.Offset(, 2)
     Me.TextBox2 = c.Offset(, 3)
     End If
   Next c
End Sub
Private Sub CommandButton1_Click()
    ActiveCell = Me.ComboBox2
    ActiveCell.Offset(, 2) = CDbl(Me.TextBox1)
    ActiveCell.Offset(, 3) = CDbl(Me.TextBox2)
    Unload Me
End Sub
A+
 

Pièces jointes

  • XLD_Devis Cascade VBA.xlsm
    31.7 KB · Affichages: 41

Discussions similaires

Réponses
3
Affichages
370

Statistiques des forums

Discussions
311 733
Messages
2 082 019
Membres
101 872
dernier inscrit
Colin T