Comparer deux colonnes

Bonjour,

Alors tout d'abord je suis débutante sur VBA.

Pour un projet, j'ai besoin de comparer une ligne excel avec une colonne (chacune sur un onglet excel différent) dedans il y a des codes qui correspondent à des produits.

La colonne reprend la liste entière des codes à la façon d'un catalogue, on y retrouve donc le prix unitaire du produit.

Dans la ligne, on rentre le code et dans la cellule on a la quantité de produit (la quantité est défini par des formules).

J'ai besoin de comparer cette lignes et cette colonne pour mettre la quantité de produit obtenue dans l'onglet excel contenant le catalogue.

J'espère avoir été clair... Pour le moment j'arrive à comparer une case précise avec la colonne de la manière suivante :

Sub essai_1()

Dim tache As String

Dim num As Variant

Dim col As Variant

Dim n As Variant

tache = Worksheets("feuil1").Range("E1").Value

num = Worksheets("feuil1").Range("E2").Value

For n = 5 To 5000

a = Worksheets("catalogue").Range("A" & n).Value

If a = tache Then

Worksheets("catalogue").Range("I" & n).Value = num

End If

Next

End Sub

Mais comme ma ligne est assez longue... J'ai essayé de comparer deux boucles mais message d'erreur. Est ce que quelqu'un pourrait m'aider svp ?

Merci d'avance

Bonjour,

Mais comme ma ligne est assez longue... J'ai essayé de comparer deux boucles mais message d'erreur.

??? j'ai pas tout compris

une ligne , c'est un produit

chaque colonne de cette ligne , c'est une info sur ce produit

@+JP

Désolé ^^ pour faire simple :

Sur la feuil1 ; j'ai ma ligne de E4 à E20 où je dois indiquer mon code produit : en dessous de chaque code produit on a la quantité (rang F4 à F20).

Sur la feuille catalogue : j'ai la liste de tous les produits avec en colonne A l'ensemble des codes produits.

Je cherche, quand j'ai correspondance entre le deux, que la quantité propre au code produit apparaisse dans le catalogue

Bonjour,

Une copie anonymisée serait bienvenue

P.

Bonjour,

dans la ligne E4 : E20 tu as style des en tête avec code produit...

donc tu parcours toutes cases avec le codes produit :

For ColProd = 4 To 20 ... Next ColProd

pour chaque code produit :

NumProd = Sheets("Feuil1").Cells(

!!! STOP !!!

j'écris la réponse en lisant ta question , et bêtement ... "dans la ligne E4 : E20 "

E4 : E20 c'est une colonne !!??

et tu continue avec ... "en dessous .. F4 : F20" !!??

capture

explique...

@+JP

Oups pas vu qu'on pouvait mettre des pj

J'ai mis une version simplifiée de mon tableau : beaucoup d'onglet sur l'original.

Sur la feuille 1 : les quantités sont calculés, pas besoin de les rentrer. Je change juste le code.

J'aimerais que les quantités puissent se mettre automatiquement dans l'onglet catalogue

9exemple.xlsm (15.47 Ko)

Bonjour,

capture

Sur la feuil1 ; j'ai ma ligne de E4 à E20 où je dois indiquer mon code produit : en dessous de chaque code produit on a la quantité (rang F4 à F20)

christelle1994 , arrête de faire des blagues

non, bon ok je suis pas du tout claire x) j'avais pas vu qu'on pouvait mettre un pj.

Donc ne pas prendre en compte mes messages précédents avec un explication vaseuse ^^' le fichier excel est plus simple à comprendre je dirai

Les explications + moi = rien de bon ^^' (sorry !!!!!!)

Bonjour,

bon , je reprends...

dans la ligne B3 : E3 tu as style des en tête avec code produit...

donc tu parcours toutes les cases avec le codes produit :

la colonne "E" c'est la colonne n°5

For ColProd = 2 To 5 ... Next ColProd

pour chaque code produit :

NumProd = Sheets("Feuil1").Cells(3,ColProd).Value

tu cherches verticalement dans la colonne "A" de l'onglet "catalogue" ton code produit

For LigProd = 2 to 21

Next LigProd

quand on trouve le code produit ,on note que le code produit est à la ligne LigProd

il ne reste que a copier la quantité :

Sheets("catalogue").Cells(LigProd,4).Value = Sheets("Feuil1").Cells(4,ColProd).Value

et on sort de la boucle avec Exit For

pour le code complet :

Sub Test()
    For ColProd = 2 To 5
        NumProd = Sheets("Feuil1").Cells(3, ColProd).Value
        For LigProd = 2 To 21
            If Sheets("catalogue").Cells(LigProd, 1).Value = NumProd Then
                Sheets("catalogue").Cells(LigProd, 4).Value = Sheets("Feuil1").Cells(4, ColProd).Value
                Exit For
            End If
        Next LigProd
    Next ColProd
End Sub

@+JP

non, bon ok je suis pas du tout claire x) j'avais pas vu qu'on pouvait mettre un pj.

Donc ne pas prendre en compte mes messages précédents avec un explication vaseuse ^^' le fichier excel est plus simple à comprendre je dirai

Les explications + moi = rien de bon ^^' (sorry !!!!!!)

Le VBA est il VRAIMENT nécessaire ???

P.

Bonjour,

c'est clair que non

mais çà fait réfléchir

@+JP

Bonjour,

@Patrick1957 , poste tes formules stp

@+JP

Alors merci pour vos réponses : mjpmjp je me retrouve avec une erreur d'exécution 13. Dans les essais que j'avais réalisé de venir ici j'obtenais toujours ce message d'erreur...

Sinon pour répondre à la question : alors la version que je vous ai envoyé est très simplifié. Le fichier de base est bien plus lourd : je dois avoir 40 code produits à rentrer dans la feuil1 et 500 codes produits de référence dans le catalogue. Sinon les quantités qui apparaissent feuil1 sont calculés avec des formules etc... ce n'est pas moi qui les rentre

Merci en tout cas pour votre aide !

Bonjour,

@Patrick1957 , poste tes formules stp

@+JP

Bonjour,

c'était juste une question..

je ne suis pas formuliste

je touche un peu au vba mais parfois on cherche compliqué alors que les fonctions de base suffisent

P.

Bonjour,

j'ai rectifié le code , en fait il y avait une faute de frappe

LigProg à la place de LigProd !!!

maintenant çà fonctionne

Sub Test()
    For ColProd = 2 To 5
        NumProd = Sheets("Feuil1").Cells(3, ColProd).Value
        For LigProd = 2 To 21
            If Sheets("catalogue").Cells(LigProd, 1).Value = NumProd Then
                Sheets("catalogue").Cells(LigProd, 4).Value = Sheets("Feuil1").Cells(4, ColProd).Value
                Exit For
            End If
        Next LigProd
    Next ColProd
End Sub

@+JP

Bonjour,

comme tu expliques que le tableau est plus grand,

voila le code modifié qui s'adapte au nombre de colonne et de ligne

Sub Test()
    'LigneFin = Cells(Rows.Count, 1).End(xlUp).Row
    LigneFin = Sheets("catalogue").Cells(1, 1).End(xlDown).Row
    'ColonFin = Sheets("Feuil1").Cells(3, Column.Count).End(xlToLeft).Column
    ColonFin = Sheets("Feuil1").Cells(3, 1).End(xlToRight).Column
'-----
    For ColProd = 2 To ColonFin
        NumProd = Sheets("Feuil1").Cells(3, ColProd).Value
        For LigProd = 2 To LigneFin
            If Sheets("catalogue").Cells(LigProd, 1).Value = NumProd Then
                Sheets("catalogue").Cells(LigProd, 4).Value = Sheets("Feuil1").Cells(4, ColProd).Value
                Exit For
            End If
        Next LigProd
    Next ColProd
End Sub

@+JP

Merci beaucoup !!!!!

Il me manquait pas grand chose parmi mes essais infructueux en plus ^^'. Vraiment gentil de m'avoir aidé en tout cas

Bonjour,

pour répondre (encore ) à Patrick1957 ,

le VBA n'est pas obligatoire ...

voila une formule à mettre en "D2" dans "catalogue" et à recopier jusqu'à "D21"

=SIERREUR(INDIRECT("Feuil1!"&CAR(64+EQUIV(A2;Feuil1!$A$4:$E$4;0))&5);0)

cette formule est perfectible parce que quand je rajoute un code produit en "F4" dans "Feuil1" ,

Feuil1!$A$4:$E$4 ne bouge pas en Feuil1!$A$4:$F$4

@+JP

Bonjour,

pour finir, voila une formule à mettre en "D2" dans "catalogue" et à recopier jusqu'à "D21"

=SIERREUR(INDIRECT("Feuil1!"&CAR(64+EQUIV(A2;xlTabQT[#En-têtes];0))&5);0)

cette formule fonctionne avec la transformation en tableau dynamique de la plage A4:E5 nommée xlTabQT

capture

le gros avantage , c'est que actuellement , la QT de la ligne 21 pour T.20 est 0

capture2

et que si on ajoute un produit et une QT en F4:F5 ,

capture3

le tableau s'agrandit automatiquement et la QT de T.20 est répercutée automatiquement aussi...

capture4

pour créer un tableau dynamique : xlTabQT ,

j'ai sélectionné A4:E5 dans Feuil1

dans le menu : Insérer > Tableau > avec en têtes

fichier v2

@+JP

Alors encore merci mais il y a un truc que je ne comprend pas : J'utilise le code une première fois, parfait tout marche !!! J'essaye de l'utiliser une 2ème fois avec un autre onglet. Je lance un nouveau code. Là : ça me met erreur d'exécution 9.

Les deux codes sont identiques ! ^^' merci d'avance car là j'avoue je ne comprend pas du tout

Rechercher des sujets similaires à "comparer deux colonnes"