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 d'une même valeur dans une autre feuille [XL-2003]


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 27
    Points : 24
    Points
    24
    Par défaut Recherche d'une même valeur dans une autre feuille
    Bonjour à tous,
    je ne sais pas si le titre est très explicite, aussi je vais vous exposer mon problème:

    je dispose de 2 feuilles:
    -la 1ere contient de produits (10k entrées environs), colonne A
    -la seconde des contraintes colonnes D, sur les produits colonnes E

    je voudrais répercuter visuellement la contrainte dans la feuille1 si le produit en porte une.

    J'ai écrit ceci, toutefois je crois bien que j'ai mal compris le fonctionnement de cette recherche...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Set wsh1 = Worksheets("f1")
    Set wsh2 = Worksheets("f2")
    LastLig1 = wsh1.Cells(Rows.Count, "D").End(xlUp).Row
    LastLig2 = wsh2.Cells(Rows.Count, "A").End(xlUp).Row
     
    For Ligne = PremiereligneR To LastLig1
       Ligne2 = 5
    Set c = wsh2.Columns(1).Find(wsh1.Cells(Ligne, "D").Value, LookIn:=xlValues, lookat:=xlWhole)
       If c Is Nothing Then
       wsh2.Cells(Ligne2, "D") = ""
       Else: wsh2.Cells(Ligne2, "D").Value = wsh1.Cells(Ligne, "E").Value
       Ligne2 = Ligne2 + 1
       End If
    Next Ligne
    Je ne sais pas si cette idée pouvait être exploitée ou si il convient de faire autrement, toujours est il que je ne m'en sors pas.

    Je vous remercie donc de bien vouloir jeter un coup d'oeil à mon problème.
    Merci par avance et bonne fin de journée.

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    633
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 633
    Points : 877
    Points
    877
    Par défaut
    Bonjour

    A mon avis dans cette partie tu as inversé les colonne D et A car dans ton texte tu dis que les produits dans feuille 1 sont en colonne A
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Set wsh1 = Worksheets("f1")
    Set wsh2 = Worksheets("f2")
    LastLig1 = wsh1.Cells(Rows.Count, "D").End(xlUp).Row
    LastLig2 = wsh2.Cells(Rows.Count, "A").End(xlUp).Row
    tu fais des copies de feuille 1 vers feuille 2 ?

    enfin quelques erreurs qui font que je ne suis pas certain que le code que je te propose soit réellement ce que tu attend mais je l'ai bien commenté pour t'offrir une bonne base
    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
    Dim wsh1 As Worksheet, wsh1 As Worksheet
    Dim ligne As Long, LastLig1 As Long
    Dim C As Range
     
    Set wsh1 = Worksheets("f1")
    Set wsh2 = Worksheets("f2")
    LastLig1 = wsh1.Cells(Rows.Count, "A").End(xlUp).Row
     
    'Parcours la colonne 1 feuille 1
    For ligne = 2 To LastLig1 'définir quel est la ligne de départ
      'recherche produit dans la colonne E de la feuille 2
      Set C = wsh2.Columns("E").Find(wsh1.Cells(ligne, "A").Value, LookIn:=xlValues, lookat:=xlWhole)
      'si une occurence a été trouvé
      If Not C Is Nothing Then
        'si il y a une contrainte en colonne D
        If wsh2.Range(C.Address).Offset(0, -1) <> "" Then
          'copie contrainte de feuille 2 vers feuille 1
          wsh1.Cells(ligne, "E").Value = wsh2.Range(C.Address).Offset(0, -1)
        End If
      End If
    Next ligne
     
    Set wsh1 = Nothing
    Set wsh2 = Nothing
    Set C = Nothing
    Cordialement.

    N'oubliez pas de cliquer sur Résolu quand vous avez obtenu la réponse à votre question.
    Citation
    Il y a 10 sortes de gens au monde : ceux qui connaissent le binaire et les autres » - Anonyme
    Compter en octal, c’est comme compter en décimal, si on n’utilise pas ses pouces » - Tom Lehrer

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 27
    Points : 24
    Points
    24
    Par défaut
    Oui j'avais inversé 2 colonnes...
    merci zyhack, encore une fois.

    le code final:
    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
    Set wsh1 = Worksheets("f1")
    Set wsh2 = Worksheets("f2")
    LastLig = wsh1.Cells(Rows.Count, "A").End(xlUp).Row
     
    'Parcours la colonne 1 feuille 1
    For Ligne = 5 To LastLig 'définir quelle est la ligne de départ
      'recherche produit dans la colonne D de la feuille 2
      Set C = wsh2.Columns("D").Find(wsh1.Cells(Ligne, "A").Value, LookIn:=xlValues, lookat:=xlWhole)
      'si une occurence a été trouvé
      If Not C Is Nothing Then
        'si il y a une contrainte en colonne D
        If wsh2.Range(C.Address).Offset(0, 1) <> "" Then
          'copie contrainte de feuille 2 vers feuille 1
          wsh1.Cells(Ligne, "D").Value = wsh2.Range(C.Address).Offset(0, 1)
        End If
      End If
    Next Ligne
     
    Set wsh1 = Nothing
    Set wsh2 = Nothing
    Set C = Nothing

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

Discussions similaires

  1. Réponses: 22
    Dernier message: 22/05/2013, 17h52
  2. Réponses: 3
    Dernier message: 29/03/2011, 20h38
  3. Réponses: 3
    Dernier message: 27/08/2010, 13h01
  4. Réponses: 4
    Dernier message: 18/12/2009, 13h44
  5. Réponses: 11
    Dernier message: 26/04/2007, 10h40

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