Problème de formulaire VBA
Bonjour,
je vient de créer un formulaire sous VBA qui n'est pas finalisé en présentation avec une base de données sur 38 colonnes (A à AL)
il y a 38 Textbox et 1 Combobox pour la base de recherche.
La Combobox est en colonne F et les textbox sont de A à E et de G à AL.
Lorsque je test le formulaire, met réponses sont décalés de 1 et la colonne A ne s'affiche pas lors que je sélectionne un N° dans la Combobox.
Est je ne comprend pas le pourquoi du comment, si une personne pouvais m'expliquer
Ci joint un modèle: https://www.cjoint.com/c/EHyn3VhFijF
Merci pour votre aide
Bonjour,
Remplace le code de ta ComboBox :
Private Sub ComboBox1_Change()
Dim Ligne As Long
Dim I As Integer
If Me.ComboBox1.ListIndex = -1 Then Exit Sub
Ligne = Me.ComboBox1.ListIndex + 2
For I = 1 To 37
'ici, décalage d'une colonne (I + 1) donc colonne A pas prise en compte
Me.Controls("TextBox" & I) = Ws.Cells(Ligne, I + 1)
Next I
'comme c'est une particularité, à traiter en dehords de la boucle
Me.Controls("TextBox38") = Ws.Cells(Ligne, 1)
End SubHervé.
Bonjour Hervé,
je te remercie pour ton aide, j'ai bien copié le VBA dans la partie formulaire et changé les 1 to 38 par 1 to 37dans formuaire et menu déroulant
mais j'ai un bug au niveau du menu déroulant???
Est ce normal? ou je fait une fausse manipulation?
Encore merci pour ton aide
Amitié
Mathias
Bonjour,
Tu as bien remplacé le code existant par le code que je t'ai donné ? Si tu as fait de remplacements éparses, il ce peut que tu est oublié quelques chose.
Hervé.
Bonjour Hervé,
j'ai bien fait le remplacement du VBA, changé les 1 to 37 et j'ai un bug sur la suite (j'ai mis la ligne en gras) du VBA, ci joint la copie de la formule.
Cdt
Mathias
' Les lignes qui débutent par une apostrophe identifient un commentaire c'est-à-dire du texte exploitable par le lecteur et non par le programme VBA
' Objectif : documenter le code VBA pour le rendre plus compréhensible.
'Attention les deux lignes suivantes doivent être impérativement placées en tout début de programme
Option Explicit
Dim Ws As Worksheet 'Variable pour un Objet Worksheet en PUBLIC pour tous les Controls de cet UserForm
'Correspond au programme du bouton QUITTER
Private Sub CommandButton1_Click()
Unload Me
End Sub
Private Sub ComboBox1_Change()
Dim Ligne As Long
Dim I As Integer
If Me.ComboBox1.ListIndex = -1 Then Exit Sub
Ligne = Me.ComboBox1.ListIndex + 2
For I = 1 To 37
'ici, décalage d'une colonne (I + 1) donc colonne A pas prise en compte
Me.Controls("TextBox" & I) = Ws.Cells(Ligne, I + 1)
Next I
'comme c'est une particularité, à traiter en dehords de la boucle
Me.Controls("TextBox38") = Ws.Cells(Ligne, 1)
End Sub
'Correspond au programme du bouton MODIFIER
Private Sub CommandButton2_Click()
If MsgBox("Etes-vous certain de vouloir modifier ce produit ?", vbYesNo, "Demande de confirmation") = vbYes Then
Dim Ligne As Long
Dim I As Integer
If Me.ComboBox1.ListIndex = -1 Then Exit Sub 'On sort si pas de sélection
Ligne = Me.ComboBox1.ListIndex + 2
For I = 1 To 37
If Me.Controls("TextBox" & I).Visible = True Then
Ws.Cells(Ligne, I + 1) = Me.Controls("TextBox" & I)
End If
Next I
End If 'fin de la condition
'Code permettant de modifier le format de la plage de cellule en format nombre
With Ws.Range("D2:d10")
.NumberFormat = "0"
.Value = .Value
End With
End Sub
'Correspond au programme de la LISTE DEROULANTE
Private Sub ComboBox1_Change()
Dim Ligne As Long
Dim I As Integer
If Me.ComboBox1.ListIndex = -1 Then Exit Sub
Ligne = Me.ComboBox1.ListIndex + 2
For I = 1 To 37
Me.Controls("TextBox" & I) = Ws.Cells(Ligne, I + 1)
Next I
End Sub
Sub FORMULAIRE() 'ou le nom que vous avez défini pour la macro
UserForm1.Show vbModeless
End Sub
Private Sub CommandButton3_Click()
Dim L As Integer
If MsgBox("Etes-vous certain de vouloir INSERER ce nouveau contact ?", vbYesNo, "Demande de confirmation") = vbYes Then 'condition : si oui au message
L = Sheets("Bdd Club").Range("a65536").End(xlUp).Row + 1 'Permet de se positionner sur la dernière ligne de tableau NON VIDE
Range("F" & L).Value = ComboBox1 'Insère la donnée de la liste déroulante dans la colonne A
Range("A" & L).Value = TextBox1
Range("B" & L).Value = TextBox2 'Insère la donnée de la textbox1 dans la colonne B et à suivre....
Range("C" & L).Value = TextBox3
Range("D" & L).Value = TextBox4
Range("E" & L).Value = TextBox5
Range("F" & L).Value = TextBox6
Range("G" & L).Value = TextBox7
Range("H" & L).Value = TextBox8
Range("I" & L).Value = TextBox9
Range("J" & L).Value = TextBox10
Range("K" & L).Value = TextBox11
Range("L" & L).Value = TextBox12
Range("M" & L).Value = TextBox13
Range("N" & L).Value = TextBox14
Range("O" & L).Value = TextBox15
Range("P" & L).Value = TextBox16
Range("Q" & L).Value = TextBox17
Range("R" & L).Value = TextBox18
Range("S" & L).Value = TextBox19
Range("T" & L).Value = TextBox20
Range("U" & L).Value = TextBox21
Range("V" & L).Value = TextBox22
Range("W" & L).Value = TextBox23
Range("X" & L).Value = TextBox24
Range("Y" & L).Value = TextBox25
Range("Z" & L).Value = TextBox26
Range("AA" & L).Value = TextBox27
Range("AB" & L).Value = TextBox28
Range("AC" & L).Value = TextBox29
Range("AD" & L).Value = TextBox30
Range("AE" & L).Value = TextBox31
Range("AF" & L).Value = TextBox32
Range("AG" & L).Value = TextBox33
Range("AH" & L).Value = TextBox34
Range("AI" & L).Value = TextBox35
Range("AJ" & L).Value = TextBox36
Range("AK" & L).Value = TextBox37
Range("AL" & L).Value = TextBox38
End If
'Code permettant de modifier le format de la plage de cellule en format nombre
With Ws.Range("D2:d10")
.NumberFormat = "0"
.Value = .Value
End With
' Affiche une boîte de message
MsgBox ("Produit inséré dans fichier sélectionné") 'Vous informant que le présent contact est insérer dans votre tableau Excel.
Unload Me ' Vide et ferme l'Userform ( formulaire)
UserForm1.Show 'Affiche le formulaire
End Sub
Je viens de faire le test sur le classeur exemple et ça fonctionne parfaitement !
Reposte ton classeur modifié pour que je puisse tester.
Hervé.
Re bonjour Hervé,
ci joint le fichier modifié avec tes codes
https://www.cjoint.com/c/EHAn5FkNgFF
Encore un grand merci pour ton aide
Amitié
L'erreur est due au fait que tu as laissé la première version de l'évènement Change et donc "Nom ambigu détecté" !
Je te retourne le fichier.
Hervé.
Un grand merci a toi,
tous fonctionnent très parfaitement, j'ai plus qu'a continué l'évolution de l'outil et faire la mise en forme.
Je reviendrais surement pour d'autres questions, mais tes explications son clair (comme je suis débutant en VBA)
Bonne soirée
Bonjour Hervé,
pense tu que cela serait compliquer de modifier des textbox en combobox pour avoir des menu déroulant obligatoire??
Cdt
Mathias
Oups,
j' ai oublié de mettre le fichier en pièce jointe,
https://www.cjoint.com/c/EHBmnpRj7dG
J'ai créer les comboboxs et les liste déroulantes, il faudrais remplacer les Textbox (supprimer) par les cobobox avec un 2 dans l'intitulé.
Amitié
Oups,
j'ai oublié le fichier,
j'ai créer les combobox avec les menu déroulant qui fonctionne.
Le but est de supprimer les textbox et les remplacer par les combobox (intitulé avec un 2) de facon a pouvoir consulter et/ou alimenter la bdd
https://www.cjoint.com/c/EHBmnpRj7dG
Amitié
Mathias
Oups,
j'ai oublié le fichier,
j'ai créer les combobox avec les menu déroulant qui fonctionne.
Le but est de supprimer les textbox et les remplacer par les combobox (intitulé avec un 2) de facon a pouvoir consulter et/ou alimenter la bdd
https://www.cjoint.com/c/EHBmnpRj7dG
Amitié
Mathias
Bonjour,
pense tu que cela serait compliquer de modifier des textbox en combobox pour avoir des menu déroulant obligatoire??
Compliqué je dirais non mais pourquoi que des ComboBox ? Ces ComboBox servirait tous pour effectuer des recherche ?
Hervé.
Bonjour Hervé,
Le principe serait que le menu déroulant IDE serait pour la recherche, les autres avec un menu deroulant imposant un choix.
https://www.cjoint.com/c/EHCiKkwYKxg
J'ai créer les menus avec le même intitulé avec 2 a coté du nom
Amitié
Mathias