Macro - copier/coller conditionnel

Fermé
LizouChou Messages postés 4 Date d'inscription mercredi 15 novembre 2017 Statut Membre Dernière intervention 17 novembre 2017 - 15 nov. 2017 à 14:37
via55 Messages postés 14408 Date d'inscription mercredi 16 janvier 2013 Statut Membre Dernière intervention 5 mai 2024 - 17 nov. 2017 à 16:56
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! :-)
A voir également:

7 réponses

via55 Messages postés 14408 Date d'inscription mercredi 16 janvier 2013 Statut Membre Dernière intervention 5 mai 2024 2 704
15 nov. 2017 à 17:54
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
LizouChou Messages postés 4 Date d'inscription mercredi 15 novembre 2017 Statut Membre Dernière intervention 17 novembre 2017
16 nov. 2017 à 08:53
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
via55 Messages postés 14408 Date d'inscription mercredi 16 janvier 2013 Statut Membre Dernière intervention 5 mai 2024 2 704
16 nov. 2017 à 16:59
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
LizouChou Messages postés 4 Date d'inscription mercredi 15 novembre 2017 Statut Membre Dernière intervention 17 novembre 2017
17 nov. 2017 à 08:36
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
LizouChou Messages postés 4 Date d'inscription mercredi 15 novembre 2017 Statut Membre Dernière intervention 17 novembre 2017
17 nov. 2017 à 09:17
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
via55 Messages postés 14408 Date d'inscription mercredi 16 janvier 2013 Statut Membre Dernière intervention 5 mai 2024 2 704
17 nov. 2017 à 13:05
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
via55 Messages postés 14408 Date d'inscription mercredi 16 janvier 2013 Statut Membre Dernière intervention 5 mai 2024 2 704
17 nov. 2017 à 16:56
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