XL 2016 Bon de commande depuis un liste.

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 !

jonathanBLAZE

XLDnaute Nouveau
Bonjour,

Je cherche à créer sous excel un fichier qui comprendrait 4 onglets de produits et un onglet "bon de commande" qui serait automatiquement rempli des produits à ajouter : l'idée serait d'avoir un bouton "ajouter"(ou autre solution) en face de chaque produit, qui ajouterait ce produit dans le BDC. Mais je ne sais pas coder, et je n'ai pas trouvé de formule qui permette de faire en sorte de n'afficher que les produits voulus, qui ne se suivent pas forcément dans la liste du catalogue...
Je souhaite uniquement faire remonté les infos réf "fournisseur" , "description" , "prix".

Je vous mets en PJ le fichier que je souhaite faire fonctionner.

Je galère depuis un moment sur le sujet donc... un grand merci d'avance pour votre aide !!!
 

Pièces jointes

Bonjour jonathanBLAZE, bienvenue sur XLD, bonjour Oneida,
Je souhaite uniquement faire remonté les infos réf "fournisseur" , "description" , "prix".
1 - Que voulez-vous faire de ces 3 données ?

2 - Dans les 4 feuilles de produits il n'y a pas de colonne "description", il y a "DESIGNATION".

3 - Donnez un exemple de BDC montrant les relations avec les feuilles de produits.

A+
 
Dernière édition:
Bonjour.
Mon système standard de consultation / mise à jour de tableau à base de ComboBox liées devrait faire l'affaire en utilisant deux objets ComboBoxLiées dans l'UserForm, un pour la base Articles, l'autre pour l'onglet commande …
 
Merci pour vos réponses.
Je souhaite, quand je choisi un produit de la liste des onglets ( intrusion, contrôle d’accès, incendie, it) remonter les informations suivante vers le BDC:
H référence fournisseur vers C n°article BDC
E désignation vers E description BDC
I prix vers S prix BDC
 
Re
je n'ai pas compris
Je souhaite uniquement faire remonté les infos réf "fournisseur" , "description" , "prix".
Un exemple pour filtrer qui semble fonctionner .( à Adapter)
VB:
Private Sub TextBox1_Change()
Dim filtre As String
Dim DerLgn As Long
    filtre = "*" & Me.TextBox1.Text & "*"  
With Sheets("INTRUSION")
      If .AutoFilterMode Then
          .AutoFilterMode = False
      End If
DerLgn = .Cells(.Rows.Count, 3).End(xlUp).Row
               .Range("B6:J" & DerLgn).AutoFilter Field:=4, Criteria1:=filtre
End With
End Sub
Jean marie
 
Pour gérer la feuille BON DE COMMANDE il n'y a pas besoin de VBA :

- liste de validation en A26, à tirer vers le bas => INTRUSION;CONTROLE D'ACCES;INCENDIE;IT

- liste de validation en C26, à tirer vers le bas => =INDIRECT("'"&SUBSTITUE(A26;"'";"''")&"'!Articles")

- formule en E26, à tirer vers le bas :
Code:
=SIERREUR(INDEX(INDIRECT("'"&SUBSTITUE(A26;"'";"''")&"'!E:E");EQUIV(C26;INDIRECT("'"&SUBSTITUE(A26;"'";"''")&"'!H:H");0));"")
- formule en P26 à tirer vers le bas :
Code:
=SIERREUR(INDEX(INDIRECT("'"&SUBSTITUE(A26;"'";"''")&"'!I:I");EQUIV(C26;INDIRECT("'"&SUBSTITUE(A26;"'";"''")&"'!H:H");0));"")
- formule en X26, à tirer vers le bas :
Code:
=SIERREUR(INDEX(INDIRECT("'"&SUBSTITUE(A26;"'";"''")&"'!F:F");EQUIV(C26;INDIRECT("'"&SUBSTITUE(A26;"'";"''")&"'!H:H");0));"")
Le piège c'est l'apostrophe dans le nom de la feuille CONTROLE D'ACCES il faut en effet la doubler pour que les formules fonctionnent.
 

Pièces jointes

Dernière édition:
Bonjour jonathanBLAZE, le forum,

Avec la solution que j'ai donnée la feuille BON DE COMMANDE fonctionnera bien à 2 conditions :

- les références fournisseur sont toutes renseignées (pas de cellule vide en colonne H)

- il n'y a pas de doublon dans ces références fournisseur.

Pour ce faire j'ai un peu modifié la macro du bouton VALIDER de l'UserForm :
VB:
Private Sub VALIDATIONPRODUIT_Click()
 
If Trim(TextBox6) = "" Then TextBox6.SetFocus: MsgBox "La référence fournisseur doit être renseignée": Exit Sub
If Application.CountIf(Columns("H"), Trim(TextBox6) Then TextBox6.SetFocus: MsgBox "La référence fournisseur existe déjà !": Exit Sub

With Cells(Columns("H").Find("", Range("H5"), xlValues).Row, "C") '1ère cellule vide en colonne H
    .Value = TextBox1
    .Offset(, 1) = TextBox3
    .Offset(, 2) = TextBox2
    .Offset(, 3) = TextBox4
    .Offset(, 4) = TextBox5
    .Offset(, 5) = Trim(TextBox6)
    .Offset(, 6) = Val(Replace(TextBox7, ",", "."))
End With

MsgBox "La réference a bien été ajouté", vbOKOnly + vbInformation, "CONFIRMATION"

Unload Me

End Sub
La propriété Enabled du bouton est toujours à True.

A+
 

Pièces jointes

Concernant la RECHERCHE, si l'on veut rechercher dans toutes les colonnes, on peut utiliser le filtre avancé :
VB:
Private Sub TextBox1_Change()
Dim filtre As String
filtre = "*" & TextBox1 & "*"
[L6] = "=COUNTIF(C6:J6," & """" & filtre & """)" 'critère
[B5].CurrentRegion .AdvancedFilter xlFilterInPlace, [L5:L6] 'filtre avancé
[L6] = ""
End Sub
Pour annuler le filtrage il suffit d'effacer le contenu de la TextBox.
 

Pièces jointes

Bonjour.
Il y a quand même beaucoup moins de code utilisateur à prévoir et à maintenir dans un UserForm utilisant mes objets. Le plus gros n'y est que dans la Sub USerForm_Initialize comme série d'instructions des deux formes :
VB:
MonObjetComboBoxLiées.Add UneComboBox, IntituléColonneTableau
MonObjetControlsAssociés.Add UnAutreTypeMSForms, IntituléColonneTableau
Les filtres seront réalisés en interne par la programmation de service en réadaptant automatiquement les List des ComboBox prises en charge non encore renseignées.
Enfin lorsque plus qu'une seule ligne correspond, il s'exécute une procédure généralement très courte :
VB:
Private Sub MonObjetComboBoxLiées_BingoUn(ByVal Ligne As Long)
LigneCourante = Ligne
TableaudesValeursdelaLigne = MonObjetComboBoxLiées.Lignes(LigneCourante).Range.Value 
End Sub
Naturellement j'utilise habituellement des noms plus courts. Généralement :
VB:
Private WithEvents CLs As ComboBoxLiées, CAs As ControlsAssociés, LCou As Long, TVL()
Propriété du ComboBoxLiées, Lignes reprend simplement la collection ListRows du ListObject couvrant le tableau. Elle supporte donc les méthode Add et Delete d'Excel. Sa Add renvoie un nouvel exemplaire de ListRow, munie d'une propriété Range à la Value de laquelle on pourra affecter TVL. Très très court à écrire tout ça …
Joignez un classeur muni d'une base articles unique et d'un UserForm où la plupart des TextBox auront été remplacées par des ComboBox si vous souhaitez que j'y implante les modules de classes, assez conséquents, à ne surtout plus retoucher, de ces objets de service, ainsi qu'un module standard de service MSujetCBx pour la fabrication de listes classées et sans doublon, assorties de listes de numéros de lignes correspondantes, à partir de plages d'une colonne, et leurs restrictions mutuelles pour les filtrages.
 
- 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
4
Affichages
544
Réponses
1
Affichages
461
Réponses
3
Affichages
396
Retour