ListBox et TextBox, prendre en compte une colonne de plus

Résolu/Fermé
Nai Messages postés 707 Date d'inscription vendredi 29 avril 2005 Statut Membre Dernière intervention 11 octobre 2024 - Modifié par Nai le 9/02/2015 à 00:15
Nai Messages postés 707 Date d'inscription vendredi 29 avril 2005 Statut Membre Dernière intervention 11 octobre 2024 - 10 févr. 2015 à 17:48
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 :
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:

8 réponses

f894009 Messages postés 17206 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 22 novembre 2024 1 710
Modifié par f894009 le 9/02/2015 à 09:26
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+
0
f894009 Messages postés 17206 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 22 novembre 2024 1 710
9 févr. 2015 à 11:18
Re,

Avais oublie code UF nouvel enfant: https://www.cjoint.com/c/EBjlCLlGeDV
0
Nai Messages postés 707 Date d'inscription vendredi 29 avril 2005 Statut Membre Dernière intervention 11 octobre 2024 55
Modifié par Nai le 9/02/2015 à 19:39
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 :
    '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 :)
0
f894009 Messages postés 17206 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 22 novembre 2024 1 710
10 févr. 2015 à 07:25
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+
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Nai Messages postés 707 Date d'inscription vendredi 29 avril 2005 Statut Membre Dernière intervention 11 octobre 2024 55
10 févr. 2015 à 09:43
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 !
0
Nai Messages postés 707 Date d'inscription vendredi 29 avril 2005 Statut Membre Dernière intervention 11 octobre 2024 55
Modifié par Nai le 10/02/2015 à 11:57
CCM est formidable :D
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 :)
0
f894009 Messages postés 17206 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 22 novembre 2024 1 710
Modifié par f894009 le 10/02/2015 à 13:48
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+
0
Nai Messages postés 707 Date d'inscription vendredi 29 avril 2005 Statut Membre Dernière intervention 11 octobre 2024 55
10 févr. 2015 à 17:48
Merci ! ^^
0