Recherche dans tableau excel

zepeto

XLDnaute Occasionnel
Bonjour à tous,
j'ai un tableau sous excel avec 1°colonne = nom, 2°colonne = prénom, 3°colonne = caractéristiques.
J'ai une macro qui me permet de rechercher une personne et rempli les champs d'un userform grâce à la saisi du nom, mais il arrive que j'ai deux fois le même nom et je ne veux faire ma recherche que sur le nom.
Alors si quelqu'un connait une méthode pour faire une boucle sur ma 1°colonne et qui me demande si il sagit bien de la bonne personne sinon on passe à l'autre sa serait avec plaisir.
Merci par avance et je suis disponible pour plus d'informations.
 

zepeto

XLDnaute Occasionnel
Re : Recherche dans tableau excel

Bonsoir hasco je pense que je me suis mal expliqué car se que tu me dit c'est pour que les champs cp et ville ne se remplisse pas, moi je voulais dire que je ne voulais pas les voir dans la combobox?
Merci pour ton aide
 
G

Guest

Guest
Re : Recherche dans tableau excel

Zepeto,

Remplace la procédure UserForm_Initialize par celle-ci

Code:
Private Sub UserForm_Initialize()
    Dim c As Range
    
    'Avec la combo qui contiendra les champs de recherche
    With cbChampRecherche
        'On créer Deux colonnes
        .ColumnCount = 2
        
        'On Cache la deuxième en lui donnant la valeur 0 comme largeur
        'Les largeurs de colonnes sont passée en chaine de caractères
        'séparées par des point-virgules.Valeurs exprimées en point (pt)
        .ColumnWidths = ";0pt"
        
        'On paramètre la colonne 1 comme colonne de référence
        'celle qui affiche le nom
        .BoundColumn = 1
        
        'Tant qu'une cellule vide n'est pas trouvée dans la ligne 1
        Set c = Sheets("proc").Cells(1, 1)
        Do
            'Si la colonne (en majuscule) n'est pas ni "CP" ni "VILLE"
            If UCase(c) <> "CP" And UCase(c) <> "VILLE" Then
            'On ajoute l'étiquette de colonne de la feuille
            'Dans la première colonne de la combo
            .AddItem c.Value
            'Dans la deuxième on garde l'index ce la colonne de la feuille
            'La numérotation des colonnes des combo commence à 0 =>1=la deuxième
            .List(.ListCount - 1, 1) = c.Column
            End If
            Set c = c.Offset(, 1)
            
        Loop While Not IsEmpty(c)
        
        'On paramètre par défaut le champ de recherche sur le premier
        If .ListCount > -1 Then .ListIndex = 0
        
    End With
    
End Sub

bonne soirée
 

zepeto

XLDnaute Occasionnel
Re : Recherche dans tableau excel

Bonjour hasco ta solution marche avec un petit nombre mais sachant que j'ai 49 colonne donc autant dans ma combobox.
Le probléme est que ma condition est tellement grande qu'elle s'étant sur 2 lignes et sa sa marche pas?
J'ai renommé mais colonne avec des noms plus court pour que sa passe mais c'est pas trés optimisé, en tout cas merci
 

zepeto

XLDnaute Occasionnel
Re : Recherche dans tableau excel

Ne t'embéte pas pour sa sa ira avec des noms raccourcis lol.
J'ai mis se que je voulais plutôt que se que je voulais pas et sa donne sa :
If UCase(c) = "DENOMINATION" Or UCase(c) = "ADRESSE" Or UCase(c) = "CCP" Then
Par contre dans ma combobox j'aimerais pouvoir choisir de faire ma recherche sur le "mandataire" et pour sa il faudrait que je rajoute dans la combobox un élément par exemple "mandataire" qui regroupe les colonnes peinte en jaunes dans mon classeur (ce sont les noms des mandataires) ?
Merci
 

Pièces jointes

  • zepeto2.zip
    30.9 KB · Affichages: 92
  • zepeto2.zip
    30.9 KB · Affichages: 87
  • zepeto2.zip
    30.9 KB · Affichages: 90
Dernière édition:

zepeto

XLDnaute Occasionnel
Re : Recherche dans tableau excel

Désolé hasco mais c'est le dernier éléments de recherche dont j'ai besoin.
De plus j'aprécis ton travail bien commenté, alors ne me lache pas si prés du but stp et merci pour ton aide qui m'aura permis d'avancer tout en comprenant
En attendant j'ai tenter ceci mais cela ne marche pas je pensé que c'était un truc comme sa :

MANDATAIRE = (UCase(c) = "N1") + (UCase(c) = "N2") + (UCase(c) = "N3") + (UCase(c) = "N4") + (UCase(c) = "N5")
If UCase(c) = "DENOMINATION" Or UCase(c) = "ADRESSE" Or UCase(c) = "CCP" Or MANDATAIRE Then

Mais sa affiche pas mon MANDATAIRE mais les N1, N2, ...,N5.
 
Dernière édition:
G

Guest

Guest
Re : Recherche dans tableau excel

Re Zepeto,

Voici une dernière mouture du remplissage de la combobox basé cette fois sur le numéro des colonnes. A toi de vérifier et de changer éventuellement les numéros

Code:
Private Sub UserForm_Initialize()
    Dim c As Range
    Dim bAjout As Boolean
    'Avec la combo qui contiendra les champs de recherche
    With cbChampRecherche
        'On créer Deux colonnes
        .ColumnCount = 2
 
        'On Cache la deuxième en lui donnant la valeur 0 comme largeur
        'Les largeurs de colonnes sont passée en chaine de caractères
        'séparées par des point-virgules.Valeurs exprimées en point (pt)
        .ColumnWidths = ";0pt"
 
        'On paramètre la colonne 1 comme colonne de référence
        'celle qui affiche le nom
        .BoundColumn = 1
 
        'Tant qu'une cellule vide n'est pas trouvée dans la ligne 1
        Set c = Sheets("proc").Cells(1, 1)
        Do
           'La variable bAjout permet de savoir si après évaluationdu 
           'numéro de colonne il faut le rajouter ou non à la combo
            bAjout = False
            Select Case c.Column
                ' ici les numéro unique de colonne à ajouter à la liste
                Case 1, 2, 12, 16, 20, 24, 28: bAjout = True
                'ici toutes les colonnes dont les numéro sont > à 36
                Case Is > 36: bAjout = True
            End Select
            If bAjout Then
                'On ajoute l'étiquette de colonne de la feuille
                'Dans la première colonne de la combo
                .AddItem c.Value
                'Dans la deuxième on garde l'index ce la colonne de la feuille
                'La numérotation des colonnes des combo commence à 0 =>1=la deuxième
                .List(.ListCount - 1, 1) = c.Column
            End If
            Set c = c.Offset(, 1)
 
        Loop While Not IsEmpty(c)
 
        'On paramètre par défaut le champ de recherche sur le premier
        If .ListCount > -1 Then .ListIndex = 0
 
    End With
 
End Sub

A+
 

zepeto

XLDnaute Occasionnel
Re : Recherche dans tableau excel

J'ai encore du mal m'expliquer :
Se que je voulais dire c'est avoir un élément dans la combobox qui contienne tous les noms des mandatiares (soit les colonnes que j'ai peint en jaunes dans le classeur précédent)?
Merci
 

zepeto

XLDnaute Occasionnel
Re : Recherche dans tableau excel

Bonsoir hasco, je viens de creer un bouton supprimer permettant comme son nom l'indique de supprimer une ligne du tableau et plus précisément celle que l'on à rechercher.
Toutefois, la suppression ne marche pas alors que j'ai fait des recherche, de plus, j'ai fait des test en affichant les valeurs que je garde en memoire mais sa ni fait rien.
Merci pour ton aide inestimable.
Voici mon code :

Private Sub supprimer_Click()
'il faut pouvoir supprimer la ligne du tableau excel, soit supprimer les informations que l'on à rechercher et qui sont afficher dans les textbox
If cbChampRecherche = "" Then Exit Sub
Msg = "Voulez vous détruire la procuration?"
Style = vbYesNo + vbExclamation + vbDefaultButton2
Title = "Confirmation Effacement "
Réponse = MsgBox(Msg, Style, Title)
If Réponse = 7 Then Exit Sub
'on détermine la colonne avec i
ligne = 1
Selection = tbdenomination
If cbChampRecherche = "denomination" Then
i = 1
Else
If cbChampRecherche = "adresse" Then
i = 2
End If
End If
'MsgBox i
'on détermine l'élément de comparaison
If i = 1 Then
elementSelection = tbdenomination
Else
If i = 2 Then
elementSelection = tbAdresse
End If
End If
'MsgBox elementSelection
'dés que l'élément chercher est trouvé on sort de la boucle
While Sheets("proc").Cells(ligne, i) <> elementSelection
ligne = ligne + 1
Wend
'on récupére la valeur de ligne qui nous indique la ligne à supprimer
'MsgBox ligne
Sheets("proc").Rows(ligne).Delete Shift:=xlUp
MsgBox (" Suppression réalisé avec succès")
Call Initialise_Recherche

End Sub
 
G

Guest

Guest
Re : Recherche dans tableau excel

Zepeto,

Je vois que tu n'as pas compris comment fonctionnait le programme.

Mais voici ta macro Supprimer modifiée:

Code:
Private Sub supprimer_Click()
'il faut pouvoir supprimer la ligne du tableau excel, soit supprimer les informations que l'on à rechercher et qui sont afficher dans les textbox
 If Recherche.cbChampRecherche = "" Then Exit Sub
 Msg = "Voulez vous effacer l'entreprise?"
    Style = vbYesNo + vbExclamation + vbDefaultButton2
    Title = "Confirmation Effacement "
    Réponse = MsgBox(Msg, Style, Title)
    If Réponse = vbNo Then Exit Sub
    
    If Not [SIZE=5][COLOR=red]c[/COLOR][/SIZE] Is Nothing Then [SIZE=5][COLOR=red]c[/COLOR][/SIZE].EntireRow.Delete xlShiftUp
    MsgBox (" Suppression réalisé avec succès")
    Call Initialise_Recherche
    
End Sub

Rajoute la ligne suivant dans la procédure Initialise_Recherche:
Code:
Set c=Nothing
Ligne qui efface la référence à toute cellule.

La variable C (Déclarée en tête de module) est un objet Range (Cellule) qui représente la cellule trouvée tu peux donc y faire référence ainsi qu'à sa ligne et ou sa colonne pour supprimer ou modifier les informations.

A+
 

Lii

XLDnaute Impliqué
Re : Recherche dans tableau excel

Bonjour,

Pour m'être amusé un peu, à tester.
Pour le premier fichier, introduction de la variable Ici.
Pour le second, une autre présentation.
Je n'ai pas étudié les cas d'erreurs (saisie vide par exemple).
 

Pièces jointes

  • zepeto3.zip
    25.9 KB · Affichages: 91
  • zepeto4.zip
    27.8 KB · Affichages: 99

Discussions similaires