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 2 colonnes avec données identiques [XL-2003]


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    148
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 148
    Points : 57
    Points
    57
    Par défaut comparer 2 colonnes avec données identiques
    Bonjour à toutes les personnes qui ont la patience de répondre à nos questions


    voilà j'ai 2 colonnes qui ont les mêmes données disons colonnes D E
    je voudrai lorsque la donnée de la colonne D n'est pas la même que la colonne E les cellules A B C E descende ou monte d'une cellule pour que les données de meme type ce retrouve sur la même ligne
    ex D10 = UN et E10= DEUX le UN ce trouve en E9 il faudrai que A9 B9 C9 E9 descende d'une cellule pour que les deux UN ce retrouve en D10 E10

    Merci d'avance pour vos réponses

    Cordialement

  2. #2
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 906
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 906
    Points : 8 539
    Points
    8 539
    Par défaut
    Salut
    Essai avec ce 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
    Sub tri()
    Dim Tab_Sauv, Tab_Retour
    Dim iRow As Integer
    Dim iExact As Integer
     
     
    'On initialise les 2 Tableaux
    Tab_Sauv = Feuil1.Range("A1", Feuil1.Cells(Rows.Count, "E").End(xlUp)).Value
    Tab_Retour = Feuil1.Range("A1", Feuil1.Cells(Rows.Count, "E").End(xlUp)).Value
     
    'On Boucle sur le tableaux SAuv, celui ci ne sera pas modifié, on modifiera Retour
    'Pour ne pas perdre de données en route
    For iRow = 1 To UBound(Tab_Sauv, 1)
        'On recharche la valeur correspondante de la ligne irow de la colonne D dabns la colonne E
        For iExact = 1 To UBound(Tab_Sauv, 1)
            'On compare
            If Tab_Sauv(iRow, 4) = Tab_Sauv(iExact, 5) Then
                'correspondance trouvée, on modifie tab_retour
                Tab_Retour(iRow, 1) = Tab_Sauv(iExact, 1) 'colonne A
                Tab_Retour(iRow, 2) = Tab_Sauv(iExact, 2) 'B
                Tab_Retour(iRow, 3) = Tab_Sauv(iExact, 3) 'C
                Tab_Retour(iRow, 5) = Tab_Sauv(iExact, 5) 'E
                'On quite cette boucle pour tester le prochain iRow
                Exit For
            End If
        Next
    Next
     
    'On affiche notre tab_retour
    'Je le place a partir de la colonne G pour comparaison
     
    Feuil1.Range("G1").Resize(UBound(Tab_Retour, 1), UBound(Tab_Retour, 2)).Value = Tab_Retour
     
    End Sub
    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    148
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 148
    Points : 57
    Points
    57
    Par défaut
    Bonjour

    je joins le fichier ce sera plus simple
    les modules s'apellent
    IMPORT_DANS_MINI_111
    IMPORT_DANS_MINI_112_TRI
    IMPORT_DANS_MINI_130_FORMULE

    en premier appuie sur bouton Import
    1) import de la colonne C feuille "Achats" sur colonne D feuille "Minimum"

    2) comparer les colonnes D et J dans "Minimum"

    3) D4 n'est pas identique à J4 il faudrai faire descendre A3 B3 C3 J3 d'une cellule vers le bas

    j'ai essayé mais pas réussi

    Cordialement
    Fichiers attachés Fichiers attachés

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    148
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 148
    Points : 57
    Points
    57
    Par défaut
    Bonjour

    Une personne bienvaillante aurait elle une idée .Cela m'aiderai beaucoup pour mon travail, avant il y avait une personne qui s'occupée de la programmation vba mais elle est partie, d'ailleur les personnes qui ont chargé le fichier ont du voir que le code est affreux mais ne connaissant rien je me suis débrouillé avec les moyens du bord.

    merci d'avance de vos réponses ce serai vraiment apprécié

    Cordialement

  5. #5
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 906
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 906
    Points : 8 539
    Points
    8 539
    Par défaut
    Salut
    Alors pour le 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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    Sub Import_111()
     
    ' ÉFFACE COLONNE D
      Worksheets("Minimum").Range("D:D").ClearContents
     
    ' ECRIS DONNÉE FEUILLE "ACHATS" "C1 C600" DANS FEUILLE "MINIMUM" "D1"
    With Worksheets("Achats")
      .Range("C1", .Cells(Rows.Count, "C").End(xlUp)).Copy Worksheets("Minimum").Range("d1")
    End With
    ' APPELLE DES ROUTINES
     
      Call tri
      'Call formule_130
     
    End Sub
     
    Sub tri()
    Dim Tab_Sauv, Tab_Retour
    Dim iRow As Integer
    Dim iExact As Integer
     
     
    'On initialise les 2 Tableaux
    'Ici il faut partir de A1 jusqu'a J..
    Tab_Sauv = Feuil4.Range("A2", Feuil4.Cells(Rows.Count, "J").End(xlUp)).Value
    Tab_Retour = Feuil4.Range("A2", Feuil4.Cells(Rows.Count, "J").End(xlUp)).Value
     
    'On Boucle sur le tableaux SAuv, celui ci ne sera pas modifié, on modifiera Retour
    'Pour ne pas perdre de données en route
    For iRow = 1 To UBound(Tab_Sauv, 1)
        'On recharche la valeur correspondante de la ligne irow de la colonne D dabns la colonne E
        For iExact = 1 To UBound(Tab_Sauv, 1)
            'On compare
            If Tab_Sauv(iRow, 1) = Tab_Sauv(iExact, 7) Then
                'correspondance trouvée, on modifie tab_retour
                Tab_Retour(iRow, 1) = Tab_Sauv(iExact, 1) 'colonne A
                Tab_Retour(iRow, 2) = Tab_Sauv(iExact, 2) 'B
                Tab_Retour(iRow, 3) = Tab_Sauv(iExact, 3) 'C
                Tab_Retour(iRow, 10) = Tab_Sauv(iExact, 10) 'E
                'On quite cette boucle pour tester le prochain iRow
                Exit For
            End If
        Next
    Next
     
    'On affiche notre tab_retour
    'Je le place a partir de la colonne G pour comparaison
    Feuil4.Range("A2").Resize(UBound(Tab_Retour, 1), UBound(Tab_Retour, 2)).Value = Tab_Retour
     
    End Sub
    Essai avec ce code ci.

    Pour le fichier:
    Sur quelle version d'office travailles tu?

    Quelques conseils
    • Regroupe les functions et procédures dans quelques Modules
      Chaque Function ou procédure a son propre module, ça n'a aucun intérêt, il faut que tu regroupes tout ça dans 1, 2 ou 3 Modules pas plus, essai de faire un regroupement logique, je n'ai pas regardé le fonctionnement de toutes, donc à toi de faire des choix.
    • Précise la feuille sur laquelle tu travailles.
      Souvent la feuille de travaille n'est pas précisé, il est preferable lorqu'on travailles sur plusieurs feuilles de toujours precisé sur laquelle on veut agire, plusieurs méthodes
      Pour un code court:
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      With Worksheet("NomDeLaFeuilleSurLaquelleJeVeuxAgire")
         .Range("A1") = "Essai"
         .Cells(1,"A")..... ect
      End With
      Pour un code plus long:
      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
      Dim Ws_MaFeuille as WorkSheet, Ws_Import as worksheet
       
      'Init
      Set Ws_MaFeuille = Worksheet("NomDeLaFeuilleSurLaquelleJeVeuxAgire")
      Set Ws_Import = Worksheet("Import")
       
      Ws_MaFeuille.Range("A1") = Ws_Import.range("D5")
       
      '[...] Suite du code
       
      'Ce qui n’empêche pas d'utiliser With au besoin bien sur
       
      With Ws_MaFeuille 
         .Range("A1",.cells(rows.count,"A").end(xlup)).copy ws_import.Range("S1")
      End With
    • Ne pas utiliser .Select
      Il faut faire reference directement à la cellule ou plage de cellules
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      Ws_MaFeuille.Range("A1").Select
      Selection = "Essai"
      Ici il n'y a aucun interêt a activer la cellule A1, on veut juste changer sa valeur
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      Ws_MaFeuille.Range("A1") = "Essai"
      c'est plus court et bien moins risqué.


    Essai déjà de modifier tout ça dans ton fichier.

    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    148
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 148
    Points : 57
    Points
    57
    Par défaut
    Bonjour

    Lors d'un rajout d'une ligne dans la feuille "achat" la colonne A de la feuille "Minimum" ne suis pas le 444444 devrait ce trouver en A5 en A4 un 5 et en A3 une cellule vide en fait il faudrait qù'il s'ajoute une cellule vide en face du nouvel élément dans la colonne A de "minimum", Sinon tout marche correctement.
    Je te remercie de tes trés bonnes explications je devrais réussir à optimiser le code avec beaucoup de temps et patience....

    Cordialement
    Fichiers attachés Fichiers attachés

  7. #7
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 906
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 906
    Points : 8 539
    Points
    8 539
    Par défaut
    Salut
    Je comprend pas bien ce que tu cherche a faire.

    Dans ta feuille Minimum,
    les colonnes A et J sont déjà renseigné (par quoi?)
    Les valeurs en colonne A et J ne corresponde pas à leurs équivalents dans la feuille Achat.
    Pour etre plus claire, si on prend dans la feuille Achat la ligne 5
    • Colonne C (description) => ACÉTATE 2" X 29" ÉPAISSEUR 02 (ABC Emballuxe inc.)
    • Colonne R (Minimum) => 444444

    Si maintenant on regarde dans la feuille "Minimum", la ligne 4
    • Colonne J (Description) => ACÉTATE 40 MM X 240 MM ÉPAISSEUR 02 (ABC Emballuxe inc.)
    • Colonne A (Minimum) => 444444

    On a pas le même produit, donc forcement quand on va décaler les colonne B, C et D, les correspondance ne seront toujours pas les bonnes. Il faudrait reconstruire comme il faut ton tableau feuille "Minimum"

    Il faut que tu trouves le code qui rempli les colonnes A et J sur la feuille "Minimum", j'ai bien vu des bouts de code qui y font références, mais ça fait référence à une macro qui se nomme "Teste" avec 10 autres appelles à d'autre macro.

    A mon avis tu gagnerais ton temps en nous expliquant super clairement ce que tu cherches à faire de A à Z. Enfin c'est toi qui vois.

    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    148
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 148
    Points : 57
    Points
    57
    Par défaut
    Bonjour

    oui tu as tout à fait raison j'espère que mes explications seront claires

    feuille d'achat la colonne R = feuille Minimum colonne A
    feuille d'achat la colonne D = feuille Minimum colonne B
    feuille d'achat la colonne B = feuille Minimum colonne C
    feuille d'achat la colonne C = feuille Minimum colonne D

    la colonne C de la feuille d'achats represente une liste d'articles générée par un Programme qui s'appelle SAP et la colonne R de la feuille d'achats represente les "Minimum" que je veux garder.

    les articles de la colonne C de la feuille d'achat peuvent changer soit on rajoute un article soit on en enlève un donc la colonne R de la feuille d'achats ce retrouve décalée par rapport aux articles d'où ma feuille MInimum

    la macro affecter au bouton Import est dans le module "IMPORT_DANS_MINI_112_TRI"

    dans cette feuille (Minimum) en appuyant sur le bouton IMPORT J'éfface les colonnes BCD et je copie les colonnes D B C de la feuille d'achats dans la Colonne BCD de la feuille Minimum jusque là ça va

    ensuite je voudrai comparer dans la feuille "Minimum" Les colonnes D et J pour voir si les articles correspondent Ex: D2 = J2 si ce sont les mêmes articles on passe au suivant si D3 est Différent de J3 en prenant exemple sur la feuille D3 est une cellule vide représentant un article quelconque ajouté on s'aperçoit que l'article ACÉTATE 40 MM X 240 MM ÉPAISSEUR 02 (ABC Emballuxe inc.) qui ce trouvait en D3 ce retrouve en D4 donc pour que l'article ACÉTATE 40 MM X 240 MM ÉPAISSEUR 02 (ABC Emballuxe inc.)qui ce trouve en J3 ce retrouve en J4 il faudrai que la cellule A3 et J3 descende d'une cellule pour que D4 et J4 ce retrouve identique et en A3 une cellule vide en faite ajouter une cellule pour que les Minimum de la colonne A soit aligné de nouveau correctement par rapport aux articles

    Cordialement

  9. #9
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 906
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 906
    Points : 8 539
    Points
    8 539
    Par défaut
    Salut
    Hummm SAP...

    Donc si j'ai bien compris
    Tu fais une extraction de données sur SAP ce qui te donne ton tableau feuille Achats, de la colonne A à la colonne Q.
    Ensuite tu fais une gestion de stock en indiquant en colonne R, les quantités que tu souhaites garder en stock (Q mini)
    A l'extraction suivante, si des produits ont été rajoutés ou supprimés, les valeurs en colonne R ne correspondent plus...

    Donc la solution que tu as adopté, c'est de faire un 2eme tableau en te servant de la description du produit comme étant l'identificateur unique d'un produit (colonne J, feuille Minimum) et en lui associant la Q mini que tu souhaites (colonne A)
    Donc tu mets ton tableau feuille Achats à jour via SAP, puis tu copies les colonnes B, C et D de la feuille Achat dans la feuille Mini en colonnes C, D et B. Puis tu cherches à remettre les données les unes en face des autres pour garder tes Q mini devant les bons produits et par la suite mettre à jour ta colonne R de la feuille Achat!

    Conclusion:
    • Pourquoi copier 3 colonnes si tu n'en utilises qu'une seul pour faire l'identification de produits?
    • Ne serait il pas moins risqué de prendre en compte justement les 3 colonnes, afin d'identifier surement la ligne de donnée et ne pas utiliser uniquement la description du produit, qui pourrait ne pas être unique?
    • Donc dans ton code il ne faut pas décaler les valeurs contenues dans A, B, C et J, mais uniquement celles contenues dans A et J? non?

    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    148
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 148
    Points : 57
    Points
    57
    Par défaut
    Bonjour

    je te remercie pour tes réponses et ta patience
    Oui c'est exact la colonne A et J dans la feuille "minimum"
    d'ailleur la colonne "minimum" dans la feuille d'achat je la créer à l'importation et les quantités je les aient rajoutées manuellement .
    Si j'ai quelque chose à changer dans les minimums je le fais dans la feuille "minimum" et la colonne "A" de cette même feuille et recopier à la fin de l'importation dans la feuille d'achat.

    Cordialialement

  11. #11
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 906
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 906
    Points : 8 539
    Points
    8 539
    Par défaut
    Salut
    Essai ce code, je pense que ça devrait coller
    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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    Sub trier()
    Dim Tab_Sauv, Tab_Retour
    Dim iRow As Integer
    Dim iExact As Integer
     
     
    'On initialise les 2 Tableaux
    'Ici il faut partir de A1 jusqu'a J..
    Tab_Sauv = Feuil4.Range("A1", Feuil4.Cells(Rows.Count, "J").End(xlUp)).Value
    Tab_Retour = Feuil4.Range("A1", Feuil4.Cells(Rows.Count, "J").End(xlUp)).Value
     
    'On Boucle sur le tableaux SAuv, celui ci ne sera pas modifié, on modifiera Retour
    'Pour ne pas perdre de données en route
    For iRow = 2 To UBound(Tab_Sauv, 1)
        'On recharche la valeur correspondante de la ligne irow de la colonne D dans la colonne J
        For iExact = 2 To UBound(Tab_Sauv, 1)
            'On compare
            If (Tab_Sauv(iRow, 4) = Tab_Sauv(iExact, 10)) Then
                If (iRow <> iExact) Then 'On est deja sur la m^me ligne, on ne fait donc rien
                    'correspondance trouvée, on modifie tab_retour
                    Tab_Retour(iRow, 1) = Tab_Sauv(iExact, 1) 'colonne A
                    Tab_Retour(iRow, 10) = Tab_Sauv(iExact, 10) 'J
        '            Tab_Retour(iRow, 2) = Tab_Sauv(iExact, 2) 'B
        '            Tab_Retour(iRow, 3) = Tab_Sauv(iExact, 3) 'C
                End If
                'On quite cette boucle pour tester le prochain iRow
                GoTo suite
            End If
        Next
        'Si le code arrive ici, on a affaire avec un nouveau produit
        'On vide A et on renseigne J pour le prochain coup
        Tab_Retour(iRow, 1) = ""
        Tab_Retour(iRow, 10) = Tab_Sauv(iRow, 4)
    suite:
    Next
     
    'On affiche notre tab_retour
    'Je le place a partir de la colonne G pour comparaison
    Feuil4.Range("A1").Resize(UBound(Tab_Retour, 1), UBound(Tab_Retour, 2)).Value = Tab_Retour
     
    End Sub
    Sub trier()
    Dim Tab_Sauv, Tab_Retour
    Dim iRow As Integer
    Dim iExact As Integer
     
     
    'On initialise les 2 Tableaux
    'Ici il faut partir de A1 jusqu'a J..
    Tab_Sauv = Feuil4.Range("A1", Feuil4.Cells(Rows.Count, "J").End(xlUp)).Value
    Tab_Retour = Feuil4.Range("A1", Feuil4.Cells(Rows.Count, "J").End(xlUp)).Value
     
    'On Boucle sur le tableaux SAuv, celui ci ne sera pas modifié, on modifiera Retour
    'Pour ne pas perdre de données en route
    For iRow = 2 To UBound(Tab_Sauv, 1)
        'On recharche la valeur correspondante de la ligne irow de la colonne D dans la colonne J
        For iExact = 2 To UBound(Tab_Sauv, 1)
            'On compare
            If (Tab_Sauv(iRow, 4) = Tab_Sauv(iExact, 10)) Then
                If (iRow <> iExact) Then 'On est deja sur la m^me ligne, on ne fait donc rien
                    'correspondance trouvée, on modifie tab_retour
                    Tab_Retour(iRow, 1) = Tab_Sauv(iExact, 1) 'colonne A
                    Tab_Retour(iRow, 10) = Tab_Sauv(iExact, 10) 'J
        '            Tab_Retour(iRow, 2) = Tab_Sauv(iExact, 2) 'B
        '            Tab_Retour(iRow, 3) = Tab_Sauv(iExact, 3) 'C
                End If
                'On quite cette boucle pour tester le prochain iRow
                GoTo suite
            End If
        Next
        'Si le code arrive ici, on a affaire avec un nouveau produit
        'On vide A et on renseigne J pour le prochain coup
        Tab_Retour(iRow, 1) = ""
        Tab_Retour(iRow, 10) = Tab_Sauv(iRow, 4)
    suite:
    Next
     
    'On affiche notre tab_retour
    'Je le place a partir de la colonne G pour comparaison
    Feuil4.Range("A1").Resize(UBound(Tab_Retour, 1), UBound(Tab_Retour, 2)).Value = Tab_Retour
     
    End Sub
    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    148
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 148
    Points : 57
    Points
    57
    Par défaut
    Bonjour

    Le code fonctionne super bien, je te remercie avec un grand R pour ton aide

    juste, du moins je le pense sur cette ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Tab_Retour(iRow, 1) = ""
    cela efface la cellule en face du nouveau produit
    serait il possible d'ajouter une cellule vide en face du nouveau produit sinon en bas de la liste des minimums il manque 1 Nombre

    il me reste aussi à optimiser les autres modules avec les bons conseils que tu m'as donnés encore merci

    Cordialement

  13. #13
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 906
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 906
    Points : 8 539
    Points
    8 539
    Par défaut
    Salut
    En effet mon code était carrément faux
    En voila un plus adapté je pense

    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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    Sub trier()
    Dim Tab_Sauv, Tab_Retour
    Dim iRow As Integer
    Dim iExact As Integer
    Dim iRet As Integer
     
    'On initialise les 2 Tableaux
    'Ici il faut partir de A1 jusqu'a J..
    With Feuil4
        Tab_Sauv = .Range("A1", .Cells(.Rows.Count, "J").End(xlUp)).Value
        Tab_Retour = .Range("A1", .Cells(.Cells(.Rows.Count, "D").End(xlUp).Row, "J")).Value
    End With
     
    'On Boucle sur le tableaux SAuv, celui ci ne sera pas modifié, on modifiera Retour
    'Pour ne pas perdre de données en route
    iRet = 2
    For iRow = 2 To UBound(Tab_Sauv, 1)
        'On recharche la valeur correspondante de la ligne irow de la colonne D dans la colonne J
        For iExact = 2 To UBound(Tab_Sauv, 1)
            'On compare
            If IsEmpty(Tab_Sauv(iRow, 4)) Then GoTo suite
            If Tab_Sauv(iRow, 4) = Tab_Sauv(iExact, 10) Then
                'correspondance trouvée, on renseigne tab_retour
                Tab_Retour(iRet, 1) = Tab_Sauv(iExact, 1) 'colonne A
                Tab_Retour(iRet, 2) = Tab_Sauv(iRow, 2) 'B
                Tab_Retour(iRet, 3) = Tab_Sauv(iRow, 3) 'C
                Tab_Retour(iRet, 4) = Tab_Sauv(iRow, 4) 'D
                Tab_Retour(iRet, 10) = Tab_Sauv(iExact, 10) 'J
                iRet = iRet + 1 'On passe a la ligne suivante
                'On quite cette boucle pour tester le prochain iRow
                GoTo suite
            End If
        Next
        'Si le code arrive ici c'est que l'on a affaire a un nouveau produit
        'On rajoute donc une ligne dans tab_retour
        Tab_Retour(iRet, 1) = 5 '5 par defaut 'colonne A
        Tab_Retour(iRet, 2) = Tab_Sauv(iRow, 2) 'B
        Tab_Retour(iRet, 3) = Tab_Sauv(iRow, 3) 'C
        Tab_Retour(iRet, 4) = Tab_Sauv(iRow, 4) 'D
        Tab_Retour(iRet, 10) = Tab_Sauv(iRow, 4) 'J 'même valeur qu'en D
        iRet = iRet + 1 'On passe a la ligne suivante
     
    suite:
    Next
     
    'On affiche notre tab_retour
    'Je le place a partir de la colonne G pour comparaison
    Feuil4.Cells.ClearContents
    Feuil4.Range("A1").Resize(UBound(Tab_Retour, 1), UBound(Tab_Retour, 2)).Value = Tab_Retour
     
    End Sub
    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  14. #14
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    148
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 148
    Points : 57
    Points
    57
    Par défaut
    Bonjour

    Merci pour ta réponse
    cette ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If IsEmpty(Tab_Sauv(iRow, 4)) Then GoTo suite
    mais encore là je n'en suis pas sur. Lorsque je simule un nouveau produit par des cellules vides cette ligne efface les cellules vides Est-ce que c'est correct
    si les cellules ne sont pas vides impécable
    donc je te remerci beaucoup de ton aide précieuse

    cordialement

  15. #15
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 906
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 906
    Points : 8 539
    Points
    8 539
    Par défaut
    Salut
    Je n'ai pas tout saisi, mais lorsque tu veux simuler, pour un essai, un nouveau produit, tu dois seulement insérer des cellule dans les colonne B,C et D et garder le décalage en A et J. J'ai pourtant fait des essai avec des enregistrement en moins et en plus en même temps et ça fonctionne.
    Si tu n'y arrives pas, poste le fichier d'essai que tu utilises.
    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  16. #16
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    148
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 148
    Points : 57
    Points
    57
    Par défaut
    Bonjour

    Merci de ta réponse

    oui c'est exactement ça. Insérer des cellules dans les colonnes B,C et D seulement dans mon premier essai j'ai laissé ces cellules vides et rien ne se passer .Dans le deuxième essai j'ai écrit quelque chose dedans et là tout a fonctionné, donc j'ai pensé que cette ligne"If IsEmpty(Tab_Sauv(iRow, 4)) Then GoTo suite " devait effacer les cellules vide de mon premier essai .

    Lors d'un deuxième appui sur le bouton "import" le dernier chiffre de la colonne "minimum" s'efface mais seulement dans le cas d'un rajout d'un nouvel article je joins un fichier sur lequel j'ai déjà rajouté un article et ajouter aussi un bouton import en bas de liste de la feuille "Minimum" tu auras seulement à cliquer sur ce bouton pour voir l'effet donné

    Cordialement
    Fichiers attachés Fichiers attachés

  17. #17
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 906
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 906
    Points : 8 539
    Points
    8 539
    Par défaut
    Salut

    Pour la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If IsEmpty(Tab_Sauv(iRow, 4)) Then GoTo suite
    Effectivement elle a pour conséquence de supprimer les ligne ayant une description vide, ce qui à mon avis ne devrait jamais arrivé étant donné que tu utilises la description pour repérer tes lignes, si 2 lignes étaient vides, tu aurais au vu du code 2 lignes identiques, ce qui poserait problème.

    Tu travailles sur la description du produit en comparant colonne D et J, alors fait attention aux données que c'est colonne contiennent, regarde la derniere ligne, elle a un code article mais pas de description, donc il est logique de te retrouver avec un décalage par la suite, car cette ligne est ignoré.

    Je modifié une bricole dans le code, j'ai également remis le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    iRet = iRet + 1 'On passe a la ligne suivante
    que tu avais modifié en +2.
    Je n'ai pas vérifié si tu avais fais d'autre modif, enfin il y en a au moins une autre, c'est la valeur 5 par défaut en Q mini que tu as mis en 0, ce qui est très bien si cela correspond à ton besoin, enfin il serait peut être préférable de mettre 0 plutôt que "".

    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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    Sub verifier()
    Dim Tab_Sauv, Tab_Retour
    Dim iRow As Integer
    Dim iExact As Integer
    Dim iRet As Integer
     
    'On initialise les 2 Tableaux
    'Ici il faut partir de A1 jusqu'a J..
    With Feuil4
        'Tab_Sauv = .Range("A1", .Cells(.Rows.Count, "J").End(xlUp)).Value
        Tab_Retour = .Range("A1", .Cells(.Cells(.Rows.Count, "D").End(xlUp).Row, "J")).Value
        Tab_Sauv = Tab_Retour
    End With
     
    'On Boucle sur le tableaux SAuv, celui ci ne sera pas modifié, on modifiera Retour
    'Pour ne pas perdre de données en route
    iRet = 2
    For iRow = 2 To UBound(Tab_Sauv, 1)
        'On recharche la valeur correspondante de la ligne irow de la colonne D dans la colonne J
        For iExact = 2 To UBound(Tab_Sauv, 1)
            'On compare
            If IsEmpty(Tab_Sauv(iRow, 4)) Then GoTo suite
            If Tab_Sauv(iRow, 4) = Tab_Sauv(iExact, 10) Then
                'correspondance trouvée, on renseigne tab_retour
                Tab_Retour(iRet, 1) = Tab_Sauv(iExact, 1) 'colonne A
                Tab_Retour(iRet, 2) = Tab_Sauv(iRow, 2) 'B
                Tab_Retour(iRet, 3) = Tab_Sauv(iRow, 3) 'C
                Tab_Retour(iRet, 4) = Tab_Sauv(iRow, 4) 'D
                Tab_Retour(iRet, 10) = Tab_Sauv(iExact, 10) 'J
                iRet = iRet + 1 'On passe a la ligne suivante
                'On quite cette boucle pour tester le prochain iRow
                GoTo suite
            End If
        Next
        'Si le code arrive ici c'est que l'on a affaire a un nouveau produit
        'On rajoute donc une ligne dans tab_retour
        Tab_Retour(iRet, 1) = "" '0 par defaut 'colonne A
        Tab_Retour(iRet, 2) = Tab_Sauv(iRow, 2) 'B
        Tab_Retour(iRet, 3) = Tab_Sauv(iRow, 3) 'C
        Tab_Retour(iRet, 4) = Tab_Sauv(iRow, 4) 'D
        Tab_Retour(iRet, 10) = Tab_Sauv(iRow, 4) 'J 'même valeur qu'en D
        iRet = iRet + 1 'On passe a la ligne suivante
     
     
    suite:
    Next
     
    'On affiche notre tab_retour
    'Je le place a partir de la colonne G pour comparaison
    Feuil4.Cells.ClearContents
    Feuil4.Range("A1").Resize(UBound(Tab_Retour, 1), UBound(Tab_Retour, 2)).Value = Tab_Retour
     
    End Sub
    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  18. #18
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    148
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 148
    Points : 57
    Points
    57
    Par défaut
    Bonsoir

    tout d'abord je voudrais te remercier pour l'aide que tu m'as apporté

    le code marche trés bien

    pour le dernier chiffre qui s'éfface dans les minimums je vais mettre une formule qui rempliras les descriptions donc le dernier chiffre ne s'éffacera plus

    encore Merci pour ton aide

    Cordialement

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

Discussions similaires

  1. [XL-2003] Index et Equiv avec données identiques
    Par chrystobale dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 07/09/2011, 18h22
  2. [XL-2003] comparer 2 colonnes avece VBA
    Par breiz56 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 18/07/2010, 20h25
  3. Transfer de colonne avec données a une autre table
    Par clarkent dans le forum Langage SQL
    Réponses: 5
    Dernier message: 17/11/2009, 15h37
  4. Réponses: 4
    Dernier message: 03/11/2008, 13h41
  5. Réponses: 2
    Dernier message: 11/12/2007, 22h23

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