XL 2019 Ajoutez des TextBox dans un formulaire intuitif

hemardjean

XLDnaute Occasionnel
Bonjour le forum
Je me tourne à nouveau vers vous pour comprendre où j'ai pu me tromper dans le code.
Je cherche à ajouter des TextBox dans le dossier que j'ai récupéré sur le site boisgontierj.free.fr .
Voici les Codes que que j'ai utilisé , je les ai laissées en vert. Pourriez-vous me dire où sont mes erreurs pour que je puisse en ajouter d'autres .
Merci d'avance de votre aide.
Bien cordialement

VB:
Dim choix1()
Private Sub UserForm_Initialize()
  choix1 = [liste].Value
  Me.ComboBox1.List = choix1
End Sub
Private Sub ComboBox1_Change()
     Dim b()
     Me.TextBox1 = ""
    
     'Me.TextBox2 = ""
    
     tmp = "*" & UCase(Me.ComboBox1) & "*"
     n = 0
     For i = LBound(choix1) To UBound(choix1)
       If UCase(choix1(i, 1)) Like tmp Or UCase(choix1(i, 2)) Like tmp Then
      
       'If UCase(choix1(i, 1)) Like tmp Or UCase(choix1(i, 2))Like tmp Or UCase(choix1(i, 3)) Like tmp Then
      
         n = n + 1: ReDim Preserve b(1 To 3, 1 To n)
        
         ' n = n + 1: ReDim Preserve b(1 To 4, 1 To n)
        
        
         b(1, n) = choix1(i, 1): b(2, n) = choix1(i, 2): b(3, n) = choix1(i, 3)
        
         ' b(1, n) = choix1(i, 1): b(2, n) = choix1(i, 2): b(3, n) = choix1(i, 3): b(4, n) = choix1(i,4 )
        
       End If
      Next i
      If n > 0 Then
        Me.ComboBox1.Column = b
        Me.ComboBox1.DropDown
      Else
        Me.ComboBox1.Clear
      End If
End Sub
Private Sub ComboBox1_click()
      On Error Resume Next
      Me.TextBox1 = Me.ComboBox1.Column(1)
      Me.TextBox2 = Me.ComboBox1.Column(2)
      
      Me.TextBox3 = Me.ComboBox1.Column(3)
      
      
End Sub
Private Sub CommandButton1_Click()
 If Me.TextBox1 <> "" Then
    ActiveCell = UCase(Me.ComboBox1)
    ActiveCell.Offset(0, 1) = Me.TextBox1
    ActiveCell.Offset(0, 2) = Me.TextBox2
    
    ActiveCell.Offset(0, 3) = Me.TextBox3
    
    Unload Me
 End If
End Sub
 

TooFatBoy

XLDnaute Barbatruc
J'ai enfin regardé ton nouveau fichier. ;)


je cherche avec la Combobox à récupérer la liste de la colonne B
Déjà là je ne suis pas sûr de comprendre : tu parles simplement de remplir la ComboBox avec tout le contenu de la colonne B (et uniquement de la colonne B, qui correspond au père) de la feuille "Listes" ?
Ta macro du fichier précédent remplissait la ComboBox avec 7 colonnes (de A à G)...


puis avec les Texbox les éléments des colonnes C ,L,M, et de P à AI.
OK, ça fait 23 colonnes.
Mais là déjà il y a un petit problème : ton tableau à plusieurs lignes, donc comment savoir quelle est LA ligne qu'il faut utiliser pour remplir les 23 TextBox ???

Est-ce fonction de la sélectionne fait dans la ComboBox ?
Si oui, que faire quand il y a plusieurs lignes qui correspondent à l'item sélectionné dans la ComboBox ?

Comme tu peux voir dans le dossier certaines lignes ne sont pas complètes.
Exemple : en ligne 5, tartenpion jean pierre son père est tartenpion gerard.
Non, en ligne 5, tartenpion jean pierre n'a pas de parents renseignés.

je voudrais récupérer : la mère, les dates de naissance des deux, et s'il y a des grands-pères les récupérer pour les afficherécrire sur la ligne 5.
Si tu as plusieurs personnes qui portent le même nom, comment gères-tu ça ? surtout avec tes 23 TextBox. :(


Au final je pige un peu mieux le but du truc, mais je ne comprends pas pourquoi tu remplis la ComboBox avec la colonne B (colonne Père) et nom avec la colonne A (colonne NomPrénom), et je ne comprends toujours pas ce que tu veux faire avec tes 23 (et non 22) TextBox (mais peu importe pour l'instant).


Tu as déjà pensé à éventuellement utiliser un tableau structuré ?
 
Dernière édition:

hemardjean

XLDnaute Occasionnel
Toutes mes excuses pour l'erreur de colonnes du remplissage de la Combobox.

L'ouverture du formulaire ne se fait pas avec un bouton mais directement dans la feuille dans la cellule en colonne B ( avec Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) où je voudrais insérer le résultat de la Combobox et des texbox



Non, en ligne 5, tartenpion jean pierre n'a pas de parents renseignés mais ses parents sont tartenpion gerard les même que son frère tartenpion michel

il s'agit avec la Combobox de récupérer la ligne avec les éléments des colonnes de tartenpion gerard et de les coller sur la ligne tartenpion jean pierre de façon à éviter de ressaisir tous les éléments qui existent déjà.
 

TooFatBoy

XLDnaute Barbatruc
Toutes mes excuses pour l'erreur de colonnes du remplissage de la Combobox.
OK, et donc il faut remplir la ComboBox avec quelle(s) colonne(s) au final ???

L'ouverture du formulaire ne se fait pas avec un bouton mais directement dans la feuille dans la cellule en colonne B ( avec Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) où je voudrais insérer le résultat de la Combobox et des texbox
Soit...

il s'agit avec la Combobox de récupérer la ligne avec les éléments des colonnes de tartenpion gerard et de les coller sur la ligne tartenpion jean pierre de façon à éviter de ressaisir tous les éléments qui existent déjà.
Soit...



Tu m'épuises : ça fait 5 jours que je te pose des questions pour essayer de comprendre le but du truc et la façon de procéder, et que tu réponds uniquement à certaines questions et encore... c'est par des phrases énigmatiques qui n'ont pas grand sens. ☹️

Je vais donc te poser ce qui risque d'être une ultime question.
Est-ce que, en fait, le fonctionnement prévu est le suivant :
- double-clic dans la première colonne de la BDD pour déterminer quelle ligne il va falloir remplir,
- alimentation de la ComboBox avec la totalité de la colonne "Père" de la BDD (ou peut-être avec plus de colonnes),
- sélection par l'utilisateur d'une ligne dans la liste de la ComboBox,
- remplissage des TextBox avec les données de la BDD correspondant à l'item sélectionné dans la ComboBox,
- clic sur le bouton "ok" du Userform pour remplir la BDD avec le contenu des TextBox ?
 

hemardjean

XLDnaute Occasionnel
- double-clic dans la première colonne de la BDD pour déterminer quelle ligne il va falloir remplir,
- alimentation de la ComboBox avec la totalité de la colonne "Père" de la BDD (ou peut-être avec plus de colonnes),
- sélection par l'utilisateur d'une ligne dans la liste de la ComboBox,
- remplissage des TextBox avec les données de la BDD correspondant à l'item sélectionné dans la ComboBox,
- clic sur le bouton "ok" du Userform pour remplir la BDD avec le contenu des TextBox ?
Oui c'est tout à fait cela.
Toute mes excuses pour mes incohérences et mon bafouillage dans mes explications mais ce n'est pas facile lorsque on ne maitrise pas votre vocabulaire.
Merci de ta patience.
 

TooFatBoy

XLDnaute Barbatruc
Est-ce que c'est quelque chose dans ce genre que tu voudrais ?

Actuellement la ComboBox est remplie avec la colonne A, mais si j'ai bien compris elle devrait être remplie avec la colonne B.


Donc, le double clic dans une cellule de la colonne A détermine une personne dont il faut mettre à jour les données ?
Et la sélection d'un item dans la ComboBox doit déterminer son père ?
 

Pièces jointes

  • genealogie-1_(TooFatBoy-v1).xlsm
    28.8 KB · Affichages: 4
Dernière édition:

hemardjean

XLDnaute Occasionnel
Merci TooFatBoy c'est tout à fait ce que je recherchais.

Je comprends les codes que tu as mis je vais pouvoir rajouter dans le
« If Me.ComboBox1.ListIndex <> -1 Then »
les grands-parents ainsi que leur date de naissance pour qu'ils s'intègrent à la BDD
Actuellement la ComboBox est remplie avec la colonne A, mais si j'ai bien compris elle devrait être remplie avec la colonne B.
J'ai changé la colonne pour la ComboBox
je vais faire plusieurs essais avec les vrais noms.

Juste une petite question pour que je comprenne à quoi sert le code que tu as placé dans

VB:
 Private Sub ComboBox1_Change()

aaa = Range("t_BDD[AGP1]")(IndexChoix)
bbb = Range("t_BDD[DN AGP1]")(IndexChoix)

C'est un dossier qui je pense pourra me servir autrement .

Un grand merci pour ton implication et ta patience
 

Discussions similaires

Réponses
5
Affichages
365
Réponses
17
Affichages
249
Réponses
2
Affichages
109