Bonjour tout le monde,
Des semaines de recherches ne m'ont pas permis de trouver la solution au problème suivant :
Dans un premier formulaire, j'ai une listbox avec des données dont un ID.
A la sélection d'une ligne de cette listbox et au clique sur un bouton "consultation", un formulaire s'ouvre et affiche le numéro ID de la ligne sélectionnée.
A partir de cet ID (qui se trouve dans un label), je souhaite que le formulaire de consultation s'autoalimente.
Donc, sur le bouton "consultation" du premier formulaire, voici ce que j'ai saisi comme code :
VB:
Private Sub CommandButton2_Click()
If ListBox2.ListIndex = -1 Then
MsgBox "Veuillez selectionner un évènement de la liste.", vbOKOnly, attention
Exit Sub
Else: For i = 0 To (ListBox2.ListCount - 1)
consult_event.id_event = CStr(ListBox2.List(ListBox2.ListIndex, 7))
Next i
End If
consult_event.Show
End Sub
A l'initialisation du second formulaire (consult_event), voici le code que j'ai inséré :
Code:
Private Sub UserForm_Initialize()
Dim derlig As Long
Sheets("bd2").Select
rech = Me.id_event.Caption
derlig = Sheets("bd2").range("Q" & Cells.Rows.Count).End(xlUp).Row
For l = 2 To derlig
If rech = Sheets("bd2").Cells(l, 17).value Then
Me.etab.Caption = Sheets("bd2").Cells(l, 2).value
Me.cp.Caption = Sheets("bd2").Cells(l, 4)
Me.ville_etab.Caption = Sheets("bd2").Cells(l, 3).value
End If
Next l
End Sub
Autant le formulaire "consult_event" s'ouvre bien avec le numéro d'ID, autant la recherche de la ligne à partir de ce même ID ne fonctionne pas. Le formulaire reste désespérément vide.
J'espère que j'ai été clair et veuillez m'excuser de ne pas pouvoir adresser un copie du projet.
Les questions de confidentialité sont aussi bidons que le discours d'un homme politique !... Il est extrêmement facile et rapide d'anonymiser un fichier Excel. L'essentiel pour nous c'est qu'il ait la même structure que le fichier original. Mais, après tout, c'est ton problème, pas le notre...
La propriété Caption d'une Label renvoie une donnée de type String. Si tu as des données numériques dans la colonne 17 il faudra convertir en texte pour que l'égalité se fasse... Ton code modifié :
VB:
Private Sub UserForm_Initialize()
Dim Rech As String
Dim O As Worksheet
Dim DerLig As Long
Dim L As Long
Rech = Me.id_event.Caption
Set O = Worksheets("bd2")
DerLig = O.Range("Q" & Cells.Rows.Count).End(xlUp).Row
For L = 2 To DerLig
If CStr(O.Cells(L, 17).Value) = Rech Then
Me.etab.Caption = O.Cells(L, 2).Value
Me.cp.Caption = O.Cells(L, 4)
Me.ville_etab.Caption = O.Cells(L, 3).Value
End If
Next L
End Sub
Bonjour Robert,
Je suis scotché d'une telle rapidité. J'ai suivi tes indications :
- formatage des cellules de la colonne Q (17) en format texte
- modification des lignes de code.
Malheureusement, le résultat reste le même. J'ai saisi la logique mais je ne comprends toujours pas où ça peche.
Dans tous les cas, un grand merci de t'être penché sur mon cas.
Merci pour votre réponse.
Je préfère travailler avec un boucle tout simplement parce que la listbox n'affiche pas toutes les données. D'où mon souhait d'ouvrir un formulaire de consultation qui va chercher l'ID dans la BD2 et les affiche en intégralité.
Le listbox2 contient en effet une partie de la feuille BD2.
Je vous remercie pour votre réponse et votre aide.
Je viens de vérifier à nouveau et l'ID recherché se trouve bien à la colonne Q (soit 17) de la feuille "bd2".
Je comprends que sans fichier il y a peu de possibilités, mais je ne peu pas l'envoyer, pour des raisons de confidentialité. Je continue mes recherches sur internet.
Je vous remercie quand même pour vos observations à Fanfan et toi.
Cordialement.
Les questions de confidentialité sont aussi bidons que le discours d'un homme politique !... Il est extrêmement facile et rapide d'anonymiser un fichier Excel. L'essentiel pour nous c'est qu'il ait la même structure que le fichier original. Mais, après tout, c'est ton problème, pas le notre...
Du tout. Juste que je me rends compte que sans docs, je n'aurai pas de réponse. Je vais donc me tourner vers un développeur de confiance.
T'inquiètes, c'est pas mon genre.
Cordialement.
Il est très simple (je suis d'accord avec Robert) de créer ex nihilo un classeur exemple "RGPD compliant" (grâce au fonctionnalités qu'offrent Excel)
Par exemple ce petit bout de code fait cela
VB:
Sub RGPD_for_Ever()
Randomize 1600
On Error Resume Next
With Application
Sheets.Add(after:=Sheets(Sheets.Count)).Name = "Ex_" & .Rept(Chr(.RandBetween(65, 90)), 2) & .RandBetween(1, 127)
End With
With Sheets(Sheets.Count)
.Range("A1:F1") = "=""ITEM_""&COLUMN()"
.Range("A2:F33").FormulaR1C1 = "=ADDRESS(ROW(),COLUMN(),4)"
.UsedRange = .UsedRange.Value
End With
End Sub
(Tu trouveras également sur le forum des codes VBA et/ou des classeurs qui font cela trés bien)
[/WTF ]
PS: C'est bien connu que ce forum n'est fréquenté que par des gens indignes de toute confiance, des malotrus de la pire espèce, il y a même surement des communistes ou des Raeliens !!!
Si j'étais moi, je me méfierai...