IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Recherche sur la colonne A et affichage des colonnes B et C correspondantes dans des TextBox [Toutes versions]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Femme Profil pro
    Consultant E-Learning
    Inscrit en
    Avril 2013
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant E-Learning
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2013
    Messages : 62
    Par défaut Recherche sur la colonne A et affichage des colonnes B et C correspondantes dans des TextBox
    Bonjour

    J'essai de me remettre dans le VBA, mais mes connaissances sont faibles et lointaines.
    Quelqu'un peut-il m'aider à débuter avec mon code.
    J'aimerais partir d'un tableau de 3 colonnes avec des noms de médicaments différents (vous savez, les génériques...), et dans un futur, si j'arrive déjà à ça, je donnerai plus d'information et de colonne à mon document.
    Du coup, pour le moment, histoire de me remettre dans le bain, j'ai fait un formulaire correspondant à un tableau basique de 3 colonnes (nom, prénom, pays) et j'aimerais faire une recherche par nom (de la colonne A), et que ça m'affiche dans les textbox 2 et 3, les prénoms et pays correspondants aux colonnes B et C.
    Du coup, pour démarrer simple, j'ai fait un mini tableau, mais j'ai beau tester tous les codes trouvés sur internet, je n'arrive à rien.
    Si quelqu'un peut me donner un coup de main avec les codes de transition entre des informations textes de mon tableau à mon formulaire, je pense pouvoir m'en sortir pour la suite.
    Petite info supplémentaire, mon futur document sera en constante évolution donc, il y aura des rajouts de médicaments, il faut donc que mon tableau soit extensible.
    Merci beaucoup pour votre aide.
    Nathalie

    Pièce jointe 614686

  2. #2
    Membre éclairé
    Homme Profil pro
    retraité
    Inscrit en
    Mars 2019
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : retraité
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mars 2019
    Messages : 53
    Par défaut
    Bonjour à toutes et tous
    Bonjour Nathalie

    Je te propose ceci, mais il faut remplacer le "TextBox2" par un "ComboBox". Si dessous un code qu'il faudra adapter :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    Private Sub ComboBox1_Change()
    Dim derlign As Integer
    Dim mavar As String
    Dim ligne_nom As Integer
     
    derlign = Range("A1").End(xlDown).Row
    With Worksheets("base").Range("A2:A" & derlign)
    mavar = ComboBox1.Value
        Set c = .Find(mavar, LookIn:=xlValues, LookAt:=xlWhole)
        If Not c Is Nothing Then
            ligne_nom = c.Row
            TextBox3.Value = Range("B" & c.Row)
            TextBox4.Value = Range("C" & c.Row)
        End If
    End With
    End Sub
    On peut simplifier et si j'ai bien compris la demande !
    A+
    Eric

  3. #3
    Expert confirmé Avatar de BENNASR
    Homme Profil pro
    Responsable comptable & financier
    Inscrit en
    Décembre 2013
    Messages
    2 974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Responsable comptable & financier
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 2 974
    Par défaut
    bonjour nattalia, eric4577

    comme a indiqué eric (bonjour au passage) il faut remplacer le textbox par combobox
    ce qui donne
    (débutante et risque de ne pas savoir comment charger l'userform c'est pourquoi je réponds avec pièce jointe)
    Fichiers attachés Fichiers attachés

  4. #4
    Membre confirmé
    Femme Profil pro
    Consultant E-Learning
    Inscrit en
    Avril 2013
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant E-Learning
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2013
    Messages : 62
    Par défaut essai de mise en pratique
    Bonjour et merci à Eric et Bennars
    J'ai essayé de mettre en pratique ce que vous m'avez envoyé, et qui fonctionne très bien, merci.
    Maintenant, avec cette base, j'ai essayé de rajouter une colonne à mon tableau pour pouvoir appliquer tout ceci dans mon projet initiale (formulaire de conversation des noms de médicaments), mais mon raisonnement ne fonctionne pas.

    Si vous regarder mon essai sur la pièce jointe, j'ai rajouté une colonne au tableau (région). Du coup, je suis sur la colonne D. J'ai rajouté un textbox5 dans mon formulaire et j'ai rajouté la présence de ce textbox5 dans le code et j'ai changé le C en D.

    Mais cela ne fonctionne pas. Suis-je loin de la solution?

    Si je ne suis pas complètement à côté de la solution, j'irai plus loin dans ma demande, car mon projets de recherche par nom de médicaments est plus complexe, mais je ne suis pas sûr d'y arrivé. Mon expérience précédente dans le VBA était plus sur les formulaires de saisie que sur les formulaires de recherche, et là, j'ai peur de ne pas comprendre grand chose à ce que vous m'avez envoyé.

    En tout cas, merci pour vos réponses

    Nathalie

    Pièce jointe 614784

  5. #5
    Membre confirmé
    Femme Profil pro
    Consultant E-Learning
    Inscrit en
    Avril 2013
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant E-Learning
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2013
    Messages : 62
    Par défaut suite de l'essai
    Re...
    J'ai essayé de faire la simulation de colonne supplémentaire avec le code d'Eric, ce qui fonctionne..

    Du coup, maintenant, si je veux aller plus loin et pouvoir faire une recherche soit par le nom, comme actuellement, soit par le prénom, soit par le pays, et d'avoir les informations de tous les autres champs (nom, prénom, pays, et régions) , je dois changer les TextBox 3 et 4 en Combobox et copier le code de la Combobox1 dans les combobox2 et 3 et laisser le TextBox 5 pour la région?

    Peut-être y a t'il un moyen plus simple, style, avoir une case de recherche qui cherche le nom sur les 3 colonnes (ici: nom, prénom, pays), et avoir 3 zone de textes (nom, prénom et pays qui se remplissent avec les informations trouvées dans les 3 colonnes???)

    Merciiii

    Nat

    essai_pour_aide3.xlsm

  6. #6
    Expert confirmé Avatar de BENNASR
    Homme Profil pro
    Responsable comptable & financier
    Inscrit en
    Décembre 2013
    Messages
    2 974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Responsable comptable & financier
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 2 974
    Par défaut
    re
    si tu cherches à saisir et/ou recherche et modifier je propose ce qui suit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    Private Sub ComboBox1_Change()
    Dim plage As Range
    Dim Cell As Range
    Dim Dernligne As Long
    Dim coderech As String
    coderech = ComboBox1.Value
    With Sheets("BASE")
    Dernligne = .Range("A" & Rows.Count).End(xlUp).Row
    Set plage = .Range("A2:A" & Dernligne)
    For Each Cell In plage
     If Cell.Value = coderech Then
     TextBox1.Value = .Cells(Cell.Row, 2).Value
     TextBox2.Value = .Cells(Cell.Row, 3).Value
     TextBox4.Value = .Cells(Cell.Row, 4).Value
     End If
    Next Cell
    End With
    End Sub
     
    Private Sub CommandButton1_Click()
    Unload Me
    End Sub
     
    Private Sub CommandButton2_Click()
    Dim plage As Range
    Dim Cell As Range
    Dim Dernligne As Long
    Dim L As Long
    Dim coderech As String
    Dernligne = Sheets("BASE").Range("A" & Rows.Count).End(xlUp).Row
    If OptionButton1 = True Then
    coderech = ComboBox1.Value
    With Sheets("BASE")
    Set plage = .Range("A2:A" & Dernligne)
    For Each Cell In plage
     If Cell.Value = coderech Then
      .Cells(Cell.Row, 2).Value = TextBox1.Value
     .Cells(Cell.Row, 3).Value = TextBox2.Value
      .Cells(Cell.Row, 4).Value = TextBox4.Value
     End If
    Next Cell
    End With
    TextBox1.Value = ""
    TextBox2.Value = ""
    TextBox4.Value = ""
    ComboBox1.Value = ""
    MsgBox "modification effectuée"
    Else
    With Sheets("BASE")
    L = Dernligne + 1
    .Cells(L, 1) = TextBox3.Value
    .Cells(L, 2) = TextBox1.Value
    .Cells(L, 3) = TextBox2.Value
    .Cells(L, 4) = TextBox4.Value
    TextBox1.Value = ""
    TextBox2.Value = ""
    TextBox3.Value = ""
    TextBox4.Value = ""
    MsgBox "Nouveau Article enregistré"
    End With
    End If
    End Sub
     
     
     
    Private Sub OptionButton1_Click()
    If OptionButton1 = True Then
    TextBox3.Visible = False
    ComboBox1.Visible = True
    End If
    End Sub
     
    Private Sub OptionButton2_Click()
    TextBox3.Visible = OptionButton2
    ComboBox1.Visible = Not TextBox3.Visible
     
    End Sub
     
     
    Private Sub UserForm_Initialize()
    Dim i As Integer
    For i = 2 To Sheets("BASE").Range("A65536").End(xlUp).Row
      ComboBox1 = Sheets("BASE").Range("A" & i)
      If ComboBox1.ListIndex = -1 Then ComboBox1.AddItem Sheets("BASE").Range("A" & i)
    Next i
    ComboBox1.Value = ""
    TextBox1.Value = ""
    TextBox2.Value = ""
    TextBox4.Value = ""
    TextBox3.Value = ""
    ComboBox1.Visible = False
    OptionButton2 = True
    End Sub
    Fichiers attachés Fichiers attachés

  7. #7
    Membre émérite Avatar de Valtrase
    Homme Profil pro
    Jeune retraité...
    Inscrit en
    Janvier 2016
    Messages
    522
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Jeune retraité...
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Janvier 2016
    Messages : 522
    Par défaut
    Salut
    Si tu utilises un tableau structuré tu peux faire une recherche avec la fonction de Pierre Fauconnier
    Voici les modifications à faire
    Dans le module2 cela ne change pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub Bouton1_Cliquer()
    UserForm1.Show
    End Sub
    Dans le module 1 ou 2 d'ailleurs tu colles ce code cette la fonction de recherche tu à le lien pour les explications
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    ' // GetListRow By Pierre Fauconnier le : 16/01/2022
    ' // Retourne une ligne d'un tableau depuis la recherche d'une valeur dans une colonne
    ' // https://www.developpez.net/forums/blogs/27262-pierre-fauconnier/b5879/excel-vba-modifier-donnees-tableau-formulaire/
    Function GetListRow(Table As ListObject, ColumnName As String, Value As Variant) As ListRow
        Dim Formula As String
        Dim Index As Long
     
        If TypeName(Value) = "String" Then Value = """" & Value & """" Else Value = Value * 1
        Formula = "iferror(match({value},{table}[{column}],0),0)"
        Formula = Replace(Formula, "{value}", Value)
        Formula = Replace(Formula, "{table}", Table.Name)
        Formula = Replace(Formula, "{column}", ColumnName)
        Index = Evaluate(Formula)
        If Index > 0 Then Set GetListRow = Table.ListRows(Index)
    End Function
    Dans le module du UserForm tu colle ces codes :
    Pour btnSortie_Click cela ne change pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub btnsortie_Click()
        Unload Me
    End Sub
    A l'initialisation de la form tu peux charger le .list de la comboBox avec les valeurs de ton tableau
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub UserForm_Initialize()
        Me.ComboBox1.List = Range("source[[nom]:[Région]]").Value
    End Sub
    Tu récupère ensuite grace à la fonction une ListRow qui correspond à la recherche et tu assignes les valeur aux textbox
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Private Sub ComboBox1_Change()
        Dim lstR As ListRow
        Set lstR = Module1.GetListRow(Range("source").ListObject, "nom", Me.ComboBox1.Value)
        If Not lstR Is Nothing Then
            With Me
                .TextBox3 = lstR.Range(2)
                .TextBox4 = lstR.Range(3)
                .TextBox5 = lstR.Range(4)
            End With
        Else
    msgbox "La fiche n'a pas été trouvée"
        End If
    End Sub
    Il est recommandé de rajouter une colonne (ID) et de faire une recherche dessus car tu peux avoir plusieurs noms identiques...

  8. #8
    Membre émérite Avatar de Valtrase
    Homme Profil pro
    Jeune retraité...
    Inscrit en
    Janvier 2016
    Messages
    522
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Jeune retraité...
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Janvier 2016
    Messages : 522
    Par défaut
    Petit rajout
    Tu peux te rendre compte que je charge le tableau complet à l'initialisation de la UserForm. Mais tu n'est pas obligé, il est possible par exemple de ne charger que les trois premières colonnes du tableau
    Id Nom Prénom Etc.
    1 Dupond Jean ...
    Ensuite dans la Propriété ColumnWidths tu assignes la première colonne à zéro "0;" celle de l'ID
    Quand tu fera une recherche (ici sur l'ID en l'occurrence)la totalité de la ligne sera renvoyé, et tu pourras sélectionner les colonnes qui t'intéressent.

    Et pour finir si tu veux que les modifications se fassent dans les deux sens tu peux t'inspirer des tutos ci-dessous:

    VBA Excel: Modifier les données d'un tableau par formulaire
    VBA Excel: Modélisation des échanges entre un userform et une table de données (tableau structuré)
    Fonction pour la manipulation des tableaux structurés

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [WD9] Recherche sur deux colonnes
    Par KOUADIO SEVERIN dans le forum WinDev
    Réponses: 3
    Dernier message: 09/09/2009, 15h54
  2. recherche sur une colonne dynamique
    Par gasper06 dans le forum Excel
    Réponses: 5
    Dernier message: 07/07/2009, 15h47
  3. faire une recherche sur la colonne d'une liste annuaire
    Par gracouille dans le forum SharePoint
    Réponses: 1
    Dernier message: 13/10/2008, 18h06
  4. [VBA/Excel]recherche sur 2 colonnes
    Par rodrigue62 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 27/03/2007, 18h35
  5. [VBA-E] Recherche sur plusieurs colonnes ?
    Par Kokito dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 14/11/2006, 14h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo