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 valeur entre 2 colonnes [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Inscrit en
    Février 2011
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 60
    Points : 44
    Points
    44
    Par défaut recherche valeur entre 2 colonnes
    Bonjour à tous
    je galère pour rechercher la même valeur présente dans 2 colonnes (pour ça j'y arrive. là ou ça se complique pour moi c'est qu'en face de ces valeurs j'en ai d'autre et je voudrais faire une boucle de calcul que je n'arrive pas a ecrire.
    Je joint un petit fichier afin de clarifier ma demande.
    Merci d'avance à celui ou ceux qui pourrons m'orienter vers une solution
    Fichiers attachés Fichiers attachés

  2. #2
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 203
    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 203
    Points : 14 354
    Points
    14 354
    Par défaut
    Bonjour,

    Je ne comprends pas...
    2) Tant que la difference des qtés des 2 tableau <>0 je reste sur cellule A4
    Dans l'exemple, tu risques d'y rester longtemps. Est-ce que tu peux expliquer un peu plus s'il te plait ?
    Cordialement.

    Daniel

    La plus perdue de toutes les journées est celle où l'on n'a pas ri. Chamfort

  3. #3
    Membre du Club
    Inscrit en
    Février 2011
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 60
    Points : 44
    Points
    44
    Par défaut des precisions
    les qté du tableau 1 sont figées alors que celle du tableau 2 evolue. quand je fais Qté 1 - qté 2 tant que j'ai pas 0 je rste sur la cellule A4 si qté=0 je passe en A5 et recommence
    Merci de t'interrser à mon pb

  4. #4
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 203
    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 203
    Points : 14 354
    Points
    14 354
    Par défaut
    Oui, mais comment les fait-on évoluer et quid si une référence de tableau 1 ne figure pas dans Tableau 2 ?
    Cordialement.

    Daniel

    La plus perdue de toutes les journées est celle où l'on n'a pas ri. Chamfort

  5. #5
    Membre du Club
    Inscrit en
    Février 2011
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 60
    Points : 44
    Points
    44
    Par défaut
    Je t'explique précisement:
    tableau 1 des reférence et des qté figés
    tableau 2 evolutif tant sur les references que sur les qte. En effet dans mon fichier le tableau 2 recupere des données d'une machine. Chaque fois qu'une reference est fabriqué, la qté correspondante augmente. Si c'est un nouvelle reference elle apparait egalement dans ce tableau2 avec sa qté fabriqué.
    Il ne peut pas y avoir d'autres reference dans tableau 2 que celle figés dans tableau 1 (voir mon nouveau fichier joint car le premier n'était pas representatif).
    Fichiers attachés Fichiers attachés

  6. #6
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 203
    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 203
    Points : 14 354
    Points
    14 354
    Par défaut
    La macro suivante balaie la colonne A et s'arrête en sélectionnant la première référence dont la quantité est différente :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub test()
        Dim c As Range, Tableau2 As Range
        With Sheets("Feuil2")
            Set Tableau2 = .Range(.[E4], .Cells(.Rows.Count, 6).End(xlUp))
            For Each c In .Range(.[A4], .Cells(.Rows.Count, 1).End(xlUp))
                If Not Application.IsNA(Application.VLookup(c.Value, Tableau2, 2, 0)) Then
                    If c.Offset(, 1) <> Application.VLookup(c.Value, Tableau2, 2, 0) Then
                        c.Select
                        Exit Sub
                    End If
                End If
            Next c
        End With
    End Sub
    Cordialement.

    Daniel

    La plus perdue de toutes les journées est celle où l'on n'a pas ri. Chamfort

  7. #7
    Membre du Club
    Inscrit en
    Février 2011
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 60
    Points : 44
    Points
    44
    Par défaut
    Bonjour Daniel,
    merci pour ta macro qui fonctionne bien mais ne répond pas tout à fait a ce que je cherche.
    1) Rechercher dans tableau 2 la 1ere reference du tableau1
    2) si cette reference est présente, faire qté 2- qté 1
    3) si resultat = 0 faire la même chose pour la 2eme référence du tableau1

  8. #8
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 203
    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 203
    Points : 14 354
    Points
    14 354
    Par défaut
    Bonjour,
    le résultat de la soustraction est dans le tableau 1 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub test()
        Dim c As Range, Tableau2 As Range
        With Sheets("Feuil2")
            Set Tableau2 = .Range(.[E4], .Cells(.Rows.Count, 6).End(xlUp))
            For Each c In .Range(.[A4], .Cells(.Rows.Count, 1).End(xlUp))
                If Not Application.IsNA(Application.VLookup(c.Value, Tableau2, 2, 0)) Then
                    c.Offset(, 1) = c.Offset(, 1) - Application.VLookup(c.Value, Tableau2, 2, 0)
                    If c.Offset(, 1) <> 0 Then Exit Sub
                End If
            Next c
        End With
    End Sub
    Cordialement.

    Daniel

    La plus perdue de toutes les journées est celle où l'on n'a pas ri. Chamfort

  9. #9
    Membre du Club
    Inscrit en
    Février 2011
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 60
    Points : 44
    Points
    44
    Par défaut
    ça marche effectivement bien pour la première reférence du tableau1, c'est toujours la qté1 qui est défalquée. Comment mettre en oeuvre ma condition:

    si Qté1 <= 0 alors faire la même chose pour la seconde reférence du tableau 1 et ainsi de suite pour chaque référence du tableau 1.

  10. #10
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 203
    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 203
    Points : 14 354
    Points
    14 354
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub test()
        Dim c As Range, Tableau2 As Range
        With Sheets("Feuil2")
            Set Tableau2 = .Range(.[E4], .Cells(.Rows.Count, 6).End(xlUp))
            For Each c In .Range(.[A4], .Cells(.Rows.Count, 1).End(xlUp))
                If Not Application.IsNA(Application.VLookup(c.Value, Tableau2, 2, 0)) Then
                    c.Offset(, 1) = c.Offset(, 1) - Application.VLookup(c.Value, Tableau2, 2, 0)
                    If c.Offset(, 1) > 0 Then Exit Sub
                End If
            Next c
        End With
    End Sub
    Cordialement.

    Daniel

    La plus perdue de toutes les journées est celle où l'on n'a pas ri. Chamfort

  11. #11
    Membre du Club
    Inscrit en
    Février 2011
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 60
    Points : 44
    Points
    44
    Par défaut
    encore little probleme
    qd Qt1 <= 0 faire la boucle pour la reference 2 et la Qté2 mais la Qté1 ne doit plus bouger

    je suis désolé d'abuser de ton temps

  12. #12
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 203
    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 203
    Points : 14 354
    Points
    14 354
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub test()
        Dim c As Range, Tableau2 As Range
        With Sheets("Feuil2")
            Set Tableau2 = .Range(.[E4], .Cells(.Rows.Count, 6).End(xlUp))
            For Each c In .Range(.[A4], .Cells(.Rows.Count, 1).End(xlUp))
                If Not Application.IsNA(Application.VLookup(c.Value, Tableau2, 2, 0)) Then
                    If c.Offset(, 1) <> Application.VLookup(c.Value, Tableau2, 2, 0) Then
                        c.Offset(, 1) = c.Offset(, 1) - Application.VLookup(c.Value, Tableau2, 2, 0)
                    End If
                    If c.Offset(, 1) > 0 Then Exit Sub
                End If
            Next c
        End With
    End Sub
    Par contre, si qté2 évolue, on recommence les soustractions.
    Cordialement.

    Daniel

    La plus perdue de toutes les journées est celle où l'on n'a pas ri. Chamfort

  13. #13
    Futur Membre du Club
    Femme Profil pro
    Inscrit en
    Mars 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mars 2012
    Messages : 2
    Points : 5
    Points
    5
    Par défaut
    la Qté de la premiere reference bloque sans jamais devenir <= 0 et on ne passe plus à la Qté de la seconde reference

  14. #14
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 203
    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 203
    Points : 14 354
    Points
    14 354
    Par défaut
    Je n'ai sans doute pas compris la logique.
    1ère exécution :
    référence : 930k52, qté1 = qté1 - qté2 = 63
    qté1 > 0 => fin macro
    2e exécution de la macro :
    référence : 930k52, qté1 = qté1 - qté2 = -30
    qté1 <= 0, on passe à la référence suivante :
    g 2563 pas d'équivalent, on passe à la référence suivante :
    25186 qté1 = qté1 - qté2 = 135
    qté1 > 0 => fin macro
    Cordialement.

    Daniel

    La plus perdue de toutes les journées est celle où l'on n'a pas ri. Chamfort

  15. #15
    Membre du Club
    Inscrit en
    Février 2011
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 60
    Points : 44
    Points
    44
    Par défaut
    La logique est tout a fait bonne mais
    quand 930k52=-30 et que tu passe à la reference suivante 930k52 doit rester à -30

  16. #16
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 203
    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 203
    Points : 14 354
    Points
    14 354
    Par défaut
    Quel âne ! Essaie :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub test()
        Dim c As Range, Tableau2 As Range
        With Sheets("Feuil2")
            Set Tableau2 = .Range(.[E4], .Cells(.Rows.Count, 6).End(xlUp))
            For Each c In .Range(.[A4], .Cells(.Rows.Count, 1).End(xlUp))
                If Not Application.IsNA(Application.VLookup(c.Value, Tableau2, 2, 0)) Then
                    If c.Offset(, 1) > 0 Then
                        c.Offset(, 1) = c.Offset(, 1) - Application.VLookup(c.Value, Tableau2, 2, 0)
                    End If
                    If c.Offset(, 1) > 0 Then Exit Sub
                End If
            Next c
        End With
    End Sub
    Cordialement.

    Daniel

    La plus perdue de toutes les journées est celle où l'on n'a pas ri. Chamfort

  17. #17
    Membre du Club
    Inscrit en
    Février 2011
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 60
    Points : 44
    Points
    44
    Par défaut
    Champion du monde !!!!!
    ça fonctionne aux petits oignons
    Merci Daniel et bonne soirée

  18. #18
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 203
    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 203
    Points : 14 354
    Points
    14 354
    Par défaut
    ... et pour progresser, si qté2 = 0 :

    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
    Sub test()
    Dim c As Range, Tableau2 As Range
    With Sheets("Feuil2")
    Set Tableau2 = .Range(.[E4], .Cells(.Rows.Count, 6).End(xlUp))
    For Each c In .Range(.[A4], .Cells(.Rows.Count, 1).End(xlUp))
    If Not Application.IsNA(Application.VLookup(c.Value, Tableau2, 2, 0)) Then
    If Application.VLookup(c.Value, Tableau2, 2, 0) <> 0 Then
    If c.Offset(, 1) > 0 Then
    c.Offset(, 1) = c.Offset(, 1) - Application.VLookup(c.Value, Tableau2, 2, 0)
    End If
    If c.Offset(, 1) > 0 Then Exit Sub
    End If
    End If
    Next c
    End With
    End Sub
    Cordialement.

    Daniel

    La plus perdue de toutes les journées est celle où l'on n'a pas ri. Chamfort

  19. #19
    Membre du Club
    Inscrit en
    Février 2011
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 60
    Points : 44
    Points
    44
    Par défaut
    Formidable!!!
    il me reste un problème a résoudre pour affiner mon fichier.
    Les Qté2 sont évolutive par contre les qté1 sont figé.
    Qd la macro faiit Qté1-Qté2 le souhaiterait que quand 0 est atteint, le reste se défalque sur la prochaine Qté1 de la m^me référence
    Ex:
    Qté1 = 100 (fixe)et Qté2 = 150(evolutif)
    actuellement
    1ere RefA : 100-Qté2= -50
    2eme RefA : 100

    je voudrais

    1ere RefA : 100-Qté2 qd on arrive à =0
    les -50 se défalquerais sur la prochaine Qté1 de la refA
    2eme RefA : 100-50 = 50

  20. #20
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 203
    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 203
    Points : 14 354
    Points
    14 354
    Par défaut
    Ça change malheureusement toute la logique de la macro (ou presque...). Et est-ce qu'on s'arrête dans ce cas ? Est-ce qu'il peut y avoir x fois la même référence ?
    Cordialement.

    Daniel

    La plus perdue de toutes les journées est celle où l'on n'a pas ri. Chamfort

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [XL-2003] Recherche valeurs d'une colonnes dans une autre colonne
    Par Plc8919 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 12/01/2013, 16h53
  2. [XL-2007] Fonction qui recherche valeur d'une colonne
    Par nicolaz18 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 19/04/2012, 17h51
  3. Recherche similitudes entre 2 colonnes
    Par hassenssas dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 28/05/2008, 21h20
  4. Recherche Valeur dans plusieurs colonnes
    Par grec38 dans le forum Excel
    Réponses: 14
    Dernier message: 08/04/2008, 14h37
  5. Recherche valeurs d'une colonne
    Par Joachim49 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 06/12/2007, 13h59

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