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 :

RechercheV en code VBA, en erreur : renvoyer le contenu d'une cellule au lieu d'une chaine de caractères [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 RechercheV en code VBA, en erreur : renvoyer le contenu d'une cellule au lieu d'une chaine de caractères
    Bonjour,
    Il y a peu de temps que je me suis mis au VBA et j'éprouve beaucoup de difficulté. Si une personne du forum pouvait m'aider à compléter ce code, ce serait vraiment super.
    Ce code permet, entre autre, lorsque que le résultat de ma RechercheV est en "erreur" de compléter la cellule en question d'une chaine de caractère, or, je souhaiterai en cas d'erreur que le programme me rapporte plutôt le contenu d'une cellule qui serait sur la même ligne, mais dans une colonne qui se trouverait avant ou après celle du résultat de la RechercheV. Je reste vague sur la lettre de la colonne car je souhaiterai que le nouveau code puisse s'adapter en fonction de la colonne choisie.

    exemple :
    résultats en colonne C, si erreur, prendre le résultat sur la même ligne de la colonne A.
    ou
    résultats en colonne C, si erreur, prendre le résultat sur la même ligne de la colonne E.
    etc...

    Voir ci-dessous le code que j'utilise pour le moment :

    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 = .Columns("V:V")
        End With
        With Sheets("Feuil2")
            For Each C In Plage
                Teste = Application.VLookup(C.Value, .Range(.[B2], .Cells(.Rows.Count, 3).End(xlUp)), 2, False)
                If IsError(Teste) Then
                    C.Offset(, 1) = "ERREUR"
                Else
                    C.Offset(, 1) = Teste
                End If
            Next C
        End With
    Je vous remercie par avance pour votre aide.

    Cordialement.
    NoodleDS

  2. #2
    Expert éminent
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Points : 7 149
    Points
    7 149
    Billets dans le blog
    7
    Par défaut RechercheV
    Bonjour NoodleDS, Bonjour le Forum,

    Bienvenu!

    A mon avis, l'erreur sur une fonction RECHERCHEV provient seulement du fait que la valeur cherchée sur la colonne de référence est absente. Donc, quelle que soit la colonne de résultats, il y auara toujours une erreur.
    A moins que la valeur cherchée se trouve bien sur la colonne de référence (ici B) mais que le résultat est déjà une erreur en lui-même.
    Merci de préciser.

    2 remarques au demeurant
    1 - Eviter de redéfinir la colonne de recherche pour chaque occurence de C. Celle-ci reste constante.
    2 - Personnellement, j'opterais plus volontiers pour la combinaison des fonctions INDEX et EQUIV, ou mieux, la méthode FIND.

    Bien Cordialement.

    Marcel

    Dernier billet:
    Suppression des doublons d'un tableau structuré, gestion d'un array

    Pas de messagerie personnelle pour vos questions, s'il vous plaît. La réponse peut servir aux autres membres. Merci.


  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 MarcelG, les autres membres du forum,

    Je pense que je me suis mal exprimé. Le code fourni fonctionne, mais n'effectue pas exactement ce qu je souhaite maintenant. Lorsqu'il y a erreur au niveau de la rechercheV, il ramène le mot "ERREUR". C'est ce que je souhaitais dans un premier temps.
    C'est la ligne 9 dans le code fourni :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    C.Offset(, 1) = "ERREUR"
    Maintenant, je souhaiterai (et c'est l'objet de ma demande) à la place de cette ligne de code ou dans un code différent que le programme me rapporte plutôt le contenu d'une cellule qui serait sur la même ligne, mais dans une colonne qui se trouverait avant ou après celle du résultat de la RechercheV. Je reste vague sur la lettre de la colonne car je souhaiterai que le nouveau code puisse s'adapter en fonction de la colonne choisie.

    exemple :
    résultats en colonne C, si erreur, prendre le résultat sur la même ligne de la colonne A pour le mettre en C.
    ou
    résultats en colonne C, si erreur, prendre le résultat sur la même ligne de la colonne E pour le mettre en C.
    etc...


    Malheureusement, tout ce que j'ai essayé de mettre à la place de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    C.Offset(, 1) = "ERREUR"
    ne fonctionne pas.
    Sinon, je n'ai rien contre les fonctions INDEX, EQUIV ou FIND, par contre, je ne sais pas du tout m'en servir.

    Je vous remercie par avance pour votre aide.

    Cordialement.
    NoodleDS

  4. #4
    Expert éminent
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Points : 6 871
    Points
    6 871
    Par défaut
    Bonjour,

    En admettant que tu veuilles récupérer la valeur située en colonne E par rapport à la colonne V :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    C.Offset(, 1) = C.Offset(, -17)
    Hervé.

  5. #5
    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 RechercheV en code VBA, en erreur : renvoyer le contenu d'une cellule au lieu d'une chaine de caractères
    Bonjour Theze, MarcelG, les membres du forum,

    Theze, j'ai mis comme indiqué le code suivant pour récupérer la valeur située en colonne T par rapport à la colonne V et cela ne fonctionne pas (voir le code ci-dessous) :

    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
     
    Dim Plage As Range, C As Range, Teste
        With Sheets("Feuil1")
            Set Plage = .Columns("V:V")
        End With
        With Sheets("Feuil2")
            For Each C In Plage
                Teste = Application.VLookup(C.Value, .Range(.[B2], .Cells(.Rows.Count, 3).End(xlUp)), 2, False)
                If IsError(Teste) Then
                    C.Offset(, 1) = C.Offset(, -2) 
                Else
                    C.Offset(, 1) = Teste
                End If
            Next C
        End With
    Lorsque la fonction RechercheV ne trouve pas d'information dans la matrice située en Feuil2, celle-ci devrait me renvoyer l'information trouvée en colonne T, or, celle-ci me renvoie "#N/A". Pouvez-vous voir ce qui cloche dans le code ou me proposer un code différent qui réglerai ma problématique.

    Je vous remercie par avance pour votre aide.

    Cordialement.
    NoodleDS

  6. #6
    Expert éminent
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Points : 6 871
    Points
    6 871
    Par défaut
    Bonjour,

    Teste ce 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
     
    Sub Test()
     
        Dim Plage As Range
        Dim PlgRech As Range
        Dim C As Range
        Dim Teste
     
        With Sheets("Feuil1")
            Set Plage = .Range(.Cells(1, 22), .Cells(.Rows.Count, 22).End(xlUp))
        End With
     
        With Sheets("Feuil2")
            Set PlgRech = .Range(.Cells(2, 2), .Cells(.Rows.Count, 3).End(xlUp))
        End With
     
        For Each C In Plage
     
            Teste = Application.VLookup(C.Value, PlgRech, 2, False)
     
            If IsError(Teste) Then
                C.Offset(, 1) = C.Offset(, -2)
            Else
                C.Offset(, 1) = Teste
            End If
     
        Next C
     
    End Sub
    Hervé.

  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 RechercheV en code VBA, en erreur : renvoyer le contenu d'une cellule au lieu d'une chaine de caractères
    Bonjour theze, le forum,
    Je te remercie grandement Theze, cela fonctionne parfaitement.

    NoodleDS

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

Discussions similaires

  1. [XL-2013] inserer une variable a partir d'une cellule dans mon code VBA / EXCEL 2013
    Par schoret dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 28/10/2014, 09h40
  2. Quel code Vba pour action renvoyer mail
    Par AlexFred dans le forum VBA Outlook
    Réponses: 6
    Dernier message: 05/11/2012, 20h04
  3. Réponses: 5
    Dernier message: 06/04/2007, 14h05
  4. [VBA-Excel]Supprimer une colonne entiere basee sur une cellule
    Par Tartenpion dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 05/10/2006, 22h08
  5. [VBA-E] Mettre en gras une partie du texte d'une cellule
    Par clochardevobsy dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 05/05/2006, 16h25

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