Macro - copier/coller conditionnel

LizouChou Messages postés 4 Statut Membre -  
via55 Messages postés 14393 Date d'inscription   Statut Membre Dernière intervention   -
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

  1. via55 Messages postés 14393 Date d'inscription   Statut Membre Dernière intervention   2 759
     
    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
    0
  2. LizouChou Messages postés 4 Statut Membre
     
    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!
    0
  3. via55 Messages postés 14393 Date d'inscription   Statut Membre Dernière intervention   2 759
     
    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
    0
  4. LizouChou Messages postés 4 Statut Membre
     
    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"?
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. LizouChou Messages postés 4 Statut Membre
     
    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!!!!
    0
  7. via55 Messages postés 14393 Date d'inscription   Statut Membre Dernière intervention   2 759
     
    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
    0
  8. via55 Messages postés 14393 Date d'inscription   Statut Membre Dernière intervention   2 759
     
    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
    0