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 :

Code VBA pour remplacer la fonction RECHERCHEV [XL-2002]


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Juin 2013
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2013
    Messages : 15
    Points : 11
    Points
    11
    Par défaut Code VBA pour remplacer la fonction RECHERCHEV
    Bonjour à tous,

    Je débute en programmation VBA sous Excel et je souhaiterai un peu d'aide.
    J'ai créé une macro enregistrée à partir de la formule "recherchev".
    Malheureusement celle-ci ne s'adapte pas à tous les cas que je peux rencontrer. En effet, le contenu de la colonne que je souhaite comparer à ma matrice peut-être d'une fois à l'autre totalement différent. Je peux avoir une fois 5 cellules avec des informations et une autre fois 10 cellules, etc.
    De même, la matrice qui est également sur une colonne peut avoir un contenu d'une fois à l'autre totalement différent.
    C'est pourquoi, je souhaiterai pouvoir remplacer le code générer par la macro enregistrée par un petit code VBA qui s’adapterait automatiquement au contenu de la colonne comparée et au contenu de la Matrice.

    Exemple :
    Ce code effectuerai la "recherchev" en colonne B - FEUIL1. Il comparait exactement la colonne A - FEUIL1 jusqu'à la dernière cellule non vide à la Matrice (colonne A - FEUIL2) jusqu'à la dernière cellule non vide.

    Je vous remercie par avance pour votre aide.

    Cordialement.
    NoodleDS

  2. #2
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Points : 14 363
    Points
    14 363
    Par défaut
    Bonjour,

    Pas sûr d'avoir bien compris, notamment quelle colonne doit renvoyer le résultat.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Dim Plage As Range, C As Range
    With Sheets("Feuil1")
        Set Plage = .Range(.[A1], .Cells(.Rows.Count, 1).End(xlUp))
    End With
    With Sheets("Feuil2")
        For Each C In Plage
            C.Offset(, 1) = Application.VLookup(C.Value, .Range(.[A1], .Cells(.Rows.Count, 1).End(xlUp)), 1, 0)
        Next C
    End With

  3. #3
    Membre à l'essai
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Juin 2013
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2013
    Messages : 15
    Points : 11
    Points
    11
    Par défaut
    Bonjour,

    Je te remercie Daniel.C pour cette réponse très rapide qui fonctionne parfaitement.
    Juste une petite demande supplémentaire. Est-ce qu'il serait possible de remplacer "#N/A" du retour lorsqu'il ne trouve pas l'information dans la Matrice, par un commentaire comme "Non présent".

    Cordialement.
    NoodleDS

  4. #4
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Points : 14 363
    Points
    14 363
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Dim Plage As Range, C As Range, Teste
    With Sheets("Feuil1")
        Set Plage = .Range(.[A1], .Cells(.Rows.Count, 1).End(xlUp))
    End With
    With Sheets("Feuil2")
        For Each C In Plage
            Teste = Application.VLookup(C.Value, .Range(.[A1], .Cells(.Rows.Count, 1).End(xlUp)), 1, 0)
            If IsError(Teste) Then
                C.Offset(, 1) = "Non présent"
            Else
            C.Offset(, 1) = Application.VLookup(C.Value, .Range(.[A1], .Cells(.Rows.Count, 1).End(xlUp)), 1, 0)
            End If
        Next C
    End With

  5. #5
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 674
    Points
    18 674
    Par défaut
    Bonjour Daniel,

    je ne comprend pas pourquoi après l'affectation de la variable Teste tu refais le même calcul pour la cellule,

    les lignes n°8 à 12 ne pourraient-elles pas être simplifiées en une seule :

    C.Offset(, 1) = IIf(IsError(Teste), "Non présent", Teste) ,


    ou bien par If IsError(Teste) Then C.Offset(, 1) = "Non présent" Else C.Offset(, 1) = Teste


    __________________________________________________________________________________________

    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion …

  6. #6
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Points : 14 363
    Points
    14 363
    Par défaut
    Effectivement, c'est une erreur de copier coller. Mon intention était de mettre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Dim Plage As Range, C As Range, Teste
    With Sheets("Feuil1")
        Set Plage = .Range(.[A1], .Cells(.Rows.Count, 1).End(xlUp))
    End With
    With Sheets("Feuil2")
        For Each C In Plage
            Teste = Application.VLookup(C.Value, .Range(.[A1], .Cells(.Rows.Count, 1).End(xlUp)), 1, 0)
            If IsError(Teste) Then
                C.Offset(, 1) = "Non présent"
            Else
            C.Offset(, 1) = Teste
            End If
        Next C
    End With

  7. #7
    Membre à l'essai
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Juin 2013
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2013
    Messages : 15
    Points : 11
    Points
    11
    Par défaut
    Bonjour,
    Je vous remercie pour cette réponse, cela fonctionne parfaitement.
    Bonne soirée.


    Cordialement.
    NoodleDS

  8. #8
    Membre à l'essai
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Juin 2013
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2013
    Messages : 15
    Points : 11
    Points
    11
    Par défaut Code VBA pour remplacer la fonction RECHERCHEV
    Bonjour à tous,

    J'ai toujours des difficultés pour coder en VBA. J'ai une nouvelle demande concernant le code pour remplacer la rechercheV, avec une Matrice qui serait sur 2 colonnes.

    Ce nouveau code effectuerai la "recherchev" en colonne B - FEUIL1. Il comparait exactement la colonne A - FEUIL1 jusqu'à la dernière cellule non vide à la colonne A de la Matrice (colonne A et B - FEUIL2) jusqu'à la dernière cellule non vide.

    Après correspondance, les informations rapatriées en colonne B - FEUIL1 serait celles trouvées en colonne B - FEUIL2. Dans le cas où il n' y a pas correspondance, il faudrait indiquer dans la cellule correspondante de la colonne B - FEUIL1 : "NON TROUVE".

    Je vous remercie par avance pour votre aide.

    Cordialement.
    NoodleDS

  9. #9
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Points : 14 363
    Points
    14 363
    Par défaut
    Bonjour,

    J'ai une nouvelle demande concernant le code pour remplacer la rechercheV
    Ouvre un nouveau fil, il sera consulté par plus de répondeurs.

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

Discussions similaires

  1. Un code VBA pour récupérer un type de donnée ?
    Par KEROZEN dans le forum VBA Access
    Réponses: 22
    Dernier message: 26/09/2019, 12h12
  2. Quel code VBA pour cette fonction.
    Par AlexisSz dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 10/05/2011, 12h03
  3. [XL-2007] Code VBA pour remplacer le contenu de cellules
    Par tomlapomme dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 25/08/2010, 15h39
  4. [VBA-A] Code vba pour inclure un formulaire Acces
    Par MadSquirrel dans le forum VBA Access
    Réponses: 2
    Dernier message: 12/04/2006, 19h19
  5. Réponses: 3
    Dernier message: 06/09/2005, 11h27

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