Formulaire
Bonjour au forum
j'ai était aidé par Thauthéme pour la réalisation d'un formulaire (un grand merci a lui) et j'en ai un deuxième a créer dans le même principe avec un peux plus de colonne et de Combobox.
J'ai suivi se conseil, mais malgré tous j'ai un souci ou je n'est pas compris!
Pour celui la la fonction "nouveau adhérant" sa Bug, lorsque je recherche un individu les informations ne s'affiche pas.
Pouvez vous m'apporter votre aide, voir éclaircir sur le principe de l'affichage.
Ci joint la matrice
https://www.cjoint.com/c/EIsincewNCd
Merci a vous
Bojour MATHIAS
Je ne connaissais pas cette approche du programme via les CTRL.Tag.... et je vais méditer la-dessus (Intéressant) car cela évite d'avoir un programme plus long (Voir mon blog https://cellulexcel.blogspot.fr/p/qui-na-pas-un-jour-utilise-loption.html ) d'ailleurs il est très similaire
Donc pour en revenir à ton formulaire, Le bouton "NOUVEL ADHERANT" (CommandButton3) correspond uniquement à l'insertion des données remplies dans formulaire vers la feuille "bdd csp", ce n'est pas un programme de recherche.
D'autre part la liste déroulante "Type de CSP" (combobox1) correspond à la recherche pour faire remonter les informations dans le formulaire mais n'est pas définit dans le programme Initialize... de plus il y a des variables qui ne servent à rien. De plus il est lié à RowSource = ("CSP") qui à rien à voir....
pour contre il y a un programme pour la combobox15 ("recherche IDE") qui est un programme de recherche pour le remplissage du formulaire.
Donc j'ai modifié le programme de la Combobox1 pour faire fonctionner la Combobox15 (ci-après) .
Cela fonctionne PARFAITEMENT et les informations remontent dans le formulaire via cette recherche
Pour info tu utilises la variable WS qui n'était pas défini
CTRL.Value = WS.Cells(Ligne, CByte(CTRL.Tag))
donc il faut ajouter
Set WS = Sheets("Bdd csp")
Private Sub ComboBox15_Change() 'au changement dans la ComboBox15
Dim Ligne As Long
Dim I As Integer
Dim CTRL As Control
Set WS = Sheets("Bdd csp")
If Me.ComboBox15.ListIndex = -1 Then Exit Sub
Ligne = Me.ComboBox15.ListIndex + 2
For Each CTRL In Me.Controls 'boucle sur tous les contrôles de l'UserForm
If CTRL.Tag <> "" Then 'condition : si la propriété [Tag] du contrôle n'est pas vide
'renvoie la valeur du contrôle dans la cellule ligne : Ligne, colonne : propriété [Tag] du contrôle convertie en Byte, del'onglet WS
CTRL.Value = WS.Cells(Ligne, CByte(CTRL.Tag))
End If 'fin de la condition
Next CTRL 'prochain contrôle de la boucle
End Sub
Va faire un tour sur mon blog.... certes ma programmation est plus simpliste mais elle fonctionne et elle permet une compréhension plus adapté pour les débutants en VBA comme je l'ai été par le passé.
A te relire
Bonjour
essaie en mettant ceci -> Dim ws As Worksheet et ce, juste avant cette instruction --> Private Sub UserForm_Initialize()
Aussi un truc, évite d'utiliser les ROWSOURCE qui ne sont utilisables qu'avec excel sous Windows et qui posent parfois des soucis. Utilise plutôt la méthode ADDITEM
Crdlt
Bonjour a tous,
merci pour c'est précision qui font que j'ai très bien compris pour visualiser les informations dans le formulaire.
Par contre je n'est pas encore percuté le fait que les ajouts de nouveau adhérants et la modification des information dans la Bdd me provoque un bug.
Pouvez vous m'éclairer sur ce point??
https://www.cjoint.com/c/EIvmcCfobHe
Merci a vous
Bonjour le forum,
pouvez vous m'aider sur ce VBA car j'ai débogage qui se fait a.
Merci a vous
Mathias
Private Sub CommandButton3_Click() 'bouton "NOUVEL ADHÉRANT"
Dim L As Long
Dim CTRL As Control
If MsgBox("Etes-vous certain de vouloir INSERER ce nouveau adhérent ?", vbYesNo, "Demande de confirmation") = vbYes Then 'condition : si oui au message
L = WS.Range("a65536").End(xlUp).Row + 1 'Permet de se positionner sur la dernière ligne de tableau NON VIDE
For Each CTRL In Me.Controls
If CTRL.Tag <> "" Then
Select Case CTRL.Tag 'agit en fonction de la propriété [Tag] du contrôle
Case "11", "12", "31" 'cas 11, 12 et 31 (pour eviter les format de date et l'inversion jour moi, utilise un numéro de série de date)
If CTRL.Value <> "" Then WS.Cells(L, CByte(CTRL.Tag)).Value = DateSerial(Year(CTRL.Value), Month(CTRL.Value), Day(CTRL.Value))
Case "15", "25", "28" 'cas 15,25,28 (place une apostrophe devant pour qu'excel considère la données comme texte code postal, numéro de téléphone, mois de sortie)
WS.Cells(L, CByte(CTRL.Tag)).Value = "'" & CTRL.Value
Case Else 'tous les autre cas
WS.Cells(L, CByte(CTRL.Tag)).Value = CTRL.Value
End Select 'fin de l'action en fonction de la propriété [tag] du contrôle
End If
Next CTRL
'************************************************
'Pourquoi cette colonne D ? je ne comprends pas !
'************************************************
'Code permettant de modifier le format de la plage de cellule en format nombre
With WS.Range("D2:D" & L)
.NumberFormat = "0"
.Value = .Value
End With
' Affiche une boîte de message
MsgBox ("L'adhérent a était rajouté dans la Base de Donnée") 'Vous informant que le présent contact est insérer dans votre tableau Excel.
End If
Unload Me ' Vide et ferme l'Userform (formulaire)
UserForm1.Show 'Affiche le formulaire
End Sub
Private Sub CommandButton2_Click() 'bouton "MODIFIER"
Dim L As Long
Dim CTRL As Control
If Me.ComboBox1.ListIndex = -1 Then Exit Sub 'On sort si pas de sélection
If MsgBox("Etes-vous certain de vouloir modifier les informations ?", vbYesNo, "Demande de confirmation") = vbYes Then
L = Me.ComboBox1.ListIndex + 2
For Each CTRL In Me.Controls
If CTRL.Tag <> "" Then
Select Case CTRL.Tag 'agit en fonction de la propriété [Tag] du contrôle
Case "11", "12", "31" 'cas 11, 12 et 31 (pour eviter les format de date et l'inversion jour moi, utilise un numéro de série de date)
If CTRL.Value <> "" Then WS.Cells(L, CByte(CTRL.Tag)).Value = DateSerial(Year(CTRL.Value), Month(CTRL.Value), Day(CTRL.Value))
Case "15", "25", "28" 'cas 15,25,28 (place une apostrophe devant pour qu'excel considère la données comme texte code postal, numéro de téléphone, mois de sortie)
WS.Cells(L, CByte(CTRL.Tag)).Value = "'" & CTRL.Value
Case Else 'tous les autre cas
WS.Cells(L, CByte(CTRL.Tag)).Value = CTRL.Value
End Select 'fin de l'action en fonction de la propriété [tag] du contrôle
End If
Next CTRL
End If
'************************************************
'PoPourquoi cette colonne D ? je ne comprends pas !
'************************************************
'Code permettant de modifier le format de la plage de cellule en format nombre
End Sub
re
Si tu lis et fais ce que je t'ai donné dans ma réponse, tu ne devrais pas avoir ce message de débogage
Mais apparemment tu n'as pas lu
Crdlt