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 correspondance par TextBox


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2019
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Janvier 2019
    Messages : 101
    Par défaut Recherche correspondance par TextBox
    Bonjour au forum,

    J'ai une base de données dans laquelle chaque ligne se distingue grâce au numéro d'OF, qui est unique.
    J'ai créé un formulaire tout simple avec un TextBox dans lequel je renseigne un numéro d'OF.

    Nom : NOF.PNG
Affichages : 505
Taille : 3,4 Ko

    Je souhaite ainsi, grâce à une boucle qui balaierai toute ma colonne d'OF, retrouver le numéro d'OF que j'ai entré dans mon TextBox.

    J'ai créé cette courte macro pour voir si le système reconnaissait mon numéro d'OF:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub Valider_Click()
    Dligne = Range("E15000").End(xlUp).Row
    For I = 6 To Dligne
    If NOF = Cells(I, 5) Then Cells(1, 1) = "OK"
     
     
    Next I
    End Sub
    Précision: Mes OF se trouvent en colonne 5.

    Cependant, mon numéro d'OF n'est pas reconnu puisque rien n'est inscrit en case A1. J'avoue que je ne comprend pas vraiment où se situe mon erreur, même si la réponse doit-être assez simple.

    Quelqu'un aurait la gentillesse de m'aiguillier un peu ?

    Bonne journée,
    Mickamax

  2. #2
    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
    Je crois que un userform avec un combobox ou vous trouvez tous les OF et si tu fais un choix dans ce combobox tu aura le numéro OF dans un textbox est mieux non ??pour ton cas et si j'ai compris : tu saisie le numéro OF dans un textbox et tu récupère le OF dans la cellule A1 et que les OF se trouve dans la colonne A :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Private Sub Valider_Click()
    dim Dligne as long
    Dligne = Cells(Rows.Count, 5).End(xlUp).Row
    For I = 6 To Dligne
    If Cells(I, 5) =textbox1.value Then Cells(1, 1) = Cells(i, 1)
    Next I
    End Sub

  3. #3
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2019
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Janvier 2019
    Messages : 101
    Par défaut
    Bonjour BENNASR,
    La ComboBox aurait été intéressante effectivement, mais le problème étant que ma liste d'OF n'est pas fixe, elle est amenée à changer régulièrement car le fichier sera alimenté par un utilisateur.
    Or, si je ne dis pas de bêtise, la ComboBox s'alimente via RowsSource qui renvoie des valeurs fixes…

    A moins qu'il y ai un moins de variabiliser les informations de la ComboBox, dont je n'ai pas connaissance, et qui m'intéresse fortement.


    J'ai essayé ta macro, cela ne fonctionne pas non plus…
    Pour être plus précis dans mes besoins: Je souhaite saisir un OF dans ma textBox, le retrouver dans ma base de données, et extraire les informations sur la ligne de cet OF (exemple: Date, N° de commande, etc).

    Je ne suis pas allé aussi loin dans ma macro car je me suis rendu compte (via le code que je vous ai transmis) que ma macro ne trouvait pas de correspondance entre ma textBox et ma liste d'OF.

    j'avais fait une boucle qui disait grosso-modo: si la cellule dans ma boucle = textBox, alors ma cellule A1= "OUI". Or, rien ne s'affiche dans ma cellule A1.



    Mickamax

  4. #4
    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
    le combobox s'alimente au moment de l'initialisation de l'userform
    et si le résultat est une seule ligne donc tu peux faire un combobox et 4 ou 5 textbox et suite au choix les textbox s'alimente avec la ligne correspondante
    si le résultat et plusieures lignes tu peux remplacer les textbox par un listbox

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Salut.

    Tu peux alimenter un combobox via Rowsource ou via List. Je préfère la seconde solution qui est simple à mettre en place. Normalement, cette combobox aura comme source une table de données, ce qui permet d'utiliser la référence structurée de la colonne qui alimente le combobox, rendant ton code plus simple à réaliser.

    Voici le tableau t_OF qui contient la colonne OF avec tes références...

    Nom : 2019-05-28_102710.png
Affichages : 467
Taille : 39,9 Ko

    Pour appeler ton userform et charger ton combo, tu peux utiliser le code suivant (avec un userform nommé usfOF et un combobox nommé cboOf)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub ShowUsfOf()
      With usfOF
        .cboOF.List = Range("t_OF[OF]").Value
        .Show
      End With
      Unload usfOF
    End Sub
    L'intérêt est que tu peux recharger ton combobox "à chaud", par exemple durant l'utilisation du userform si tu ajoutes un nouvel OF à la liste. Il suffit de redéfinir la propriété List du combo avec le code suivant: cboOF.List = Range("t_OF[OF]").Value
    J'explique la technique dans ce message avec un fichier d'exemple
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  6. #6
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2019
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Janvier 2019
    Messages : 101
    Par défaut
    Bonjour Pierre,
    Merci beaucoup pour l'info, je ne savais pas du tout qu'il était possible de fonctionner comme cela !
    Première partie de mon problème réglé, donc !

    Cependant, j'ai toujours le même problème:

    Je sélectionne mon numéro d'OF, celui-ci a bien une correspondance dans la liste, comme le prouve la photo ci-dessous:

    Nom : correspondance OF.PNG
Affichages : 476
Taille : 23,5 Ko

    Or, via la macro que j'ai implémenté sur le bouton valider, je pensais avoir écrit "KARATE KID" sur la douzième colonne de la ligne correspondant à l'OF sélectionné dans mon ComboBox, mais ce n'est toujours pas le cas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub Valider_Click()
     
    Dligne = Range("E15000").End(xlUp).Row
    For I = 6 To Dligne
    If Cells(I, 5) = cboOF.Value Then Cells(I, 12) = "KARATE KID"
     
    Next I
    End Sub
    Des idées ?

  7. #7
    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
    je propose de définir votre feuille surtout si tu appelle ton USF d'une feuille différente
    aussi tester votre variable Dligne avec un message box et vérifier si ça donne la bonne valeur
    aussi quand tu écris entre un WITH n'oubliez pas le point (.)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub Valider_Click()
    with sheets("Feuil1") ' à adpter
    Dligne = .Range("E15000").End(xlUp).Row
    For I = 6 To Dligne
    If .Cells(I, 5) = cboOF.Value Then .Cells(I, 12) = "KARATE KID"
    Next I
    End with
    End Sub

  8. #8
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2019
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Janvier 2019
    Messages : 101
    Par défaut
    Re,
    J'ai trouvé une solution qui me convient avec le code suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Private Sub Valider_Click()
    Cells(1, 1) = cboOF.Value
     
    Dligne = Range("E50000").End(xlUp).Row
    For I = 6 To Dligne
    If Cells(I, 5) = Cells(1, 1) Then Cells(I, 12) = "KARATE KID"
     
    Next I
     
    End Sub
    Je pense que le fait de poser la valeur de ma ComboBox avant de comparer rend la macro fonctionnelle.
    C'est certes moins élégant, mais je m'en contenterai.
    Merci beaucoup à tous les deux, problème résolu !


    Mickamax

  9. #9
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Dans l'exemple, j'ajoute une colonne Titre

    Nom : 2019-05-28_105334.png
Affichages : 440
Taille : 4,6 Ko

    Dans le userform, j'ajoute une zone de texte tboTitle.

    Au clic sur le bouton de validation, on appelle la procédure qui ajoute le titre saisi dans la zone de texte sur la ligne de la colonne Titre correspondant à l'OF choisi.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub btnValidate_Click()
      SaveTitle
    End Sub
     
    Sub SaveTitle()
      If cboOF.ListIndex <> -1 Then
        Range("t_OF[Titre]").Cells(cboOF.ListIndex + 1).Value = tboTitle.Value
      End If
    End Sub
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  10. #10
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Voilà le fichier qui illustre cela.

    Si l'on travaille avec des tables de données, ce qui est pour moi la seule option dans ce cas de figure, il n'est nécessaire ni de préciser la feuille, ni de s'amuser avec des End(xlUp) (pourquoi partir de 15000, d'ailleurs?).

    Les tables de données permettent de travailler de façon beaucoup plus simple et souple que de passer par la feuille et des trucs comme End(xlUp)
    Fichiers attachés Fichiers attachés
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

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

Discussions similaires

  1. [Débutant] Recherche d'une correspondance par corrélation
    Par hanane1986 dans le forum Images
    Réponses: 18
    Dernier message: 12/04/2016, 23h41
  2. recherche date par textbox
    Par herve5785 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 19/03/2014, 12h22
  3. Recherche une chaîne de caracteres par textbox sur BD
    Par BERRACHED SAID dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 10/05/2013, 22h03
  4. Moteur de recherche, affichage par page et url rewriting
    Par paupiette dans le forum Langage
    Réponses: 5
    Dernier message: 22/06/2007, 10h45
  5. Formulaire de recherche multicriteres par cafeine
    Par jo-popo dans le forum Access
    Réponses: 8
    Dernier message: 12/01/2006, 00h53

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