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 :

Comparaison chaine de valeurs de feuilles différentes


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Responsable des études
    Inscrit en
    Mai 2018
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Mai 2018
    Messages : 10
    Points : 1
    Points
    1
    Par défaut Comparaison chaine de valeurs de feuilles différentes
    Bonjour,

    Je sollicite votre aide car je n´ai aucune connaissance en vba et malgré la maitrise d´autres langages et mes recherches sur le net je suis incapable de trouver une solution concrete a mon problema.

    Ce que je souhaite c´est réalisé une boucle qui comparerait une de la colonne E de la feuille 2 avec chaque ligne de la colonne B de la feuille 1 jusqu´a trouver la meme string. Si les deux sont égales, then la cellule de la colonne D de la feuille 2 pour ce numéro de ligne serait égale á la valeur de la cellule de la colonne A de la feuille 1. Si il n ´y a pas égalité alors on compare la ligne suivante de la feuille 1 si égalité il y a on attaque la meme boucle pour la ligne suivante de la feuille 1

    Plus littéralement, récupérer les numero de références dans la feuille 1 pour chaque produit présent dans la feuille 2 en comparant des noms de matériels

    voici un bout de code que j´ai écrit mais en faisant un mix entre plusieurs programmes de programmation avec VBA pour que ce soit compréhensible :

    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
    Sub Test()
     
      Dim numeroLigne1 As Integer
      Dim numeroLigne2 As Integer
     
     
     
    numeroLigne2 = 209
            For numeroLigne1 = 2 To 1778
     
                        If ThisWorkbook.Sheets("Feuille2").Range("E" & numeroLigne2).Value = ThisWorkbook.Sheets("Feuille1").Range("B" & numeroLigne1).Value Then
                            ThisWorkbook.Sheets("Feuille2").Range("D" & numeroLigne2) = ThisWorkbook.Sheets("Feuille1").Range("A" & numeroLigne1)
                            numeroLigne2 = numeroLigne2 + 1
                        Else
                            numeroLigne1 = numeroLigne1 + 1
                        End If
            Next numeroLigne1
        Next numeroLigne2
     
    End Sub
    Merci d´avance pour votre aide.

  2. #2
    Membre actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2015
    Messages
    142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2015
    Messages : 142
    Points : 236
    Points
    236
    Par défaut
    Bonjour,

    Est-ce qu'il ne manque pas un FOR dans votre code (à encadrer avec la balise CODE afin qu'il soit plus lisible) car vous avez 2 NEXT à la fin ?

    Si oui, pourquoi incrémenter les variables numeroLigne puisque la fonction FOR le fait d'elle même ?

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Responsable des études
    Inscrit en
    Mai 2018
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Mai 2018
    Messages : 10
    Points : 1
    Points
    1
    Par défaut
    Bonjour,

    tout d'abord merci pour votre réponse. En effet, je réincrémente les numéros de ligne parce que dans ma logique cela va dépendre de la condition. En effet si la comparaison est "vraie", on passe à au numéro de ligne 2 supérieur alors que si elle n'est pas respectée, on incrémente numéro de ligne 1 dans l'autre feuille jusqu'à que la condition soit respectée et ainsi de nuit. J'ai voulu mettre les "next" dans la condition mais cela n'a pas marché..

    En gros pour reformuler le problème, j'ai deux feuilles, 1 et 2. Dans la feuille 1 qui contient énormément de référence et une valeur unitaire correspondante à chacune et dans la feuille 2 j'ai quelques une de ces références (1600) mais qui n'ont pas leur valeur unitaire affectée. Ce que j'aimerais donc c'est une petite macro permettant pour chaque référence de la feuille 2 de trouver sa valeur unitaire dans la feuille 1

    MErci d'avance pour votre aide !

  4. #4
    Expert confirmé Avatar de BENNASR
    Homme Profil pro
    Responsable comptable & financier
    Inscrit en
    Décembre 2013
    Messages
    2 914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Responsable comptable & financier
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 2 914
    Points : 5 121
    Points
    5 121
    Par défaut
    bonjour
    une formule pour comparer deux colonne sans recourir à VBA et si tu insiste sur vba démarre l'enregistreur automatique et tu aura un code à adapter
    NB ; cette formule compare entre la colonne A et la colonne B ...tu peux l'adapter entre deux feuilles différentes
    BONNE CONTINUATION
    SI(NB.SI($A$1:$A1;A1)>NB.SI($B$1:$B$60;A1);A1;"")
    --------------------------------------------------------------*****----------------------------------------------------------------------------
    Bonne Continuation & Plein Succès
    Notre seul pouvoir véritable consiste à aider autrui avec modestie
    ______________________________________________________
    Pour dire merci, cliquer sur et quand la discussion est résolue, penser à cliquer sur le bouton

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Responsable des études
    Inscrit en
    Mai 2018
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Mai 2018
    Messages : 10
    Points : 1
    Points
    1
    Par défaut
    Bonjour,

    Tout d´abord merci pour votre réponse, en effet si je peux m´abstenir de faire du VBA c´est d´autant mieux.

    Prenons un exemple concret pour que j´y vois plus clair car je viens d´essayer et la formule ne marche pas :

    ref prix ref prix
    Veste 1500 Veste
    Pantalon 50 Chaussures
    Chaussures Polo
    Bonnet
    Polo 14

    Appelons les colonnes dans l´ordre A B C D

    Le but est de retrouver pour chaque ref de la colonne C son prix grace a la base de données colonne A et B. On peut voir que colonne A et B, chaque ref n´a pas forcement son prix affecté et que seulement quelques ref nous interssent dans la colonne C.

    Voici donc ce que ce serait la formule selon moi : =SI(NB.SI($C$2:$C2;C2)=NB.SI($A$2:$A$6;C2);B2;"")
    Néanmois une erreur de type #¿NOMBRE? est retournée.

    merci pour votre aide

  6. #6
    Nouveau Candidat au Club
    Homme Profil pro
    Responsable des études
    Inscrit en
    Mai 2018
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Mai 2018
    Messages : 10
    Points : 1
    Points
    1
    Par défaut
    Ci-dessous le code de la macro enregistré automatiquement :

    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
    Sub BuscaId2()
    '
    ' BuscaId2 Macro
    '
    ' Acceso directo: CTRL+w
    '
     
        Range("E231").Select
        Selection.Copy
        Sheets("Valor de productos").Select
        Cells.Find(What:="VARILLA CORRUGADA 1-1/4"" EN L 0,30 X 8,70 M", After:= _
            ActiveCell, LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, _
            SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False).Activate
        Range("A12185").Select
        Application.CutCopyMode = False
        Selection.Copy
        Sheets("ABC x Valorizacion").Select
        Range("D231").Select
        ActiveSheet.Paste
    End Sub
    L´idéal serait donc de rajouter une boucle for et réitérer la macro automatiquement, néanmoins comment remplacer la valeur á chercher dans le Find par le string de la valeur contenue dans la cellule E & numdeligne. De meme, comment remplacer Range("A12185") par la valeur contenue dans la colonne A et correspondant a la ligne a laquelle se situe la valeur égale a la cellule E & numdeligne et résultant donc de la fonction recherche.

    Merci encore pour votre aide

  7. #7
    Expert confirmé Avatar de BENNASR
    Homme Profil pro
    Responsable comptable & financier
    Inscrit en
    Décembre 2013
    Messages
    2 914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Responsable comptable & financier
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 2 914
    Points : 5 121
    Points
    5 121
    Par défaut
    Bonsoir
    J'arrive pas à comprendre et peut être c'est ma faute
    si tu as une base de données en feuille 2 et que en colonne E tu as des articles et en colonne F les prix
    et que dans la feuille 1 et en colonne B tu as des articles et que tu cherches à aller sur la base de donnée et trouver le prix correspondant et tu l'insère en colonne C de cette feuille 1 tu peux faire avec ç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
    29
    30
    Sub test()
    Dim plage As Range
    Dim i As Long
    Dim j As Long
    Dim shD As Worksheet
    Dim shR As Worksheet
    Set shD = Sheets("feuil1") ' la feuille destination
    Set shR = Sheets("feuil2") ' la feuille source
     
    i = shR.Range("E65536").End(xlUp).Row
    j = shD.Range("B65536").End(xlUp).Row
    '**********************************************
    Application.ScreenUpdating = False
    '**********************éfacer ancien données
    'éfacer ancien données de la feuille1
    shD.Activate
     shD.Range("C2:C" & j).Select
    Selection.ClearContents
    '**********chercher nv prix
      For j = 2 To j
       For i = 2 To i
        If shD.Cells(j, 2) = shR.Cells(i, 5) Then
        shD.Cells(j, 3) = shR.Cells(i, 6)
     End If
     Next i
    Next j
    '**************************************************
    Application.ScreenUpdating = True
     
    End Sub
    Si tu cherches autres chose tu n'as qu'à donner plus de détail et pourquoi pas un capture écran de ce que tu as comme départ et ce que tu cherches à faire
    BONNE CONTINUATION
    --------------------------------------------------------------*****----------------------------------------------------------------------------
    Bonne Continuation & Plein Succès
    Notre seul pouvoir véritable consiste à aider autrui avec modestie
    ______________________________________________________
    Pour dire merci, cliquer sur et quand la discussion est résolue, penser à cliquer sur le bouton

  8. #8
    Nouveau Candidat au Club
    Homme Profil pro
    Responsable des études
    Inscrit en
    Mai 2018
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Mai 2018
    Messages : 10
    Points : 1
    Points
    1
    Par défaut
    Merci pour votre réponse,

    En effet ce sera plus simple si vous visualisez le tableau.

    En pieces jointes, deux captures d´ecran. Le but est donc de remplir la colonne valor unidad pour chaque référence (Capture2) a partir des valor unidad se trouvant Capture1 pour la plupart des références (parfois il ne trouvera rien bien entendu).

    Merci encore pour votre aide.
    Images attachées Images attachées   

  9. #9
    Expert confirmé Avatar de BENNASR
    Homme Profil pro
    Responsable comptable & financier
    Inscrit en
    Décembre 2013
    Messages
    2 914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Responsable comptable & financier
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 2 914
    Points : 5 121
    Points
    5 121
    Par défaut
    bonsoir
    Merci de vérifier les noms des onglets je risque de faire une erreur
    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
    30
    31
    Sub test()
    Dim plage As Range
    Dim i As Long
    Dim j As Long
    Dim shD As Worksheet
    Dim shR As Worksheet
    Set shD = Sheets("ABC x valorisacion") ' la feuille destination
    Set shR = Sheets("Valor de productos") ' la feuille source
     
    i = shR.Range("A65536").End(xlUp).Row
    j = shD.Range("B65536").End(xlUp).Row
    '**********************************************
    Application.ScreenUpdating = False
    '**********************éfacer ancien données
    'éfacer ancien données de la feuille ABC x valorisacion si tu veux actualiser les données
     
    shD.Activate
     shD.Range("I2:I" & j).Select
    Selection.ClearContents
    '**********chercher nv prix
      For j = 2 To j
       For i = 2 To i
        If shD.Cells(j, 4) = shR.Cells(i, 1) Then
        shD.Cells(j, 9) = shR.Cells(i, 3)
     End If
     Next i
    Next j
    '**************************************************
    Application.ScreenUpdating = True
     
    End Sub
    --------------------------------------------------------------*****----------------------------------------------------------------------------
    Bonne Continuation & Plein Succès
    Notre seul pouvoir véritable consiste à aider autrui avec modestie
    ______________________________________________________
    Pour dire merci, cliquer sur et quand la discussion est résolue, penser à cliquer sur le bouton

  10. #10
    Nouveau Candidat au Club
    Homme Profil pro
    Responsable des études
    Inscrit en
    Mai 2018
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Mai 2018
    Messages : 10
    Points : 1
    Points
    1
    Par défaut
    Merci pour ce code qui au niveau de la logique de la structure me semble parfait. J´ai simplement modifié quelques détails par rapport aux colonnes.

    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
    30
    31
    32
    Sub test()
     
    Dim plage As Range
    Dim i As Long
    Dim j As Long
    Dim shD As Worksheet
    Dim shR As Worksheet
    Set shD = Sheets("ABC x Valorizacion") ' la feuille destination
    Set shR = Sheets("Valor de productos") ' la feuille source
    *
    i = shR.Range("A65536").End(xlUp).Row
    j = shD.Range("B65536").End(xlUp).Row
    '**********************************************
    Application.ScreenUpdating = False
    '**********************éfacer ancien données
    'éfacer ancien données de la feuille ABC x valorisacion si tu veux actualiser les données
    *
    shD.Activate
     shD.Range("I2:I" & j).Select
    Selection.ClearContents
    '**********chercher nv prix
      For j = 2 To j
       For i = 2 To i
        If shD.Cells(j, 5) = shR.Cells(i, 2) Then
        shD.Cells(j, 9) = shR.Cells(i, 3)
     End If
     Next i
    Next j
    '**************************************************
    Application.ScreenUpdating = True
    *
    End Sub
    Néanmoins j´ai une erreur de compilation : fonction ou sub n´a pas été définie.

    (désolé je suis vraiment novice dans ce langage de code)

    Merci

  11. #11
    Nouveau Candidat au Club
    Homme Profil pro
    Responsable des études
    Inscrit en
    Mai 2018
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Mai 2018
    Messages : 10
    Points : 1
    Points
    1
    Par défaut
    Je précise la comparaison se fait sur les noms de reference et non sur les números. D´ou le fait que ce sont des strings qui sont comparées. Peut-être l´erreur vient elle de la?

  12. #12
    Expert confirmé Avatar de BENNASR
    Homme Profil pro
    Responsable comptable & financier
    Inscrit en
    Décembre 2013
    Messages
    2 914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Responsable comptable & financier
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 2 914
    Points : 5 121
    Points
    5 121
    Par défaut
    La ligne 10 du code y a un étoilé a supprimer.. Aussi je crois autre etoile ligne 17 ou 18 à supprimer ... Si l erreur persiste, Je crois que joindre un fichier Excel comme exemple avec des données bidons est inévitable...
    --------------------------------------------------------------*****----------------------------------------------------------------------------
    Bonne Continuation & Plein Succès
    Notre seul pouvoir véritable consiste à aider autrui avec modestie
    ______________________________________________________
    Pour dire merci, cliquer sur et quand la discussion est résolue, penser à cliquer sur le bouton

  13. #13
    Nouveau Candidat au Club
    Homme Profil pro
    Responsable des études
    Inscrit en
    Mai 2018
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Mai 2018
    Messages : 10
    Points : 1
    Points
    1
    Par défaut
    Oui je les avais supprimé a posteriori pardon.

    En effet, attaché vous pourrez trouver le fichier. Merci!
    Fichiers attachés Fichiers attachés

  14. #14
    Nouveau Candidat au Club
    Homme Profil pro
    Responsable des études
    Inscrit en
    Mai 2018
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Mai 2018
    Messages : 10
    Points : 1
    Points
    1
    Par défaut
    Le bon fichier avec valor unidad supprimé ( la colonne que je souhaite remplir )
    Fichiers attachés Fichiers attachés

  15. #15
    Expert confirmé Avatar de BENNASR
    Homme Profil pro
    Responsable comptable & financier
    Inscrit en
    Décembre 2013
    Messages
    2 914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Responsable comptable & financier
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 2 914
    Points : 5 121
    Points
    5 121
    Par défaut
    Bonjour
    J'ai éviter de supprimer les données de la colonne I avant de rechercher les nouveaux prix et c'est à cause des cellules fusionnées...en présence de cellules fusionnées ça va supprimer autres colonnes
    Le code chez moi prend 59 secondes pour faire le travail et peut être c'est très long pour VBA mais travailler avec des boucles ça consomme du temps ... il y a une autre méthode avec les filtres élaborés mais ça dépasse mes connaissances de débutant en VBA
    J'ai mis un timer pour calculer le temps d'exécution
    J'ai constater que parfois il y a le sigle EURO et d'autres non ??
    et dans tous les cas ... BONNE CONTINUATION
    Fichiers attachés Fichiers attachés
    --------------------------------------------------------------*****----------------------------------------------------------------------------
    Bonne Continuation & Plein Succès
    Notre seul pouvoir véritable consiste à aider autrui avec modestie
    ______________________________________________________
    Pour dire merci, cliquer sur et quand la discussion est résolue, penser à cliquer sur le bouton

  16. #16
    Nouveau Candidat au Club
    Homme Profil pro
    Responsable des études
    Inscrit en
    Mai 2018
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Mai 2018
    Messages : 10
    Points : 1
    Points
    1
    Par défaut
    Super, le fichier et la marche nickel. Felicitations et merci

Discussions similaires

  1. Réponses: 1
    Dernier message: 13/04/2018, 10h03
  2. [XL-2010] Automatiser calcul pour toute cellule non vide- calcul avec des valeurs sur feuilles différentes
    Par Superdébutante dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 20/04/2016, 14h53
  3. Comparaison de valeur de ligne avec deux feuilles différentes
    Par charlix dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 30/07/2008, 15h54
  4. comparaison de cellules sur deux feuilles différentes
    Par scorpele dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 08/07/2008, 10h36
  5. Comparaisons de tableaux sur des feuilles différentes
    Par Olanor dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 03/07/2007, 07h32

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