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 valeurs dans tableau par Vlookup


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Inscrit en
    Juillet 2007
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 8
    Points : 2
    Points
    2
    Par défaut Recherche valeurs dans tableau par Vlookup
    Bonjour,
    Je souhaite faire une macro en VBA (je pensais utiliser Vlookup mais je ne maitrise pas) afin d'aller chercher une valeure dans un autre fichier excel en fonction de plusieurs critères (j'ai réussi avec un rechercheV). Des personnes rentrent des valeurs sur un masque de saisie (userform) et j'assigne ces valeurs à des variables. Ensuite, je souhaiterais, en fonction des valeurs de ces différents variables, trouver le code correspondant dans un tableau qui se situe dan un autre fichier excel et afficher sa valeure dans cellule excel (et qu'il m'affiche "A DEFINIR" si il ne trouve pas). Voici un exemple plus concret :

    Nom : test_catalgue.png
Affichages : 711
Taille : 2,7 Ko

    Dans le cas ou les vaiables :
    type_chaine_marche = 16EEL
    motorisation = BI
    type_entrainement_secondaire = MILIEU
    largeur_marche = 100

    Alors la variable code doit être égale à PKA01001A000001 et s'

    Merci de votre aide.
    Images attachées Images attachées  

  2. #2
    Expert éminent Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 754
    Points : 9 396
    Points
    9 396
    Par défaut
    Si tu as réussis avec un recherchev, tu peux continuer dans cette voie en cachant la cellule si tu ne veux pas qu'elle s'affiche, et en utilisant la valeur de cette cellule pour le reste du traitement.
    Jérôme

  3. #3
    Candidat au Club
    Inscrit en
    Juillet 2007
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    En effet, avec un recherchev cela marche mais le problême, c'est que les valeurs que je veux comparer (le tableau est en miniature sur mon premier mail) se situes dans un fichier différent de celui où est le masque de saisie et du résulat de la rechechev. Je profite de ma macro pour ouvrir ce fichier et le refermer ensuite afin que les personnes qui rentrent les valeurs ne puissent avoir accès en tout temps à ce fichier.
    C'est pour cela que je voudrais faire une macro en VBA type rechercheV.

  4. #4
    Nouveau membre du Club
    Inscrit en
    Juillet 2007
    Messages
    61
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Juillet 2007
    Messages : 61
    Points : 39
    Points
    39
    Par défaut
    Le problème est que si tu refermes le fichier, la fonction recherchev ne trouvera pas les données qui s'y refèrent et tu auras dans ce cas dans ta cellule de résultat une erreur.

  5. #5
    Candidat au Club
    Inscrit en
    Juillet 2007
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    En effet, et c'est pour cela que je vouvrais le faire en macro VBA pendant que mon fichier est ouvert ....
    Quelqu'un aurait-il une solution ?

  6. #6
    Expert éminent Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 754
    Points : 9 396
    Points
    9 396
    Par défaut
    code a améliorer

    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
     
     
    Dim i As Long
     
     
    With Workbooks("cible.xls").Sheets("Feuil1")
     
        Do While .Range("A" & i).Value <> ""
     
            If .Range("B" & i).Value = type_chaine_marche And _
                            .Range("C" & i).Value = motorisation And _
                            .Range("D" & i).Value = type_entrainement_secondaire And _
                            .Range("E" & i).Value = largeur_marche Then
     
     
                code = .Range("A" & i).Value
                Exit Sub
     
            End If
     
     
            i = i + 1
        Loop
     
     
     
     
     
    End With
    Jérôme

  7. #7
    Candidat au Club
    Inscrit en
    Juillet 2007
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 8
    Points : 2
    Points
    2
    Par défaut suite ...
    Je viens d'ajouter le code avec quelques modifs mais cela ne fonctionne pas. A la fin de la macro, excel devrait m'écrire dans la cellule code_test la valeur de code_machinerie mais il ne le fait pas. POourquoi ??

    voici le code :

    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
    dim i as long
    Workbooks("catalogue_solutions_Epremium_final.xls").Activate
    Sheets("CODIFICATION").Activate
    With Workbooks("catalogue_solutions_Epremium_final.xls").Sheets("CODIFICATION")
     
     i = 5
     
     For i = 5 To 6
     
            If .Range("D" & i).Value = type_chaine_marche And _
                            .Range("E" & i).Value = motorisation And _
                            .Range("F" & i).Value = entrainement_secondaire And _
                            .Range("G" & i).Value = largeur Then
                            code_machinerie = .Range("B" & i).Value
            End If
     
    Next i
    End With
     
    Workbooks("configurateur_Epremium_final.xls").Activate
    Sheets("NOMENCLATURE EM").Activate
    Application.Goto Reference:="code_test"
    ActiveCell.Value = code_machinerie

  8. #8
    Expert éminent Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 754
    Points : 9 396
    Points
    9 396
    Par défaut
    dans ton code tu boucles de la ligne 5 à 6.
    As tu la valeur a chercher dans ces lignes?
    Jérôme

  9. #9
    Candidat au Club
    Inscrit en
    Juillet 2007
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 8
    Points : 2
    Points
    2
    Par défaut suite ...
    J'ai bien les valeurs que je cherche dans les lignes 5 à 6.
    Je viens de fiare un nouveau test :
    En enlevant :"And .Range("G" & i).Value = largeur" la macro fonctionne bien. Mais dès que je mets une recherche sur une valeur contenant un nombre (exmeple pour la vairable "largeur" qui est égale à 1000 ou 800) , cela ne marche plus : l'afichage de la cellule "code_test" reste vide.
    J'ai l'impression que cela viens des valeurs dans les cellules de recherche : si c'est du texte ok mais une valeur entière ou avec virgule => problême. Et cela même si je déclare toutes mes variables en string ...

  10. #10
    Candidat au Club
    Inscrit en
    Juillet 2007
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 8
    Points : 2
    Points
    2
    Par défaut Pb bizarre
    Je viens de découvrir un truc bizarre.
    Voici mon nouveau code :

    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
     
    Dim type_chaine_marche, entrainement_secondaire, genre_chaine_treuil, version_chaine_treuil, fs_sur_arbre, motorisation As String
    Dim largeur As String
    Dim pas_chaine_treuil As String
    Dim i As Long
    With Workbooks("catalogue_solutions.xls").Sheets("CODIFICATION")
    i = 5
    For i = 5 To 6
           If .Range("D" & i).Value = type_chaine_marche And _
            .Range("E" & i).Value = motorisation And _
            .Range("F" & i).Value = entrainement_secondaire And _
            .Range("G" & i).Value = largeur And _
            .Range("H" & i).Value = genre_chaine_treuil And _
            .Range("I" & i).Value = pas_chaine_treuil And _
            .Range("J" & i).Value = version_chaine_treuil And _
            .Range("K" & i).Value = fs_sur_arbre _
           Then
           code_machinerie = .Range("B" & i).Value
           libelle_machinerie = .Range("C" & i).Value
           Exit For
           Else
           code_machinerie = "A DEFINIR"
           libelle_machinerie = "A DEFINIR"
           End If
    Next i
    Application.Goto Reference:="valeur_code_machinerie"
    ActiveCell.Value = code_machinerie
    Application.Goto Reference:="libelle_code_machinerie"
    ActiveCell.Value = libelle_machinerie
    End With
    Dans ce cas de figure, tout fonctionne. Mais si je met la variable "largeur" (qui équivaut à 1000 ou 800) en déclaration de variable avec d'autres (ex : Dim type_chaine_marche, entrainement_secondaire, genre_chaine_treuil, version_chaine_treuil, fs_sur_arbre, motorisation, largeur As String), la macro donne une mauvaise réponse :" A DEFINR". Pour que cela marche, il faut que je dissocie la variable largeur et pas_chaine_de _treuil (qui elle aussi est un nombre ) en les déclarant en tant que string idépendement. Quelqu'un aurait-il une réponse à ça ??

Discussions similaires

  1. [XL-2010] Recherche valeur dans tableau matriciel
    Par Stifoun dans le forum Excel
    Réponses: 3
    Dernier message: 17/12/2014, 10h08
  2. [XL-2010] Recherche valeur dans tableau
    Par justin74 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 30/06/2011, 21h41
  3. Recherche valeur dans tableau et somme des éléments
    Par eaglewatch dans le forum LabVIEW
    Réponses: 5
    Dernier message: 16/03/2011, 14h22
  4. [XL-2003] Vba : recherche valeur dans tableau
    Par gandalf20000000 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 08/11/2010, 19h35
  5. Réponses: 6
    Dernier message: 26/03/2009, 20h08

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