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 dans une liste


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mars 2008
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 18
    Par défaut Recherche dans une liste
    Bonjour étant étudiante en école agro (donc études de bio) je suis grande débutante en VBA. Or on nous demande de réaliser un projet excel intégrant de la programmation.
    J'ai essayé d'écrire un programme que je pense est très basique, mais il ne marche pas (ce qui n 'est pas très surprenant me concernant). Pourriez vous me dire ce qui ne va pas ? Merci infiniment
    En gros je voudrais qu'en rentrant un nom de film dans la fenêtre inputbox, le programme me dise si celui-ci est disponible ou loué, sachant que dans la feuille de calculs nommé "Films", j'ai deux colonnes : l'une avec le nom des films, l'autre avec l'état associé (disponible ou loué). J'ai appelé cette dernière colonne "Etat".

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub DisponibilitéFilm()
        Dim Film As Variant
        Dim Disponibilité As Variant
        Film = InputBox("Veuillez saisir le nom du Film")
        Sheets("Films").Activate
        Disponibilité = WorksheetFunction. _
            VLookup(Film, Range("Etat"), 1, False)
        MsgBox "Le film " & Film & "est " & Disponibilité
    End Sub
    D'après la fonction débogage "pas à pas détaillé", le problème viendrait de l'instruction en rouge.
    Encore merci, l'échéance pour ce projet est dans 10 jours et je commence à paniquer un peu

    Elvidre

  2. #2
    Membre averti
    Inscrit en
    Mars 2008
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 18
    Par défaut
    merci, mais en fait j'avais déjà essayé de remplacer le "2" par un "1", ça m'affiche toujours le même message d'erreur (qui ne veut rien dire pour moi) : 400.

  3. #3
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Bonjour Elvidre, bienvenue sur le forum.
    En effet, tu ne peux effectuer une rechercheV sur une colonne mais sur une plage de données.
    Citation Envoyé par l'aide en ligne
    valeur_cherchée est la valeur à trouver dans la première colonne de la matrice
    Quant à la plage, elle doit couvrir de la colonne A à la colonne dont tu veux récupérer la valeur.
    Citation Envoyé par l'aide en ligne
    table_matrice est la table de données dans laquelle est exécutée la recherche de la valeur. Utilisez une référence à une plage ou un nom de plage, par exemple Base de données ou Liste.
    Si la donnée cherchée est dans la colonne A, alors la plage est
    Range("A1:" & Cells(DerniereLigne, Etat).Address
    Ensuite, j'ignore si on peut utiliser un nom de colonne pour obtenir la plage. Je n'ai pas réussi
    Donc je te propose une solution qui fonctionne : Je suppose que
    la Disponibilité se trouve dans "Films", colonne 4
    la derniere ligne = à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim DerniereLigne
        DerniereLigne = Worksheets("Films").Range("A65536").End(xlUp).Row
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        Sheets("Films").Activate
        DerniereLigne = Worksheets("Films").Range("A65536").End(xlUp).Row
        Etat = 4
        Disponibilité = WorksheetFunction. _
            VLookup(Film, Worksheets("Films").Range("A1:" & Cells(DerniereLigne, Etat).Address), Etat, False)
            MsgBox "Le film " & Film & " est " & Disponibilité
    Peut-être y-a-t-il mieux mais au moins, ainsi ça fonctionne.
    Adapte le N° de colonne et fais un test

  4. #4
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Une autre solution entièrement en VBA (sans utilisation de fonction Excel)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub Test2()
    Dim c As Range, Film As String
    Dim Disponibilité As Variant, NoCol
        Film = InputBox("Veuillez saisir le nom du Film")
        If Film = "" Then Exit Sub
        NoCol = 4
        With Worksheets("Films").Range(Cells(1, 1), Cells(Worksheets("Films").Range("A65536").End(xlUp).Row, NoCol))
            Set c = .Find(Film, LookIn:=xlValues)
            If Not c Is Nothing Then Disponibilité = c.Offset(0, 3).Value
        End With
        MsgBox "Le film " & Film & " est " & Disponibilité
    End Sub
    Edit
    Une idée m'est venue : Comment fais-tu si tu as plusieurs exemplaires du même film ?
    Si c'est un pb qui se pose à toi, alors on peut modifier l'une ou l'autre procédure pour le prendre en compte...
    Tu dis

  5. #5
    Membre averti
    Inscrit en
    Mars 2008
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 18
    Par défaut
    super, merci beaucoup ça marche par contre je suis pas sûre d'avoir tout compris, va falloir que j'examine tout ça...

    mais merci encore !

    Elvidre

  6. #6
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Si tu as des questions, c'est le moment
    Que ne comprends-tu pas ?

  7. #7
    Membre averti
    Inscrit en
    Mars 2008
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 18
    Par défaut
    merci mais je crois que j'ai compris, en fait en gros j'ai confondu plage de données et colonne... j'ai un peu ouvert les yeux et les formules sont devenues plus claires
    mais par contre est-ce qu'il y'aurait un moyen pour que le programme n'ouvre pas un message d'erreur quand on appuie sur annuler ? idem pour quand on saisi le nom d'un film qui n'est pas dans la base de données ? Il faudrait que je lui fasse ouvrir un msgbox comme "Désolée, le film que vous avez saisi est inconnu".
    Je pense qu'il faut utiliser If......then mais je ne sais pas trop où l'introduire. J'ai fait quelques essais mais c'est pas vraiment concluant.

  8. #8
    Membre Expert
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 568
    Détails du profil
    Informations personnelles :
    Âge : 62
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 568
    Par défaut
    ça, c'est parce que tu utilise un inputbox. c'est pratique, mais c'est sensible. grosse source d'erreur a cause des formats (surtout pour les numériques, mais tu n'est pas concernée,) mais aussi a cause de la casse.
    tu ne trouvera pas ton film, dès lors que tu Tu vas oublier une majuscule, ou un espace de trop. le mieux pour toi, serai d'utiliser un userform, si tes connaissance te le permettent.
    uns usf simple comprenant une liste déroulante, dont le rowsource serait ta liste de recherche, et associé a ça un bouton OK avec le code que tu as déja.

  9. #9
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Ajoute simplement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        If Film = "" Then Exit Sub
    après l'input
    A+

Discussions similaires

  1. [VBA-Excel] Effectuer une recherche dans une liste view
    Par Miles Raymond dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 23/11/2006, 17h21
  2. Imposer une methode Equals pour une recherche dans une List
    Par petozak dans le forum Débuter avec Java
    Réponses: 5
    Dernier message: 03/10/2006, 10h41
  3. Réponses: 2
    Dernier message: 07/07/2006, 10h00
  4. Réponses: 2
    Dernier message: 10/10/2005, 02h25
  5. Recherche dans une liste non trié
    Par Oberown dans le forum Algorithmes et structures de données
    Réponses: 7
    Dernier message: 13/09/2004, 13h56

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