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

Rechercher des sujets similaires à "formulaire"