XL 2019 Userform - Pointeurs

ynx69

XLDnaute Junior
Bonjour ,

Je cherche à créer une macro afin de réaliser des bons de commande en automatique et je sèche sur 2 points :
1- Dans un userform, je souhaite que l'utilisateur selectionne le fournisseur souhaité dans la liste de fournisseur présent sur la feuille cible ( dans le userform, je ne sais pas comment les intégrer sans doublons et comment les selectionner pour que ceci soit pris en compte pour le reste de la macro )
2- Toujours dans cet userform, je souhaiterais, une fois que le fournisseur est selectionné, que la liste des référence lui étant associé s'affiche
3- une fois que tout est good, je souhaiterais que les données pour ce fournisseur et les codes associés qui ont été selectionnés par l'utilisateur soient transférés sur la feuille cible.

Dernier point :
- une difficulté que je vois : s'il y a plusieurs codes associés il faut également que sur la feuille cible, la ligne total se décale d'autant de codes.

Je vous remercie par avance pour votre aide, le fichier est en pièce jointe.

Merci

Ynx
 

Pièces jointes

  • Exemple.zip
    21.9 KB · Affichages: 17

fanch55

XLDnaute Barbatruc
Bonsoir,
Pour commencer, l'alimentation de votre combobox:
VB:
Private Sub UserForm_Activate()
    Set F = Sheets("Source").Rows.Find("FOURNISSEUR RETENU", lookat:=xlWhole)
    If Not F Is Nothing Then
        Set Dico = CreateObject("Scripting.Dictionary")
            R = F.Offset(1).Address
            Set F = Sheets("Source").Columns(F.Column).Find("", F, SearchOrder:=xlByRows)
            R = R & ":" & F.Offset(-1).Address
            
            T = Sheets("Source").Range(R)
            For i = LBound(T) To UBound(T)
                If T(i, 1) <> "" Then Dico(T(i, 1)) = ""
            Next i
            T = Dico.keys
            Tri T, LBound(T), UBound(T)
            Me.ComboBox1.List = T
        Set Dico = Nothing
    Else
        Unload Me
    End If
End Sub
Sub Tri(a, gauc, droi) ' Quick sort BoisGontier
  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

Le tableau des Données en Source peut-il être transformés en Table structurée ?
Si on doit continuer, il faudrait que vous développiez le concept de votre Userform: combien de textbox, de listbox ou combobox , vous seul pouvez savoir ce dont vous avez réellement besoin pour remplir la cible .
 

ynx69

XLDnaute Junior
Bonsoir,
Pour commencer, l'alimentation de votre combobox:
VB:
Private Sub UserForm_Activate()
    Set F = Sheets("Source").Rows.Find("FOURNISSEUR RETENU", lookat:=xlWhole)
    If Not F Is Nothing Then
        Set Dico = CreateObject("Scripting.Dictionary")
            R = F.Offset(1).Address
            Set F = Sheets("Source").Columns(F.Column).Find("", F, SearchOrder:=xlByRows)
            R = R & ":" & F.Offset(-1).Address
           
            T = Sheets("Source").Range(R)
            For i = LBound(T) To UBound(T)
                If T(i, 1) <> "" Then Dico(T(i, 1)) = ""
            Next i
            T = Dico.keys
            Tri T, LBound(T), UBound(T)
            Me.ComboBox1.List = T
        Set Dico = Nothing
    Else
        Unload Me
    End If
End Sub
Sub Tri(a, gauc, droi) ' Quick sort BoisGontier
  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

Le tableau des Données en Source peut-il être transformés en Table structurée ?
Si on doit continuer, il faudrait que vous développiez le concept de votre Userform: combien de textbox, de listbox ou combobox , vous seul pouvez savoir ce dont vous avez réellement besoin pour remplir la cible .

Bonjour @franch55 merci beaucoup pour votre aide, j'ai mis la macro donné pour la rubrique fournisseur et ca fonctionne très bien. j'essaye de comprendre en meme temps mais pas facile.

J'ai modifié le userform comme indiqué afin de vous donner + d'infos sur ce que je souhaite faire :
- L'utilisateur choisi le fournisseur qu'il souhaite
- Dans le champs en dessous, je souhaiterais que l'ensemble des codes associés au fournisseur s'affiche avec les éléments Libellés , code ean , devise , unité de commande , incoterm , lieu de livraison , quantité defs date de livraison. L'idée c'est que ce champs apparaissent comme un tabelau. l'utilisateur a la possibilité de tous les selectionner ou d'en selectionner que certains.
- Il indique une date de début de validité
- Il indique une date de fin de validité

Une fois que tout est rempli par l'utilisateur, la touche validé doit permettre de :
- copié coller les codes , libellés et codes EAN de la feuille source vers la feuille cible
- Le nom du fournisseur selectionné doit etre copié sur la feuille cible dans les cellules B3 et B4
- la devise de la feuille source ( colonne U la première cellule qui match avec le fournisseur , en général un fournisseur = une devise ) doit etre copié en E19 de la feuille cible
- La première unité de commande à partir de M7 et correspondant au bon fournisseur doit être copiée dans la feuille cible en G19 ( si 1=1 on doit copié 1 , si 1=100 on copie 100 , si 1=1000 on copie 1000 ect .. )
- Les prix doivent etre mis dans la cible à partir de la ligne E21 jusqu'à n
- Les quantités à partir de D21
- Les incoterms et lieu de livraison en G et H21 jusqu'à n

merci d'avance pour votre aide

ynx
 

Pièces jointes

  • Exemple.zip
    21.9 KB · Affichages: 11

fanch55

XLDnaute Barbatruc
Je veux bien vous aider,
mais l'optique du Forum, c'est d'assister les demandeurs dans leur développement,
pas de tout faire : il faudrait que vous mettiez les mains dedans aussi .
Le dernier fichier que vous avez joint est le même que le premier ...
 

ynx69

XLDnaute Junior
Je veux bien vous aider,
mais l'optique du Forum, c'est d'assister les demandeurs dans leur développement,
pas de tout faire : il faudrait que vous mettiez les mains dedans aussi .
Le dernier fichier que vous avez joint est le même que le premier ...
Bonjour @Franch55,

J'ai mis le bon fichier en pièce jointe mes excuses.
Concernant votre commentaire, je ne cherche pas à ce que le travail me soit maché bien au contraire je cherche à comprendre ce qui est fait.
Dans la première macro que vous m'avez transmis par exemple j'ai du mal à comprendre toutes les fonctions notamment les boucles.
Pour les problèmatique ou je souhaite transférer des données d'un userform à des cellules sur la feuille cible, je ne sais pas du tout comment géré le transfert de donnée d'une feuille à un userform et d'un userform à la feuille cible.
Concrètement mon niveau en codage est proche du 0 infini. Mais si je sollicite le forum c'est avant tout dans une optique de progression.

Merci à vous d'avance

Ynx
 

Pièces jointes

  • Exemple.zip
    27 KB · Affichages: 9

fanch55

XLDnaute Barbatruc
Bonsoir,
les données de la feuille "Source" ont été converties en Table de nom "Source" .
une feuille de travail dénommée "Work" a été créée et abrite une table d'extraction "Temp"
Une table de nom "Cible" a été créée dans la feuille "Cible" à partir de la ligne 20 .
Vous avez matière à réflexion avec le classeur joint .
Je m'étonne de voir les Devises et les Unités de commande hors de la table Cible: s'il y a plusieurs codes pour un fournisseur, ce seront donc les dernières en table .

Je m'absente pour les fêtes pour quinze jours chez mes enfants et petits enfants.
Ordinateur proscrit, d'autant plus que je n'ai qu'un fixe ..
Bonnes fêtes de Noël et de nouvel An . 🥳
 

Pièces jointes

  • ynx69.xlsm
    69.8 KB · Affichages: 22

Discussions similaires

Réponses
11
Affichages
613
Réponses
8
Affichages
220

Statistiques des forums

Discussions
312 033
Messages
2 084 803
Membres
102 672
dernier inscrit
gemo911