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 :

formule sur userform [XL-2013]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2016
    Messages : 13
    Par défaut formule sur userform
    Bonjour à tous,

    Je suis assez novice en VBA et encore plus quand il s'agit de userform mais c'est bien pratique et facile à utiliser.

    Voilà je souhaite faire un userform dans lequel il y est un textbox_change qu'on puisse remplir pour rechercher dans un table une donnée associée à celle préremplie. Suite au remplissage de ce textbox je souhaiterais qu'il s'affiche le résultat de la recherche dans le label d'en dessous...

    Mon userform s'appelle recherche
    en voici le code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Resultat_recherche = Application.VLookup("TextBox1.Value", Feuil3.Range("C:J"), 8, False)
    Rechercher.Label5.Caption = Resultat_recherche
    sauf qu'il m'indique un message d'erreur incompatibilité de type... en surlignant la deuxième ligne.
    Je ne connais pas ces fonctions du coup je dois vouloir égaliser deux données dont les dimensions sont totalement différentes à coup sure...

    Merci d'avance de votre aide
    Bonne soirée

  2. #2
    Expert confirmé Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Par défaut
    Bonsoir,

    Mon userform s'appelle recherche
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ...
    Rechercher.Label5.Caption = Resultat_recherche
    ...
    ou est l'erreur, à ton avis ?
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur :resolu: si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  3. #3
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    si c'était le nom du userform qui posait problème, l'erreur aurait été différente ? (Objet Requis ?)

    je vois deux problèmes :

    1) ce qui est certain : si tu veux chercher la valeur de TextBox1, là tu cherche le mot "Textbox1.Value". Il faut enlever les guillemets, et au passage plutôt utiliser la propriété .Text que .Value

    2) ce qui est supposé : puisque ta recherche ne doit rien retrouver, il suffit que ta variable Resultat_recherche ne soit pas typé pour qu'elle contienne un objet Error ... ce qui aboutit à l'incompatibilité de type puisqu'un caption ne peut recevoir qu'un String


    Outre la correction du point numéro 1, et le typage de ta variable Resultat_recherche, il faut au choix :

    - sécuriser ton VLookup quand il ne remonte pas de résultat (prévoir un test conditionnel)
    - utiliser la méthode Range.Find (voir l'aide VBA à ce sujet) qui te renvoie un objet range (ou Nothing) correspondant à la cellule contenant la valeur cherchée. Là encore, prévoir le cas où la recherche n'aboutit pas (les exemple sur ce forum sont légion)

  4. #4
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour
    - la 1ère colonne ne saurait être la C (A obligatoire)
    - et je ne vois en plus personnellement pas 8 colonnes de C à J

  5. #5
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2016
    Messages : 13
    Par défaut
    Citation Envoyé par unparia Voir le message
    Bonjour
    - la 1ère colonne ne saurait être la C (A obligatoire)
    - et je ne vois en plus personnellement pas 8 colonnes de C à J

    ?? je souhaite faire une recherche sur ma table à partir d'une donnée se trouvant dans ma colonneC et je veux renvoyer la valeur qui est dans la colonne J. De la même facon javais testé dans une cellule avec la rechercheV classique, et ca marche très bien en me renvoyant la valeur de la colonne J que je cherche. De C à J il y a bien 8 colonnes...

    je pensais que la fonctions application.VloopUp se construisait de la même facon en définissant la plage de C à J et cherchant la valeur dans la 8colonne . Je me trompe peut être ?


    Citation Envoyé par casefayere Voir le message
    Bonsoir

    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ...
    Rechercher.Label5.Caption = Resultat_recherche
    ...
    ou est l'erreur, à ton avis ?
    enfait c'est moi que me suis trompée en vous énonçant mon problème. Mon userform s'appelle bien "rechercher"...
    j'aurai souhaité que ce soit aussi simple à résoudre

    Citation Envoyé par joe.levrai Voir le message
    Bonjour,

    si c'était le nom du userform qui posait problème, l'erreur aurait été différente ? (Objet Requis ?)

    je vois deux problèmes :

    1) ce qui est certain : si tu veux chercher la valeur de TextBox1, là tu cherche le mot "Textbox1.Value". Il faut enlever les guillemets, et au passage plutôt utiliser la propriété .Text que .Value

    2) ce qui est supposé : puisque ta recherche ne doit rien retrouver, il suffit que ta variable Resultat_recherche ne soit pas typé pour qu'elle contienne un objet Error ... ce qui aboutit à l'incompatibilité de type puisqu'un caption ne peut recevoir qu'un String


    Outre la correction du point numéro 1, et le typage de ta variable Resultat_recherche, il faut au choix :

    - sécuriser ton VLookup quand il ne remonte pas de résultat (prévoir un test conditionnel)
    - utiliser la méthode Range.Find (voir l'aide VBA à ce sujet) qui te renvoie un objet range (ou Nothing) correspondant à la cellule contenant la valeur cherchée. Là encore, prévoir le cas où la recherche n'aboutit pas (les exemple sur ce forum sont légion)
    alors j'ai transforme mon "textbox1.Value" en textbox1.text et 'ai rajouté une condition "si non vide" mais le problème est différent maintenant

    L'erreur avant apparaissait avant même que l'userform apparaissent. Maintenant il n'y a plus d'erreur de code mais mon Label5 ne change pas une fois une valeur entrée dans le textbox1... et aucun message n'apparait :-//

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
      Rechercher.Show
     
    If Rechercher.TextBox1.Text <> "" Then
    Resultat_recherche = Application.VLookup(Rechercher.TextBox1.Text, Feuil3.Range("C:J"), 8, False)
    Rechercher.Label5.Caption = Resultat_recherche
    End If
    du coup j'ai rajouté un bouton sur lequel l'utilisateur clique une fois son champ rempli
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub CommandButton2_Click()
    If Rechercher.TextBox1.Text <> "" Then
    Resultat_recherche = Application.VLookup(Rechercher.TextBox1.Text, Feuil3.Range("C:J"), 8, False)
    Rechercher.Label5.Caption = Resultat_recherche
    End If
    End Sub
    et il apparait une incompatibilité de type sur la dernière ligne...

    merci de votre aide et de vos messages

  6. #6
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2016
    Messages : 13
    Par défaut
    rebonjour,

    j'avance petitement...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Private Sub CommandButton2_Click()
    Dim Resultat_recherche As Variant
    Dim res As Single
    If Rechercher.TextBox1.Text <> "" Then
    Resultat_recherche = Application.VLookup(Rechercher.TextBox1.Text, Feuil3.Columns("C:J"), 8, True)
    res = CSng(Resultat_recherche)
    Rechercher.Label5.Caption = res
    End If
    End Sub
    enfait en mettant un espion express sur ma fonction Vlook.up j'ai l'erreur 2042 et c'est cette valeur qui s'affiche dans mon label5 (ya du progrès !!)... pourtant il trouve bien la valeur de mon text.box1... du coup je dois mal construire ma fonction vlookup ou mal appelé la valeur de mon text.box1 dans cette fonction...

    merci de votre aide
    bonne journée

  7. #7
    Expert confirmé Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Par défaut
    même si j'acquiesce à vos remarques (je ne peux que le faire) je remarque en général le 1er défaut pour partir d'un meilleur pied, alors.....attendons
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur :resolu: si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  8. #8
    Expert confirmé Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Par défaut
    essayes et adaptes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Private Sub CommandButton1_Click()
    Dim Resultat_recherche, Dcel As Range
    With Feuil3
     Set Dcel = .Range("C" & .Rows.Count).End(xlUp)
      If TextBox1.Text <> "" Then
        Resultat_recherche = WorksheetFunction.VLookup(TextBox1.Text, .Range("C2", Dcel(1, 8)), 8, False)
        If Not IsError(Resultat_recherche) Then
          Label5.Caption = Resultat_recherche
        Else
          Label5 = "pas trouvé"
        End If
      End If
    End With
    End Sub
    testé sur fichier bidon
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur :resolu: si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  9. #9
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2016
    Messages : 13
    Par défaut
    merci ! mais il apparait une erreur 1004 "impossible de lire la propriété de la class worksheetfunction" du coup j'ai remplacé par application et le message "pas trouvé" apparait pourtant il y a la donnée que je souhaite 8 colonnes plus loin :-// mais elle n'est pas renvoyée et l'espion me renvoie toujours l'erreur 2042 :-//

    j'envoie le doc ce soir... je me dois mal m'expliquer, j'espère que ce sera plus clair
    et je suis en office 2013
    Fichiers attachés Fichiers attachés

  10. #10
    Expert confirmé Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Par défaut
    impossible d'ouvrir ton fichier, essayes cet exemple avec VLookup ou Find
    Fichiers attachés Fichiers attachés
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur :resolu: si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  11. #11
    Expert confirmé Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Par défaut
    apparemment les fichiers ne chargent pas, donc :
    détails de mon exemple

    une feuille et ses données

    Nom : candice1.JPG
Affichages : 273
Taille : 46,8 Ko

    un Usf

    Nom : candice2_usf.JPG
Affichages : 284
Taille : 77,4 Ko

    les codes de l'usf
    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
    Private Sub CommandButton1_Click()
    Dim Resultat_recherche, Dcel As Range
    With Feuil3
     Set Dcel = .Range("C" & .Rows.Count).End(xlUp)
      If TextBox1.Text <> "" Then
        Resultat_recherche = WorksheetFunction.VLookup(TextBox1.Text, .Range("C2", Dcel(1, 8)), 8, False)
        If Not IsError(Resultat_recherche) Then
          Label5.Caption = Resultat_recherche
        Else
          Label5 = "pas trouvé"
        End If
      End If
    End With
    End Sub
     
    Private Sub CommandButton2_Click()
    Dim Resultat_recherche As Range
    Set Resultat_recherche = Feuil3.Range("C:J").Find(TextBox1.Value, After:=Feuil3.Range("C1"), LookAt:=xlWhole)
    If Not Resultat_recherche Is Nothing Then
      Label5.Caption = Resultat_recherche(1, 8)
    Else
      Label5.Caption = "pas trouvé"
    End If
    End Sub
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur :resolu: si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  12. #12
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2016
    Messages : 13
    Par défaut
    Merci beaucoup !!! la fonction find me renvois la bonne valeur sans souci !!
    merci de ton aide

  13. #13
    Expert confirmé Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Par défaut
    content que ça te suffise mais penses à cliquer sur et pourquoi pas sur
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur :resolu: si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  14. #14
    Expert confirmé Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Par défaut
    apparemment, tu n'as pas fini ta phrase du dernier post,
    Par curiosité, peux-tu télécharger les fichiers, de ton coté ?
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur :resolu: si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  15. #15
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2016
    Messages : 13
    Par défaut
    Citation Envoyé par casefayere Voir le message
    apparemment, tu n'as pas fini ta phrase du dernier post
    enfait j'ai répondu à mon problème en ne restreignant pas ma recherche (qui ne fonctionnait plus sur une autre donnée déconcaténé ) en changeant le paramètre =xlwhole par =xlpart ca marche. Merci beaucoup de ton aide

    Citation Envoyé par casefayere Voir le message
    Par curiosité, peux-tu télécharger les fichiers, de ton coté ?
    non j'ai pas pu télécharger..
    le message qui apparait "le site web ne peut pas afficher la page"

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

Discussions similaires

  1. "Formules" sur Excel
    Par Micky58 dans le forum Excel
    Réponses: 5
    Dernier message: 16/06/2007, 10h01
  2. [VBA-E] - Loop sur userform
    Par Qatari dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 26/03/2007, 14h00
  3. [VBA-E] formule sur feuille ou par macro
    Par lio62 dans le forum Macros et VBA Excel
    Réponses: 22
    Dernier message: 14/02/2007, 17h13
  4. [CR X] Formule sur picture.
    Par SmokE dans le forum Formules
    Réponses: 2
    Dernier message: 14/03/2006, 10h56
  5. Formule sur champ
    Par mschoum dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 08/11/2005, 08h30

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