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 :

Comparer deux listes avec conditions


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Elève-Ingénieur
    Inscrit en
    Mars 2018
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Elève-Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2018
    Messages : 15
    Par défaut Comparer deux listes avec conditions
    Bonjour à tous je suis nouvelle parmi vous!
    J'ai quelques notions sur vba à travers ce que j'ai appris sur le net, mais là je bloque
    Au fait, J'ai besoin d'un programme pour la comparaison du changement des prix de revient des articles acquis.J'ai deux feuille sur un classeur excel, une base standardisée, et la 2ème où je met les articles dernièrement acquis.
    Dans chacune on a les infos suivante
    Je veux parcourir les lignes de la feuille "data" (où je saisi les nouveaux articles) à partir du code article trouver le même article sur la 2eme feuille avec les données standardisées. Si le prix de revient est le même renvoyer "stable" dans la dernière colonne de l'article. Sinon comparer les 2 paramètres (prix d'achat et douane) et renvoyer en commentaire sur la dernière colonne le nom du paramètre qui change.

    Dans la capture jointe vous verrez à quoi ressemble la première ligne organisant les 2 feuilles

    J'ai essayé ce code mais ça me renvoie des erreurs.
    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 tester()
     
    Dim X As Integer, i As Integer, j As Integer, c As Range
    Dim TD As String
    Dim PA As String
    Dim code As Long
     
    X = Application.WorksheetFunction.CountA(Range("A:A"))
     
    For i = 2 To X
        code = Sheets("DATA").Cells(i, 1).Value
         Set c = Sheets("BASE").Columns(1).Find(code, LookIn = xlValues).Row
     
            If Sheets("BASE").Cells(c, 1).Value = Sheets("DATA").Cells(i, 1).Value & Sheets("BASE").Cells(c, 6).Value = Sheets("DATA").Cells(i, 6).Value Then
            Sheets("DATA").Cells(i, 7).Value = "stable"
            Else
            If Sheets("BASE").Cells(c, 1).Value = Sheets("DATA").Cells(i, 1).Value & Sheets("BASE").Cells(c, 6).Value <> Sheets("DATA").Cells(i, 6).Value Then
                If Sheets("BASE").Cells(c, 4).Value <> Sheets("DATA").Cells(i, 4).Value Then
                TD = " Taux de douane different "
                Else
                TD = " "
                If Sheets("BASE").Cells(c, 5).Value <> Sheets("DATA").Cells(i, 5).Value Then
                PA = " Prix d'achat different "
                Else
                TD = " "
            Sheets("DATA").Cells(i, 7) = TD & PA
            End If
     
    Next i
     
    End Sub
    Nom : Capture.PNG
Affichages : 163
Taille : 2,8 Ko

  2. #2
    Membre éprouvé
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2017
    Messages
    91
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Février 2017
    Messages : 91
    Par défaut
    Bonjour,

    Il te manque les END IF
    Je les ai ajouté sans analyser le code plus que cela

    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
    33
    34
     
    Sub tester()
     
    Dim X As Integer, i As Integer, j As Integer, c As Range
    Dim TD As String
    Dim PA As String
    Dim code As Long
     
    X = Application.WorksheetFunction.CountA(Range("A:A"))
     
    For i = 2 To X
        code = Sheets("DATA").Cells(i, 1).Value
         Set c = Sheets("BASE").Columns(1).Find(code, LookIn = xlValues).Row
     
            If Sheets("BASE").Cells(c, 1).Value = Sheets("DATA").Cells(i, 1).Value & Sheets("BASE").Cells(c, 6).Value = Sheets("DATA").Cells(i, 6).Value Then
                Sheets("DATA").Cells(i, 7).Value = "stable"
            Else
                If Sheets("BASE").Cells(c, 1).Value = Sheets("DATA").Cells(i, 1).Value & Sheets("BASE").Cells(c, 6).Value <> Sheets("DATA").Cells(i, 6).Value Then
                    If Sheets("BASE").Cells(c, 4).Value <> Sheets("DATA").Cells(i, 4).Value Then
                        TD = " Taux de douane different "
                    Else
                        TD = " "
                    End If
                    If Sheets("BASE").Cells(c, 5).Value <> Sheets("DATA").Cells(i, 5).Value Then
                        PA = " Prix d'achat different "
                    Else
                        TD = " "
                    End If
                    Sheets("DATA").Cells(i, 7) = TD & PA
                End If
            End If
    Next i
     
    End Sub

  3. #3
    Membre éprouvé
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2017
    Messages
    91
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Février 2017
    Messages : 91
    Par défaut
    Après une rapide analyse, voici le nouveau 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
    30
    31
    32
    33
    34
    35
    Sub tester()
     
    Dim X As Integer, i As Integer, j As Integer, c1 As Range, c As Long
    Dim TD As String
    Dim PA As String
    Dim code As Long
     
    X = Application.WorksheetFunction.CountA(Range("A:A"))
     
    For i = 2 To X
        code = Sheets("DATA").Cells(i, 1).Value
         Set c1 = Sheets("BASE").Columns(1).Find(code, LookIn:=xlValues)
         c = c1.Row
     
            If Sheets("BASE").Cells(c, 1).Value = Sheets("DATA").Cells(i, 1).Value & Sheets("BASE").Cells(c, 6).Value = Sheets("DATA").Cells(i, 6).Value Then
                Sheets("DATA").Cells(i, 7).Value = "stable"
            Else
                If Sheets("BASE").Cells(c, 1).Value = Sheets("DATA").Cells(i, 1).Value & Sheets("BASE").Cells(c, 6).Value <> Sheets("DATA").Cells(i, 6).Value Then
                    If Sheets("BASE").Cells(c, 4).Value <> Sheets("DATA").Cells(i, 4).Value Then
                        TD = " Taux de douane different "
                    Else
                        TD = " "
                    End If
                    If Sheets("BASE").Cells(c, 5).Value <> Sheets("DATA").Cells(i, 5).Value Then
                        PA = " Prix d'achat different "
                    Else
                        TD = " "
                    End If
                    Sheets("DATA").Cells(i, 7) = TD & PA
                End If
            End If
    Next i
     
    End Sub

  4. #4
    Membre averti
    Femme Profil pro
    Elève-Ingénieur
    Inscrit en
    Mars 2018
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Elève-Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2018
    Messages : 15
    Par défaut
    Merci de votre aide!
    j'ai rectifié mon code, et après des rectifications ça me retourne une erreur du type "objet requis sur la ligne 19

    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
    33
    34
    35
    36
    37
    Sub tester()
     
    Dim lastrow As Integer, i As Integer
    Dim cr As Range
    Dim cr1 As Long
    Dim TD As String, PA As String
    Dim CA As Variant
    Dim B As Worksheet
    Dim D As Worksheet
     
    Application.ScreenUpdating = False
     
    Set B = Worksheets("BASE")
    Set D = Worksheets("DATA")
     
    lastrow = D.Range("A1").End(xlDown).Row
    For i = 2 To lastrow
        CA = D.Cells(i, 1).Value
        Set cr1 = B.Range("A:A").Find(CA, LookIn:=xlValues)
        cr = cr1.Row
     
            If B.Cells(cr, 1).Value = D.Cells(i, 1).Value & B.Cells(cr, 6).Value = D.Cells(i, 6).Value Then
            D.Cells(i, 7).Value = "stable"
            Else
            If B.Cells(cr, 1).Value = D.Cells(i, 1).Value & B.Cells(cr, 6).Value <> D.Cells(i, 6).Value Then
                If B.Cells(cr, 4).Value <> D.Cells(i, 4).Value Then
                TD = " Taux de douane different "
                Else
                TD = " "
                End If
            D.Cells(i, 7) = TD & PA
            End If
        End If
     
    Next i
     
    End Sub

  5. #5
    Membre éprouvé
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2017
    Messages
    91
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Février 2017
    Messages : 91
    Par défaut
    Bonjour,

    C'est normal, il faut inverser cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Dim cr As Range
    Dim cr1 As Long
    pour que cela donne ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Dim cr1 As Range
    Dim cr As Long

  6. #6
    Membre averti
    Femme Profil pro
    Elève-Ingénieur
    Inscrit en
    Mars 2018
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Elève-Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2018
    Messages : 15
    Par défaut
    ça marche à merveille
    Merciiiii !

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

Discussions similaires

  1. Comparer deux listes
    Par timtim2007 dans le forum Prolog
    Réponses: 7
    Dernier message: 07/06/2019, 09h02
  2. Faire defiler deux listes avec une scroll bar
    Par mcdelay dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 23/05/2007, 14h54
  3. [C# 2.0] Comparer deux listes
    Par Rodie dans le forum Windows Forms
    Réponses: 4
    Dernier message: 01/08/2006, 00h40
  4. comparer deux fichiers avec une api windows
    Par sweetdreamer dans le forum Windows
    Réponses: 4
    Dernier message: 25/05/2006, 22h10
  5. [struts] Comparer deux variables avec <logic:equal>
    Par trax020 dans le forum Struts 1
    Réponses: 4
    Dernier message: 29/05/2005, 11h08

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