Macro - copier/coller conditionnel

Bonjour à tous,

Dans un fichier excel, je voudrais qu'un macro fasse ceci :

1. Regarder dans un tableau nommé "IQ" et dans sa 3ème colonne titrée "Category"
2. Identifier si la valeur = "Engineering"
3. Si oui copier toute la ligne dans un tableau d'une autre page.

Je ne peux pas vous partager le fichier tel quel (confidentialité) si nécessaire, j'en créerai un simplifié. :-)

Merci pour votre aide! :-)

7 réponses

  • Votes
  • Date
  • Date décroissante
  1. Bonjour

    1) Oui il est indispensable d'avoir un exemple même simplifié pour connaître la structure exacte

    2) Pas forcément obligé de passer par une macro, c'est surement possible apr formules. Tiens-tu vraiment à une macro ?

    Cdlmnt
    Via
    1. Bonjour,

      Une formule pourrait probablement convenir mais paradoxalement, je comprends beaucoup mieux les macros que les formules (logique plus littéraire que mathématique :-) ).

      Le soucis principal est que le fichier peut pas mal bouger d'où mon idée de créer un copier/coller dynamique plutôt que quelque chose lié à la cellule. Je pourrais aussi fonctionner avec une plage nommée mais je trouve le fonctionnement assez lourd.

      Voici pour le moment où j'en suis :

      ' Sélection du tableau IQ colonne category : fonctionne
      Sheets("Summary").Select
      Range("IQ[Category]").Select

      'Si category = blabla => copie ligne dans blabla : ne fonctionne pas
      If ("IQ[@Category]" = "Engineering") Then
      ActiveCell.Select
      Selection.Copy
      Sheets("Engineering").Select
      Range("IQEng").Select
      ActiveSheet.Paste
      End If

      Et voici un lien pour télécharger le fichier simplifié : https://onedrive.live.com/redir?resid=93B77EA8D4E4F38D!2134&authkey=!ACoBHYOLj2257Z4&ithint=file%2cxlsx

      Merci de votre aide!
      1. Bonjour

        Dans la macro tu sélectionnes une plage mais il faut ensuite boucler sur toutes les cellules de la plage et lorsqu'on trouve Engeenering copier la cellule avant pour l'activité et la coller dans Summary(en indiquant une cellule précise et pas une plage) puis copier la cellule après pour Owner et la coller dans Summary
        La macro sera alors :
        Sub Copy()
        ' Sélection du tableau IQ colonne category
        Sheets("Summary").Select
        Range("IQ[Category]").Select
        
        'Si category = blabla => copie ligne dans blabla
        ' boucle sur les cellules de la plage
        For Each Cell In Range("IQ[Category]")
        'si Engineering
        If Cell = "Engineering" Then
        'copie valeur cellule précédente et colle en B7 d'Engineering
        Cell.Offset(0, -1).Select
        Selection.Copy
        Sheets("Engineering").Select
        Range("B7").Select
        ActiveSheet.Paste
        ' reposition dans Summary, sélection cellule à droite et copie dans E7 d'Engineering
        Sheets("Summary").Select
        Range("IQ[Category]").Select
        Cell.Offset(0, 1).Select
        Selection.Copy
        Sheets("Engineering").Select
        Range("E7").Select
        ActiveSheet.Paste
        End If
        Next
        End Sub


        Cdlmnt
        Via
        1. Génial. Ça m'a l'air de fonctionner comme je le voudrais. MERCI! Je vais le tester dans mon gros fichier maintenant. Question : Pourquoi as-tu mis "Next" à la fin avant "End Sub"?
          1. Je viens de le tester. dans mon fichier d'origine. Malheureusement, ceci ne fonctionne que si l'item recherché n'apparait qu'une fois. Or, la plupart du temps il apparait plusieurs fois et de façon variable (2,3,4,5,...fois). Voir dans le fichier du lien pour les lignes "GMP" qui doivent être copiées dans l'onglet "QC GMP".

            https://onedrive.live.com/redir?resid=93B77EA8D4E4F38D!2134&authkey=!ACoBHYOLj2257Z4&ithint=file%2cxlsx

            Et tant qu'à compliquer l'histoire... :-) Les références de copie dans les onglets sont fixes (ex : A15) dans ta proposition. Y a t'il un moyen de demander à Excel de copier dans une plage nommée une ligne à la suite de l'autre? Ou de copier un bloc de lignes dans une plage nommée? Toutes les lignes de même catégorie seront en effet triées avant la copie de sorte qu'elles seront toutes rassemblées.

            Désolée de compliquer l'affaire. Le fichier en exemple est fort simplifié mais le fichier d'origine est complexe et amené à bouger avec des ajouts d'onglets et de lignes dans summary donc il faut qu'il soit le plus modulaire possible. :-) de plus, ne connaissant pas toutes les implications, j'essaie de vous donner un max d'infos sans vous noyer non plus... :-s

            Merci merci merci!!!!
            1. Bonjour

              1) Le Next est exigé pour la boucle For

              2) Oui on peut faire copier les données en suivant, il faut chaque fois créer une nouvelle ligne dans le tableau de destination
              Je regarde cela dès que possible

              Cdlmnt
              Via
              1. Re

                A condition de supprimer les cellules fusionnées (qui font bugger les macros) dans les feuilles destinataires et de laisser au départ une ligne vide après chaque titre :
                https://mon-partage.fr/f/BxaBOUJ3/
                Raccourci clavier pour lancer la macro : Ctrl+a

                Cdlmnt
                Via