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 :

Rechercher un code dans un autre feuille et renvoyer la cellule d'à côté [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Femme Profil pro
    Analyste d'exploitation
    Inscrit en
    Mai 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 53
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste d'exploitation

    Informations forums :
    Inscription : Mai 2014
    Messages : 6
    Points : 7
    Points
    7
    Par défaut Rechercher un code dans un autre feuille et renvoyer la cellule d'à côté
    Bonsoir

    Je pédale un peu dans la polenta :
    dans la feuille 1 de la cellule b4 à b500 j'ai x codes (j'arrête la lecture de la plage quand j'arrive sur une cellule vide)
    je souhaite vérifier si dans la feuille 2 colonne A2;A1000 ils existent et si oui renvoyer le contenu dans la feuille 1,cellule cy de la cellule By correpondant

    exemple :
    feuille1
    b4 : toto
    b5: titi
    b6: tata

    feuille 2
    a3 : titi - b3 jaune
    a15: toto - b15 bleu


    ap la recherche sur la feuille 1 je souhaite obtenir
    c4 : bleu
    c5 : jaune
    c6 : inconnu

    j'ai essayé diverses choses sans résultats , qui peux m'aider ?

  2. #2
    Membre émérite Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Points : 2 594
    Points
    2 594
    Par défaut
    Bonjour nath, bonjour le forum,

    Une proposition par macro avec 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
    16
    17
    18
    Sub Macro1()
    Dim O1 As Object 'déclare la variable O1 (Onglet 1)
    Dim DL As Integer 'déclare la variable DL (Dernière Ligne)
    Dim PL As Range 'déclare la variable PL (PLage)
    Dim O2 As Object 'déclare la variable O2 (Onglet 2)
    Dim CEL As Range 'déclare la variable CEL (CELlule)
    Dim R As Range 'déclare la variable R (Recherche)
     
    Set O1 = Sheets("Feuil1") 'définit l'onglet O1
    DL = O1.Cells(Application.Rows.Count, 2).End(xlUp).Row 'définit la dernière ligne éditée DL de la colonne 2 (=B) de l'onglet O1
    Set PL = O1.Range("B4:B" & DL) 'définit la plage PL
    Set O2 = Sheets("Feuil2") 'définit l'onglet O2
    For Each CEL In PL 'boucle sur toutes les cellules CEL de la plage PL
        Set R = O2.Columns(1).Find(CEL.Value, , xlValues, xlWhole) 'définit la recherche R (recherche la valeur entière de la cellule CEL dans la colonne 1 (=A) de l'onglet O2)
        'si il existe au moins une occurrence trouvée, récupère dans la colonne C de CEL la valeur de l'occurrence trouvé décalée d'une colonne a droite (colonne B)
        If Not R Is Nothing Then CEL.Offset(0, 1).Value = R.Offset(0, 1).Value
    Next CEL 'prochaine cellule de la boucle
    End Sub
    À plus,

    Thauthème

    Je suis Charlie

  3. #3
    Futur Membre du Club
    Femme Profil pro
    Analyste d'exploitation
    Inscrit en
    Mai 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 53
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste d'exploitation

    Informations forums :
    Inscription : Mai 2014
    Messages : 6
    Points : 7
    Points
    7
    Par défaut
    j'ai essayé de rapporter le code pour une recherche sur plusieurs onglets (sauf le 01 qui sert de zone de récupération des données)

    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 O1 As Object 'déclare la variable O1 (Onglet 1)
    subtest()
    Dim DL As Integer 'déclare la variable DL (Dernière Ligne)
    Dim PL As Range 'déclare la variable PL (PLage)
    Dim O2 As Object 'déclare la variable O2 (classeur)
    Dim CEL As Range 'déclare la variable CEL (CELlule)
    Dim R As Range 'déclare la variable R (Recherche)
    'définit l'onglet O1
    Set O1 = ThisWorkbook.Sheets("Feuil1") 
    DL = O1.Cells(Application.Rows.Count, 2).End(xlUp).Row
    Set PL = O1.Range("B4:B" & DL) 'définit la plage PL
     'définit les feuilles du classeur sur lesquelles faire la recherche
    Set O2 = ThisWorkbook.Worksheets(Array("Feuil2", "Feuil3", "Feuil4"))
    For Each CEL In PL 'boucle sur toutes les cellules CEL de la plage PL
     'définit la recherche R (recherche la valeur entière de la cellule CEL dans la colonne 1 (=A) des onglets du classeur)
        Set R = O2.Columns(1).Find(CEL.Value, , xlValues, xlWhole)
        'si il existe au moins une occurrence trouvée, récupère dans la colonne C de CEL la valeur de l'occurrence trouvé décalée de 2 colonnes a droite (colonne C)
        If Not R Is Nothing Then CEL.Offset(0, 3).Value = R.Offset(0, 1).Value
        If R Is Nothing Then CEL.Offset(0, 3).Value = "Inconnu"
    'prochaine cellule de la boucle
    Next CEL 
     
    end sub

    j'ai le message "erreur09, l'indice n'appartient pas à la sélection " sur set O2 .....

    j'ai essayé ça aussi mais sans succès set c ne trouve rien
    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
    Sub cherche()
     
    Dim n As Integer
    Dim ws As Worksheet
    Dim ach As String
    Dim c As Object
     
    For n = 4 To 8
    ach = Sheets("Feuil1").Cells(n, 1)
      For Each ws In Sheets
        If ws.Name <> "Feuil1" Then
           Set c = ws.Range("A1: D10").Find(ach, LookIn:=xlValues, lookat:=xlWhole)
           If Not c Is Nothing Then
             ws.Rows(n).Columns("d").Copy Destination:=Sheets("Feuil1").Rows(n).Columns("C")
                  End If
        End If
      Next ws
    Next n
    End Sub

  4. #4
    Membre éclairé Avatar de Nico Chg
    Homme Profil pro
    Apprenti ingénieur Business Development
    Inscrit en
    Juillet 2014
    Messages
    352
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Apprenti ingénieur Business Development
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juillet 2014
    Messages : 352
    Points : 758
    Points
    758
    Par défaut
    Bonjour,

    Je te suggère, pour plus de lisibilité, de mettre ton code entre balise CODE([ CODE][ /CODE]) symbolisé par le #

    ça améliore énormément la lisibilité.

    Je ne comprend pas ce que tu essaye de faire avec ce Set O2.
    Tu initialise un objet de type feuille, et sauf erreur de ma part, tu set donc une feuille qui a pour nom un tableau.

    Peut être que je me trompe, mais le paramètre de worksheets est uniquement un nom, donc Feuil1 OU Feuil2 OU Feuil3.

    Si tu veux parcourir les feuilles, utilise une boucle.

    Sur ton second code, tu met ach = une cellule, qui est un objet. Je ne sais pas ce que VBA choisit de faire dans ce cas, mais peut être qu'il ne te renvoie pas implicitement la valeur de la cellule. Essaie de débugger en mode pas à pas, afin de voir la valeur de ach.

    Pour plus de clarté, voici les deux codes sous les balises :

    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 O1 As Object 'déclare la variable O1 (Onglet 1)
    subtest()
    Dim DL As Integer 'déclare la variable DL (Dernière Ligne)
    Dim PL As Range 'déclare la variable PL (PLage)
    Dim O2 As Object 'déclare la variable O2 (classeur)
    Dim CEL As Range 'déclare la variable CEL (CELlule)
    Dim R As Range 'déclare la variable R (Recherche)
    'définit l'onglet O1
    Set O1 = ThisWorkbook.Sheets("Feuil1") 
    DL = O1.Cells(Application.Rows.Count, 2).End(xlUp).Row
    Set PL = O1.Range("B4:B" & DL) 'définit la plage PL
    'définit les feuilles du classeur sur lesquelles faire la recherche
    Set O2 = ThisWorkbook.Worksheets(Array("Feuil2", "Feuil3", "Feuil4"))
    For Each CEL In PL 'boucle sur toutes les cellules CEL de la plage PL
    'définit la recherche R (recherche la valeur entière de la cellule CEL dans la colonne 1 (=A) des onglets du classeur)
    Set R = O2.Columns(1).Find(CEL.Value, , xlValues, xlWhole)
    'si il existe au moins une occurrence trouvée, récupère dans la colonne C de CEL la valeur de l'occurrence trouvé décalée de 2 colonnes a droite (colonne C)
    If Not R Is Nothing Then CEL.Offset(0, 3).Value = R.Offset(0, 1).Value
    If R Is Nothing Then CEL.Offset(0, 3).Value = "Inconnu"
    'prochaine cellule de la boucle
    Next CEL 
     
    end sub
    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
    Sub cherche()
     
    Dim n As Integer
    Dim ws As Worksheet
    Dim ach As String
    Dim c As Object
     
    For n = 4 To 8
    ach = Sheets("Feuil1").Cells(n, 1)
    For Each ws In Sheets
    If ws.Name <> "Feuil1" Then
    Set c = ws.Range("A1: D10").Find(ach, LookIn:=xlValues, lookat:=xlWhole)
    If Not c Is Nothing Then
    ws.Rows(n).Columns("d").Copy Destination:=Sheets("Feuil1").Rows(n).Columns("C")
    End If
    End If
    Next ws
    Next n
    End Sub
    Citation Envoyé par Oscar Wilde
    Je déteste les discussions: elles vous font parfois changer d'avis.

  5. #5
    Membre émérite Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Points : 2 594
    Points
    2 594
    Par défaut
    Bonjour Nat, Nico, bonjour le forum,

    Peut-être comme ça :

    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
    Sub TEST()
    Dim O1 As Object 'déclare la variable O1 (Onglet 1)
    Dim DL As Integer 'déclare la variable DL (Dernière Ligne)
    Dim PL As Range 'déclare la variable PL (PLage)
    Dim O As Object 'déclare la variable O (Onglets)
    Dim CEL As Range 'déclare la variable CEL (CELlule)
    Dim R As Range 'déclare la variable R (Recherche)
    Dim TEST As Boolean 'déclare la variable TEST
     
    Set O1 = Sheets("Feuil1") 'définit l'onglet O1
    DL = O1.Cells(Application.Rows.Count, 2).End(xlUp).Row
    Set PL = O1.Range("B4:B" & DL) 'définit la plage PL
    For Each CEL In PL 'boucle 1: sur toutes les cellules CEL de la plage PL
        TEST = False 'réinitialise la variable TEST
        For Each O In Sheets 'boucle 2 sur tous les onglets du classeur
            If Not O.Name = "Feuil1" Then 'condition 1 : si le nom de l'onglet est différent de "Feuil"
                'définit la recherche R (recherche la valeur entière de la cellule CEL dans la colonne 1 (=A) des onglets du classeur)
                Set R = O.Columns(1).Find(CEL.Value, , xlValues, xlWhole)
                If Not R Is Nothing Then 'condition 2 : si il existe au moins une occurrence trouvée
                    CEL.Offset(0, 3).Value = R.Offset(0, 1).Value 'récupère dans la colonne E de CEL la valeur de l'occurrence trouvé décalée d'une colonne a droite (colonne B)
                    TEST = True 'définit la variable TEST
                    Exit For 'sort de la boucle 2
                End If 'fin de la condition 2
            End If 'fin de la condition 1
        Next O 'prochain onglet de la boucle 2
        If TEST = False Then CEL.Offset(0, 3).Value = "Inconnu" 'si test est faux, "Inconnu" est éctit
    Next CEL 'prochaine cellule de la boucle 1
    End Sub
    À plus,

    Thauthème

    Je suis Charlie

  6. #6
    Futur Membre du Club
    Femme Profil pro
    Analyste d'exploitation
    Inscrit en
    Mai 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 53
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste d'exploitation

    Informations forums :
    Inscription : Mai 2014
    Messages : 6
    Points : 7
    Points
    7
    Par défaut
    Merci à tous pour votre aide celà fonctionne bien mieux maintenant.

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

Discussions similaires

  1. [XL-2007] Rechercher une valeur dans une autre feuille
    Par Greg2506 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 03/07/2013, 19h22
  2. Rechercher des données dans une autre feuille
    Par pedrito75 dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 15/05/2011, 18h40
  3. [XL-2003] recherche emplacement d'une date dans une autre feuille
    Par wuging dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 27/08/2010, 16h19
  4. [XL-2003] Recherche d'une même valeur dans une autre feuille
    Par Rrrroh dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 25/06/2010, 09h03
  5. Recherche dans une autre feuille de Excel même classeur
    Par kourria dans le forum Windows Forms
    Réponses: 4
    Dernier message: 02/06/2007, 22h29

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