ListBox et TextBox, prendre en compte une colonne de plus
Résolu
Nai
Messages postés
765
Statut
Membre
-
Nai Messages postés 765 Statut Membre -
Nai Messages postés 765 Statut Membre -
Bonsoir,
Contexte : Je souhaitais utiliser une base de données pour remplir un classeur. J'avais donc 2 fichiers. Dans mon classeur servant de base de données (https://www.cjoint.com/c/EBjagTWIC04 ) j'avais plusieurs colonnes dont les 3 premières m'intéressaient à insérer dans le classeur destiné à les recevoir (https://www.cjoint.com/c/EBjai1aRu7q )
Aujourd'hui, je voudrais pouvoir en insérer 1 de plus (la colonne D en l'occurrence).
Novice, mais j'ai tenté. Le code d'origine :
Ici, j'ai juste modifié la ligne en gras avec ("A2:D" & derlig). Histoire qu'il garde en mémoire cette plage.
Ensuite, plus compliqué, je me suis perdu.
Ici, j'ai ajouté une ligne : Range("D10") = Split(.List(ListBox1.ListIndex), " - ")(2)
Sur ce 2, je suppose qu'il faut mettre un 3, la suite quoi. C'aurait été trop facile. Échec. Je tente avec 0, et là, ça marche. Mais j'ai le contenu de la première colonne. Je me dis : "je dois lui dire à quoi correspond le 3".
Je pense à cette macro :
Et là, c'est le drame. En ajoutant un cptr, 4, pas de résultat. Le débogeur me surligne : For cptr = 1 To UBound(Sources, 1) et je ne comprend plus rien.
Que dois-je modifier pour prendre en compte cette 4ième colonne (et éventuellement même une cinquième, etc) ?
Merci d'avance de votre aide !
Bien à vous,
Naï
ps: je surveille tous mes sujets non résolus, si solution vous avez, je la lirais à coup sûr :)
Contexte : Je souhaitais utiliser une base de données pour remplir un classeur. J'avais donc 2 fichiers. Dans mon classeur servant de base de données (https://www.cjoint.com/c/EBjagTWIC04 ) j'avais plusieurs colonnes dont les 3 premières m'intéressaient à insérer dans le classeur destiné à les recevoir (https://www.cjoint.com/c/EBjai1aRu7q )
Aujourd'hui, je voudrais pouvoir en insérer 1 de plus (la colonne D en l'occurrence).
Novice, mais j'ai tenté. Le code d'origine :
Private Sub Workbook_Open()
Dim derlig As Long
On Error GoTo sortie
Workbooks.Open ThisWorkbook.Path & "\bdd.xlsx"
With Workbooks("bdd.xlsx").Sheets("Feuil1")
derlig = .Range("A" & Rows.Count).End(xlUp).Row
Sources = .Range("A2:C" & derlig).Value
End With
ActiveWorkbook.Close SaveChanges:=True
With Sheets("Feuille de présence")
.ListBox1.Visible = False
End With
supervision
Exit Sub
sortie:
MsgBox "Désolé mais la base de données n'a pas été trouvé." & vbLf & "Pour utiliser une base de données, merci de placer le fichier bdd.xlsx dans le dossier : " & ThisWorkbook.Path & "" & vbLf & "Plus d'aide : www.lanimetvous.com"
On Error GoTo 0
End Sub
Ici, j'ai juste modifié la ligne en gras avec ("A2:D" & derlig). Histoire qu'il garde en mémoire cette plage.
Ensuite, plus compliqué, je me suis perdu.
Option Explicit
Private Sub ListBox1_Click()
Call Module5.ajouter_ligne_enfant
DoEvents
With ListBox1
If .ListIndex = -1 Then Exit Sub
Range("A10") = Split(.List(ListBox1.ListIndex), " - ")(0)
Range("B10") = Split(.List(ListBox1.ListIndex), " - ")(1)
Range("C10") = Split(.List(ListBox1.ListIndex), " - ")(2)
.Visible = False
End With
With TextBox1
.Value = ""
End With
Range("A10").Select
End Sub
Ici, j'ai ajouté une ligne : Range("D10") = Split(.List(ListBox1.ListIndex), " - ")(2)
Sur ce 2, je suppose qu'il faut mettre un 3, la suite quoi. C'aurait été trop facile. Échec. Je tente avec 0, et là, ça marche. Mais j'ai le contenu de la première colonne. Je me dis : "je dois lui dire à quoi correspond le 3".
Je pense à cette macro :
Private Sub TextBox1_Change()
Dim lettre As String, cptr As Long, cptr_tablo As Long, derlig As Long, i As Long
Dim Tb()
lettre = UCase(TextBox1.Value)
If lettre = "" Then Exit Sub
For cptr = 1 To UBound(Sources, 1)
If Sources(cptr, 1) Like lettre & "*" Then
ReDim Preserve Tb(cptr_tablo)
Tb(cptr_tablo) = Sources(cptr, 1) & " - " & Sources(cptr, 2) & " - " & Sources(cptr, 3)
cptr_tablo = cptr_tablo + 1
End If
Next
If cptr_tablo = 0 Then MsgBox "Aucun Nom commençant par : " & lettre: Exit Sub
With ListBox1
.Clear
For i = LBound(Tb) To UBound(Tb)
.AddItem Tb(i)
Next
.Visible = True
End With
End Sub
Et là, c'est le drame. En ajoutant un cptr, 4, pas de résultat. Le débogeur me surligne : For cptr = 1 To UBound(Sources, 1) et je ne comprend plus rien.
Que dois-je modifier pour prendre en compte cette 4ième colonne (et éventuellement même une cinquième, etc) ?
Merci d'avance de votre aide !
Bien à vous,
Naï
ps: je surveille tous mes sujets non résolus, si solution vous avez, je la lirais à coup sûr :)
A voir également:
- ListBox et TextBox, prendre en compte une colonne de plus
- Déplacer une colonne excel - Guide
- Trier une colonne excel - Guide
- Créer un compte google - Guide
- Colonne word - Guide
- Installer windows 10 sans compte microsoft - Guide
8 réponses
Bonjour,
Vous etiez sur la bonne voie, fichier modifie pour 4 colonnes.
J'ai un peu modifie le code pour la recherche nom car "m" n'est pas "M"
Il y a un probleme de lenteur pour l'affichage apres choix !!!!! Ai pas cherche.
https://www.cjoint.com/c/EBjjIoy0zHm
A+
Vous etiez sur la bonne voie, fichier modifie pour 4 colonnes.
J'ai un peu modifie le code pour la recherche nom car "m" n'est pas "M"
Il y a un probleme de lenteur pour l'affichage apres choix !!!!! Ai pas cherche.
https://www.cjoint.com/c/EBjjIoy0zHm
A+
Merci f89 ! :)
J'ai ajusté les autres macros, puisqu'une colonne a été ajoutée.
Je vois que tu l'utilises pas la même méthode que dans l'ancien fichier.
Dans TextBox1_Change, tu as mis en commentaire :
Ce code ne sert à rien ? ^^
Aussi, puisqu'une nouvelle colonne est prise en compte, j'ai besoin de modifier la macro et la fenêtre qui concerne cette partie. A priori les macro CommandButton1_Click & Nouvel_Enfant. Mais comment faire ?
Encore, si je voulais prendre en compte une autre colonne, que dois-je modifier ?
À priori je devrais modifier les macros :
ListBox1_Click
TextBox1_Change
CommandButton1_Click
Nouvel_Enfant
Mais comment ? :)
Merci d'avance pour ton aide !
ps: le fichier avec les modifications des autres macros : https://www.cjoint.com/c/EBjtWWhtiZ5
Bien à vous,
Naï
ps: je surveille tous mes sujets non résolus, si solution vous avez, je la lirais à coup sûr :)
J'ai ajusté les autres macros, puisqu'une colonne a été ajoutée.
Je vois que tu l'utilises pas la même méthode que dans l'ancien fichier.
Dans TextBox1_Change, tu as mis en commentaire :
'For i = LBound(Tb) To UBound(Tb)
' .AddItem Tb(i)
'Next
Ce code ne sert à rien ? ^^
Aussi, puisqu'une nouvelle colonne est prise en compte, j'ai besoin de modifier la macro et la fenêtre qui concerne cette partie. A priori les macro CommandButton1_Click & Nouvel_Enfant. Mais comment faire ?
Encore, si je voulais prendre en compte une autre colonne, que dois-je modifier ?
À priori je devrais modifier les macros :
ListBox1_Click
TextBox1_Change
CommandButton1_Click
Nouvel_Enfant
Mais comment ? :)
Merci d'avance pour ton aide !
ps: le fichier avec les modifications des autres macros : https://www.cjoint.com/c/EBjtWWhtiZ5
Bien à vous,
Naï
ps: je surveille tous mes sujets non résolus, si solution vous avez, je la lirais à coup sûr :)
Bonjour,
Dans TextBox1_Change: Oui, j'ai mis une autre ligne
Pour les modifs ajout de colonne(s), je serai tente de vous dire de regarder le fichier avant les modifs et celui qui a ete modifie. Vu que vous savez ou sont faites les modif
A+
Dans TextBox1_Change: Oui, j'ai mis une autre ligne
Pour les modifs ajout de colonne(s), je serai tente de vous dire de regarder le fichier avant les modifs et celui qui a ete modifie. Vu que vous savez ou sont faites les modif
A+
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Logique :D
Et en ce qui concerne CommandButton1_Click et Nouvel_Enfant ? Pour ajouter un enfant à la base de données, j'ai besoin de demandé à l'utilisateur le régime de l'enfant ajouté.
Sur ce point, je suis totalement perdu.
Bien à toi et merci encore !
Et en ce qui concerne CommandButton1_Click et Nouvel_Enfant ? Pour ajouter un enfant à la base de données, j'ai besoin de demandé à l'utilisateur le régime de l'enfant ajouté.
Sur ce point, je suis totalement perdu.
Bien à toi et merci encore !
CCM est formidable :D
J'ai fini par trouvé. J'ai modifié CommandButton1_Click en ajoutant ListBox3 et en ajustant les lettres de colonnes :
Et j'ai ajouté :
Il me reste un soucis : Lorsque je clique sur Ok, la base de données reste ouverte. Avant mes modifications elle se fermait après le clique, plus maintenant. J'ai oublié quelque chose ?
Bien à vous,
Naï
ps: je surveille tous mes sujets non résolus, si solution vous avez, je la lirais à coup sûr :)
J'ai fini par trouvé. J'ai modifié CommandButton1_Click en ajoutant ListBox3 et en ajustant les lettres de colonnes :
Private Sub CommandButton1_Click() Dim derlig As Long If TextBox1 = "" Or TextBox2 = "" Or TextBox3 = "" Or ListBox3 = "" Then MsgBox "Tous les champs sont obligatoires", vbCritical, "SAISIE OBLIGATOIRE": Exit Sub If Not IsDate(TextBox3) Then MsgBox "Le format de la date n'est pas correct (ex : 03/12/2014)", vbCritical, "MAUVAIS FORMAT": Exit Sub Workbooks.Open ThisWorkbook.Path & "\bdd.xlsx" With Workbooks("bdd.xlsx").Sheets("Feuil1") derlig = .Range("A" & Rows.Count).End(xlUp).Row + 1 .Range("A" & derlig - 1 & ":E" & derlig - 1).Copy .Range("A" & derlig & ":E" & derlig).PasteSpecial Paste:=xlPasteFormats .Range("A" & derlig) = TextBox1 .Range("B" & derlig) = TextBox2 .Range("C" & derlig) = TextBox3 .Range("D" & derlig) = ListBox3 .Range("E" & derlig - 1 & ":F" & derlig - 1).AutoFill Destination:=Range("E" & derlig - 1 & ":F" & derlig), Type:=xlFillDefault .Sort.SortFields.Clear .Sort.SortFields.Add Key:=Range("A2:A" & derlig) _ , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal With .Sort .SetRange Range("A1:E" & derlig) .Header = xlYes .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With Erase Sources Sources = .Range("A2:D" & derlig).Value End With Unload Me End Sub
Et j'ai ajouté :
Private Sub UserForm_Initialize() ListBox3.Clear ListBox3.AddItem "Choix1" ListBox3.AddItem "Choix2" ListBox3.AddItem "Choix3" End Sub
Il me reste un soucis : Lorsque je clique sur Ok, la base de données reste ouverte. Avant mes modifications elle se fermait après le clique, plus maintenant. J'ai oublié quelque chose ?
Bien à vous,
Naï
ps: je surveille tous mes sujets non résolus, si solution vous avez, je la lirais à coup sûr :)
Bonjour,
fichier modifie avec saisie regime UF nouvel Enfant et mise a jour de Sources pour la suite
https://www.cjoint.com/c/EBkn5RXrarV
A+
fichier modifie avec saisie regime UF nouvel Enfant et mise a jour de Sources pour la suite
https://www.cjoint.com/c/EBkn5RXrarV
A+