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 :

Aide maccro pour multiplier deux listes de données entre elles


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau Candidat au Club
    Aide maccro pour multiplier deux listes de données entre elles
    Bonjour à tous,

    Je viens demander votre aide pour automatiser une tache que j'ai à répéter régulièrement et qui me prend pas mal de temps surtout lorsque j'ai des modifications de dernière minutes qui m'oblige à tout recommencer ....

    C'est assez simple :
    Il s'agit d'un fichier avec une liste de produits que j'envoie à différents responsable de zone et qui doivent me le retourner rempli.

    Il y a deux listes :

    1. Une liste de Marché : MARCHE

    marché 1
    marché 2
    marché 3

    2. Une liste de produit : PRODUCT LIST

    Produit 1
    Produit 2
    Produit 3


    J'aurais besoin qu'excel prenne chaque ligne du tableau de l'onglet Marché (col F à H sans la colonne KEY)
    pour ensuite la coller dans un troisième onglet autant de fois qu'il y a un produit dans l'onglet product list


    RESULTAT :

    Marché 1 * Produit 1
    Marché 1 * Produit 2
    Marché 1 * Produit 3
    Marché 2 * Produit 1
    Marché 2 * Produit 2
    Marché 2 * Produit 3
    Marché 3 * Produit 1
    Marché 3 * Produit 2
    Marché 3 * Produit 3

    Bien sur la liste de produit ou des marché doit pouvoir changer de taille (nombre de ligne)

    Voila j’espère que ma demande est claire et qu'une âme bienveillante puisse m'aider, malheureusement mes compétences en VBA ne me permette pas encore de rédiger ce code :

  2. #2
    Membre confirmé
    Salut antoinebf,

    Voilà le fichier en retour.
    Il y a sûrement plus simple mais ça fonctionne.

    J'ai pris comme postulat que le premier marché étaitn cellule E4 et le premier produit en cellule E11.

    A partir de là ça fait bien ce que tu veux.

    Bonne réception et bonne journée !
    Runsh

  3. #3
    Nouveau Candidat au Club
    Mille Mercis
    Wouaa !! Bravo @Runsh63
    ça fonctionne parfaitement !!
    Merci beaucoup pour ton aide et ta rapidité !

    Bonne Journée !

  4. #4
    Membre confirmé
    Mais de rien !!
    C'est normal de s'entraider entre Excelleur

    Très bonne journée à toi également !!
    Runsh

  5. #5
    Nouveau Candidat au Club
    Encore un peu plus :)
    Je me permets d 'en demander plus du coup si jamais tu as le temps,

    J'aurais besoin qu'une fois cette liste de marché * produit créée, on puisse la répartir bout par bout (en copiant collant) dans les onglets qui servent aux marchés,

    En ajoutant dans l'onglet RÉSULTAT une clef par exemple Market & Super Market
    et qu'ensuite avec l'aide de l'onglet "Liste responsable TAD" il puisse allez coller les lignes correspondante à la clef dans l'onglet indiqué en Col E du tableau des responsable ?

    Merci beaucoup si tu as le temps de m'aider ! et Merci pour ton aide déjà !

    Bonne journée !

  6. #6
    Membre confirmé
    Work in progress ;-)
    Hello,

    Je vais m'appuyer sur la colonne "Market" pour aller déverser les infos dans les onglets correspondants.
    Je n'ai pas d'exemple dans ta feuille pour UK et Europe Hotel alors je pars du principe que dans la colonne "Market", ils seront indiqués comme tels.
    Si ce n'est pas le cas, il faudra adapter le code.

    Ne t'inquiète pas, le temps de traitement est relativement long donc pas de panique si ça mouline.
    J'ai réinitialisé le fichier pour que tu puisses tester et te rendre compte par toi-même.

    En espérant avoir répondu à ta demande, je te souhaite une très bonne journée !
    Runsh

  7. #7
    Membre extrêmement actif
    Bonjour à tous
    Résumons donc :
    on a là une discussion :
    - ouverte dans la section Excel pour une difficulté relevant de la section VBA
    - ouverte pour traiter une difficulté spécifique, qui semble avoir été résolue, mais non fermée.
    - continuée avec d'autres questions relatives à des difficultés autres que celle d'ouverture de la discussion
    - constituée non de réponses par code, mais à coup d'échanges de fichiers joints (que je n'ouvre et n'ouvrirai bien évidemment jamais, comme beaucoup de forumeurs)

    --->> discussion sans aucun intérêt "partagé".
    Bref ...
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  8. #8
    Nouveau Candidat au Club
    Merci Runsh63 !
    Merci Runsh cela fonctionne encore une fois très bien,
    Le seul petit soucis c'est qu'après avoir fait tourner la maccro le classeur excel semble tourner au ralenti il y aurait il une ligne de code à ajouter pour vider un cache ou je ne sais pas ce qui provoque cela?, rien de très grave puisqu'il suffit d'enregistrer le classeur et de le rouvrir,

    @Unparia, je ne comprends pas très bien l'intérêt de ton message ni quelle solution tu apportes en postant ce dernier.

    Pourtant tu dois bien pouvoir voir que je suis relativement nouveau sur le forum, alors il serait peut être plus efficace de m'indiquer comment déplacer la discussion dans le bon forum si cela est possible.

    De plus la discussion est continuée sur les mêmes soucis, mais comme tu ne veux pas ouvrir le fichier, tu ne peux pas forcement savoir, par contre tu es la pour le dire :spam: :spam: :spam:

    Si le forum autorise le partage des fichiers c'est bien qu'il y a la un intérêt à le faire qui n'est pas le tiens mais ça tu l'as choisi toi même,

    Encore Merci à Runsh63 qui me permet d'apprendre beaucoup, et de façon très agréable et cordiale et ce sans jouer/juger/expliquer qu'il y trouve un intérêt ou non et merci à unparia de veiller à mettre les quand rien ne va plus !


    Pour ce qui est du code le voici :

    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
    Sub Marchés_x_Produits()
     
    Dim LR As Long, i As Long, j As Long, NbProduits As Long, MaPlage As Range
     
    Application.ScreenUpdating = False
     
    'Création de la liste Marchés x Produits dans l'onglet "RESULTAT"
     
        With Sheets("RESULTAT")
        'dernière ligne
            LR = Sheets("MARCHE").Cells(Rows.Count, 5).End(xlUp).Row
         '-----
            NbProduits = Sheets("Product List").Cells(Rows.Count, 5).End(xlUp).Row - 10
     
            Set MaPlage = Sheets("Product List").Range("E11:AA" & NbProduits + 10)
     
         'espace ou l'on applique la boucle
     
                For i = 4 To LR
         '----
                    .Range(.Cells(.Rows.Count, 2).End(xlUp).Offset(1, 0), .Cells(.Rows.Count, 2).End(xlUp).Offset(NbProduits, 2)).Value = _
                    Sheets("MARCHE").Range("F" & i & ":H" & i).Value
                    MaPlage.Copy .Cells(.Rows.Count, 5).End(xlUp).Offset(1, 0)
     
                Next i
     
    'Déversement des ces données créées dans chaque onglet marché correspondant.
     
            LR = .Cells(Rows.Count, 2).End(xlUp).Row
     
                For i = 11 To LR
     
                    If .Cells(i, 3).Value = "UK" Then
                       .Range("B" & i & ":AA" & i).Copy Sheets("TAD UK").Range("B1048576").End(xlUp).Offset(1, 0)
                    ElseIf .Cells(i, 3).Value = "EUROPE HOTEL" Then
                           .Range("B" & i & ":AA" & i).Copy Sheets("TAD Europe Hotel").Range("B1048576").End(xlUp).Offset(1, 0)
                    ElseIf .Cells(i, 3).Value = "MOPO" Then
                           .Range("B" & i & ":AA" & i).Copy Sheets("TAD MOPO").Range("B1048576").End(xlUp).Offset(1, 0)
                    ElseIf .Cells(i, 3).Value = "FR/BNL" Then
                           .Range("B" & i & ":AA" & i).Copy Sheets("TAD FR BNL").Range("B1048576").End(xlUp).Offset(1, 0)
                    ElseIf .Cells(i, 3).Value = "EUROPE TR" Then
                           .Range("B" & i & ":AA" & i).Copy Sheets("TAD EUROPE TR").Range("B1048576").End(xlUp).Offset(1, 0)
                    ElseIf .Cells(i, 3).Value = "CANADA" Then
                           .Range("B" & i & ":AA" & i).Copy Sheets("TAD CANADA").Range("B1048576").End(xlUp).Offset(1, 0)
                    ElseIf .Cells(i, 3).Value = "BU SUD" Then
                           .Range("B" & i & ":AA" & i).Copy Sheets("TAD BU SUD").Range("B1048576").End(xlUp).Offset(1, 0)
                    ElseIf .Cells(i, 3).Value = "BU NORD" Then
                           .Range("B" & i & ":AA" & i).Copy Sheets("TAD BU NORD").Range("B1048576").End(xlUp).Offset(1, 0)
                    ElseIf .Cells(i, 3).Value = "BPI US" Then
                           .Range("B" & i & ":AA" & i).Copy Sheets("TAD BPI").Range("B1048576").End(xlUp).Offset(1, 0)
                    ElseIf .Cells(i, 3).Value = "ASIE" Then
                           .Range("B" & i & ":AA" & i).Copy Sheets("TAD ASIE").Range("B1048576").End(xlUp).Offset(1, 0)
                    ElseIf .Cells(i, 3).Value = "AMERIQUE" Then
                           .Range("B" & i & ":AA" & i).Copy Sheets("TAD AMERIQUES").Range("B1048576").End(xlUp).Offset(1, 0)
                    End If
     
                Next i
     
        End With
     
    MsgBox "Traitement terminé avec succès.", vbInformation + vbOKOnly, "<<<(^v^)>>>"
     
    Application.CutCopyMode = False
    Application.ScreenUpdating = True
     
    End Sub

  9. #9
    Membre extrêmement actif
    Une manière agréable et cordiale ?
    D'accord : je t'invite donc très cordialement et très aimablement à commencer à faire ce que tu n'as manifestement pas encore fait :
    - lire les règles de ce forum (c'est un peu comme s'informer des règles de bienséance en vigueur dans un lieu que l'on va visiter).
    Etant entendu que si ces règles ne nous conviennent pas, nul ne nous force à faire cette visite.
    - lire ceci :
    https://www.developpez.net/forums/d8...s-discussions/

    Cela évitera entre autres tant à des membres qu'à des visiteurs en quête d'une recherche de solution d'avoir à ouvrir (avec en plus les risques induits) des classeurs joints pour pouvoir savoir de quoi il s'agit et connaître la solution éventuellement apportée.

    Cette manière de te dire que ces règles n'ont pas été observées (alors que tu es demandeur et non demandé) te paraît-elle acceptable ?
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  10. #10
    Membre extrêmement actif
    Bonjour Patrice740
    Oui, mais çà, c'est le temps des autres *****, pas le sien
    Je ne sais pas ce qu'en pense son employeur. Il est probable qu'il trouvera que le temps perdu à cette petite démarche lui coûte (à commencer par le salaire) beaucoup plus que celui de l'achat d'un des nombreux outils de prévision de la demande que l'on trouve sur le marché. D'autant qu'ils sont bien plus pointus, efficaces, souples et performants

    Amitiés


    **** celui de ceux qu'il a sollicités (sans surtout perdre son propre temps à au moins lire les règles à respecter) n'est pas son souci.
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  11. #11
    Expert éminent sénior
    Citation Envoyé par unparia Voir le message
    on a là une discussion :
    - ouverte dans la section Excel pour une difficulté relevant de la section VBA
    Bonjour,

    c'est pour cette raison je ne suis pas intervenu dans cette discussion - n'étant pas le seul - et me doutant du type du demandeur …

    Si tous ceux répondant aux questions respectaient les règles du forum,
    à force les demandeurs seraient bien obligés de les respecter eux aussi !

    ___________________________________________________________________________________________________________
    Je suis Paris, Barcelone, London, Manchester, Egypte, Stockholm, Istanbul, Berlin, Nice, Bruxelles, Charlie, …
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  12. #12
    Membre extrêmement actif
    Bonjour Marc-L
    Tout-à-fait
    C'est même la raison pour laquelle j'ai préféré parler de la discussion dans son entièreté. Que chacun des intervenants veuille bien prendre conscience de certains aspects serait sans le moindre doute une très bonne chose.
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  13. #13
    Membre confirmé
    Bonjour,

    Je suis d'accord avec vous, mais j'avais vu que antoinebf était très récent, et peut-être dans l'urgence de trouver une solution, c'est pourquoi j'y ai répondu, même si la discussion n'était pas dans le sous-forum dédié au VBA.

    Je vous prie de m'excuser pour cette faute, et espère que vous comprenez qu'avant tout je voulais aider antoinebf.

    Vous souhaitant une agréable journée.
    Runsh

  14. #14
    Membre extrêmement actif
    Bonjour Runsh63
    Le problème principal n'est pas tant le choix de la section du forum, mais celui d'un échange fait par échange de fichiers joints
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  15. #15
    Membre confirmé
    Oui je comprends tout à fait ta remarque, l'embêtant c'est que sans l'ouvrir, difficile de comprendre le but recherché.
    J'ai conscience du risque et de fait, de la remarque que tu as faite.

    Une chance pour moi, le fichier n'était pas corrompu
    Runsh

  16. #16
    Membre extrêmement actif
    Une chance pour moi, le fichier n'était pas corrompu
    1) ce n'est pas une "corruption" du fichier, qui est à craindre, mais du bien plus sournois
    2) ne crois pas une seconde que le "plus sournois" se remarque aussitôt. Le "plus sournois" commence généralement par installer des petits chevaux (de Troie). Ils sont destinés a servir ensuite de tremplin pour du bien plus méchant, plus tard, lorsque les choses ou les conditions le lui permettent.
    l'embêtant c'est que sans l'ouvrir, difficile de comprendre le but recherché
    C'est justement là, le problème. Tu ne me verras jamais mettre sur ce forum un classeur en pièce jointe, même si ma machine est super protégée (du moins : selon ce que je pense).
    Un demandeur, un développeur, doit savoir :
    - exposer clairement les tenants et aboutissants. S'il ne le sait pas, il y a déjà une sacrée carence à la base. Nul ne saurait développer valablement s'il ne sait au moins exposer clairement ces tenants et aboutissants
    - isoler et exposer la seule difficulté spécifique qu'il rencontre dans le cours de son développement et présenter uniquement le code concernant cette partie-là. Sauf si cette partie utilise d'autres procédures, dont le code doit alors également être montré. Ne pas savoir isoler cela est également la marque d'une carence fondamentale.
    Amitiés
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.