Sélectionner des informations d'un autre fichier dans combobox

Bonjour,

Voilà je vous explique, on m'a aidé à faire un formulaire de changement de prix, mais il faudrait que les informations dans la combobox soient dans prises d'un autre fichier (code si dessous), le chemin d'accès pour reprendre les informations est: 'G:\Commun\GESTION DES STOCKS\GDS\BASE DE DONNEES\[Boissons.xlsm]Base de donnée articles'

Bien sûr, toutes les informations qui seront encodés dans le formulaire (Nouveau prix unitaire et nouveau n° de facture), devront être remplacés dans le fichier avec le chemin d'accès ci-dessus c'est cela est possible.

'en vba on doit déclarer les variables que l'on utilise (avec Option Explicit en début de module, les déclarations
'deviennent obligatoires. Le vbe réagira en s'arrêtant sur les variables non déclrées.
Option Explicit
'gestion numérique et décimaux textbox PU
'ici on déclare les constantes utilisées dans Txt_PUnew_KeyPress (Txt_PUnew=nom de la textbox nouveau PU)
Const entrees_decimales_permises = ".,0123456789" & vbCr & vbBack
Const Point = "."
Const Virgule = ","
Const entrees_slash = ".,/0'123 456789-" & vbCr & vbBack
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'En déclarant les variables en dehors des procèdures (appelées variables globales),
'elles pourront être utiliser dans d'autres procédures sans déclaration dans la procédure elle-même
Dim BD As Worksheet, Rng, c As Range, dl As Integer, Fje As Worksheet, dl1 As Integer
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Private Sub Cb_Exit_Click()
   Unload Me 'pour fermer l'userform
End Sub

Private Sub Cb_Valider_Click()
   Dim FirstAddress As String 'déclaration variable en string signifie que c'est du texte

   If Me.ComboBox1.ListIndex = -1 Or Me.Txt_PUnew = "" Or Me.Txt_Newfac = "" Then 'condition aucune ligne dans combobox1 ou textbox vide
      MsgBox "Complèter tous les champs" 'message d'invite
      Exit Sub 'on sort de la procédure

   Else 'sinon

      With BD 'with signie qu'on travaille sur la feuille BD instanciée dans userform_initialize
         Set c = Rng.Find(Me.ComboBox1, LookIn:=xlValues) ' on recherche la cellule dans la plage Rng ayant la valeur
                                                         ' de la combobox1
         If Not c Is Nothing Then 'si on la trouve
            FirstAddress = c.Address 'on mémorise son adresse
            Do 'boucle Do...Loop
               If CStr(c.Offset(, 8).Value) = Me.Txt_Facture Then c.Offset(, 4) = CDbl(Me.Txt_PUnew)
               Set c = Rng.FindNext(c)
               If CStr(c.Offset(, 8).Value) = Me.Txt_Facture Then c.Offset(, 8) = CStr(Me.Txt_Newfac)

            Loop While Not c Is Nothing And c.Address <> FirstAddress
         Else
            MsgBox "Article ou n° de facture n'existe pas dans la BD!"
         End If
      End With
   End If
End Sub

Private Sub Label4_Click()

End Sub

Private Sub Label5_Click()

End Sub

Private Sub TextBox1_Change()

End Sub
Private Sub TextBox2_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
'procédure interagit avec les touches du clavier, on ne pourra avec ce code
'saisir que des chiffres, virgule ou point qui sera remplacer par une virgule
'étant donné que les paramètres régionaux sont le Français donc le séparateur est la ","
   If InStr(entrees_slash, Chr(KeyAscii)) = 0 Then
      KeyAscii = 0
   End If
End Sub

Private Sub Txt_Facture_Change()

End Sub

Private Sub Txt_newfac_Change()

End Sub

Private Sub Txt_PU_ancien_Change()

End Sub

Private Sub Txt_PUnew_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
'procédure interagit avec les touches du clavier, on ne pourra avec ce code
'saisir que des chiffres, virgule ou point qui sera remplacer par une virgule
'étant donné que les paramètres régionaux sont le Français donc le séparateur est la ","
   If KeyAscii = Asc(Point) Then
      If InStr(Txt_PUnew, Virgule) = 0 Then
         KeyAscii = Asc(Virgule)
      Else
         KeyAscii = 0
      End If
   ElseIf InStr(entrees_decimales_permises, Chr(KeyAscii)) = 0 Then
      KeyAscii = 0
   ElseIf InStr(Txt_PUnew, Virgule) > 0 And KeyAscii = Asc(Virgule) Then
      KeyAscii = 0
   End If
End Sub

Private Sub UserForm_Activate()
'pour positionner le formulaire à son ouverture
   With Me
      .StartUpPosition = 3 'poistion initiale au centre de l'écran
      .Left = 280 'position par rapport au côté gauche de la feuille
      .Top = 110  'position par rapport au côté du haut de la feuille
   End With
End Sub

Private Sub UserForm_Initialize()
   Dim c As Range
   Set BD = ThisWorkbook.Worksheets("Base de donnée articles")
   Set Fje = ThisWorkbook.Worksheets("Journal des entrées")
   dl = BD.Range("D" & Rows.Count).End(xlUp).Row
   dl1 = Fje.Range("C" & Rows.Count).End(xlUp).Row
   Set Rng = BD.Range("D8:D" & dl)
   If dl1 < 8 Then
      MsgBox "Aucun article dans votre tableau!", vbCritical, "ARTICLES"
      Exit Sub
   Else
      For Each c In BD.Range("D8:D" & dl)
         Me.ComboBox1.AddItem c
      Next c
   End If
End Sub
Private Sub ComboBox1_Change()
   Dim ligne As Integer
   Me.Txt_PUnew = ""
   ligne = Me.ComboBox1.ListIndex + 8
   Me.Txt_Facture = BD.Cells(ligne, 12)
   Me.Txt_PU_ancien = Format(BD.Cells(ligne, 8), "0.00")
   Me.TextBox1 = BD.Cells(ligne, 3)
   Me.Txt_Newfac = ""
End Sub

Image de l'UserForm en fichiers joints

Merci d'avance, ca fait depuis 08h du matin que je cherche

Johnny A.

capture

Bonjour Johnnya, bonjour le forum,

Je n'ai pas bien compris ton problème. Il faut que les données soit envoyées dans deux classeurs (le classeur qui contient la macro et Boissons.xlsm) ou uniquement dans Boissons.xlsm ?

Boissons.xlsm est-il ouvert ou pas au moment où tu lances la macro ?

Bonjour,

Voilà je vais reexpliquer mieux et mettre les fichiers en pièce jointes

Dans mon problème, j'ai deux fichiers. Le fichier "GDS - Boissons" et le fichier "Boissons". Le fichier "GDS - Boissons" est la gestion des stocks de toutes nos boissons. Et le fichier "Boissons", est la base de données de tout nos boissons servant à la gestion des stocks.

Dans "GDS - Boissons", j'ai un bouton "Formulaire" dans la feuille "Journal des entrées". Ce bouton une fois activer, donne un userform avec un pleins d'informations comme la référence, le prix unitaire actuel, etc etc. Ce panel sert à modifier un prix unitaire à cause d'une hausse des prix de celui-ci. On encode la référence, le nouveau prix et le nouveau N° de facture et on valide.

Avant, la base de donnée se trouvait dans le fichier "GDS - Boissons", mais pour des raisons de simplification, on l'a mis à part.

Maintenant, le formulaire continue de fonctionner mais, il change les prix dans la base de donnée du fichier "GDS - Boissons" et non dans celui de "Boissons". Du coup, cela va faire pleins d'erreurs etc dans notre inventaire, enfin je passe les détails.

Il faudrait donc, que dans le formulaire, quand on encode le nouveau prix, etc. Cela prends les valeurs encodés et les envoies dans le fichier "Boissons" et non dans la feuille "Base de donnée articles" du fichier "GDS -Boissons".

J'espère avoir été claire maintenant dans mes explications. Le chemin d'accès à mettre dans le code si vous y arrivez est le suivant: G:\Commun\GESTION DES STOCKS\GDS\BASE DE DONNEES\Boissons.xlsm

Merci d'avance pour votre aide

Johnny A.

15boissons.xlsm (60.90 Ko)
Rechercher des sujets similaires à "selectionner informations fichier combobox"