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.
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.