Extraction a partir d'onglets sous condition dans le nom de l'onglet. [Résolu]

Signaler
Messages postés
10
Date d'inscription
mardi 2 décembre 2008
Statut
Membre
Dernière intervention
28 janvier 2009
-
Messages postés
577
Date d'inscription
vendredi 26 septembre 2008
Statut
Membre
Dernière intervention
20 novembre 2010
-
Bonjour a tous,

Comme l'indique le titre de mon message, je souhaite dans une feuille excel, pour chaque onglet, controler s'il contient la cahine de caractere "AME" dans son nom et dans ce cas aggreger les donnees qu il contient (sans l'intitule des colonnes) dans un autre onglet (CORP).

J'ai essaye ca sans succes :

Sub macro()





For Each Sheet In ActiveWorkbook.Sheets
    Sheet.Activate
    If ActiveSheet.Name Like "*AME*" Then Range("A2").Select                             
                            Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select
                            Selection.Copy
                            Sheets("CORP").Activate
                            Rows("1:1").Select
                            Selection.Insert Shift:=xlDown
Next Sheet



End Sub


Merci de votre aide !! Et desole pour les accents, je suis sur un clavier US.

8 réponses

Messages postés
577
Date d'inscription
vendredi 26 septembre 2008
Statut
Membre
Dernière intervention
20 novembre 2010
4
C'est top !
Ta macro n'ayant pas pour but d'afficher des résultats à l'écran, tu peux améliorer les performances de ton code en mettant Application.ScreenUpdating False au début de la macro, et Application.ScreenUpdating True à la fin. Cela "déconnecte" ton écran pendant l'exécution de la macro, et les divers changements de feuilles de calcul (.Activate) se feront ainsi beaucoup plus rapidement.

Pour moi, c'est clair que l'utilisation de For Each / Next est préférable à tout point de vue à For i / Next i pour travailler sur des collections. Je n'ai pas beaucoup d'arguments techniques pour l'expliquer, mais je suis prêt à parier que si une des grosses têtes qui hantent ce forum lit cette discussion, elle te pondra 30 pages d'explication niveau bac + 12 pour te dire la même chose.   

Amicalement

PS : je pense que les "grosses têtes" ont de l'humour et ne m'en voudront pas
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
74
Salut
Catégorie modifiée .NET --> VBA

Et c'est quoi qui ne fonctionne pas : La détection du texte dans les noms des feuilles ou bien le copier/coller ?
Pour le savoir, insère un MsgBox ActiveSheet.Name après le If
+ essaye de déboguer avec les touches F9 (stop) et F8 (exécute 1 ligne)

PS : Dans ton IF, seule Range("A2").Select est exécuté conditionnellement. Les lignes suivantes seront exécutées tout le temps --> Passer à la ligne après le Then + End If après la dernière ligne à exécution conditionnée.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Messages postés
577
Date d'inscription
vendredi 26 septembre 2008
Statut
Membre
Dernière intervention
20 novembre 2010
4
Bonjour Oldevi

 Dans ton code, les instructions de la ligne 4 à 8 s'exécutent toujours, quelque soit le résultat du If. Peut-être faut-il lire :

If ActiveSheet.Name Like "*AME*" Then 
                            Range("A2").Select                             
                            Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select
                            Selection.Copy
                            Sheets("CORP").Activate
                            Rows("1:1").Select
                            Selection.Insert Shift:=xlDown
End If

Amicalement
Messages postés
10
Date d'inscription
mardi 2 décembre 2008
Statut
Membre
Dernière intervention
28 janvier 2009

Merci pour vos reponses,

Merci pour le End if (suis-je bete)...
Je teste et vous dis si ca fonctionne
Messages postés
577
Date d'inscription
vendredi 26 septembre 2008
Statut
Membre
Dernière intervention
20 novembre 2010
4
Oui, tiens-nous au courant car même si ça fonctionne, ton code a aussi besoin d'être optimisé.
(J'ai déjà préparé le message pour essayer d'être plus rapide que jack, mais je reconnais que c'est presque perdu d'avance )
Messages postés
10
Date d'inscription
mardi 2 décembre 2008
Statut
Membre
Dernière intervention
28 janvier 2009

Orohena, Jack,

OK ca marche nickel. Merci beaucoup a tous les deux.
Pour l'optimisation, je suis preneur !
Je me demandais egalement si l'utilisation de "for each" est plus ou moins pertinente que d'utiliser des variables type "i,j" que l'on retrouve assez souvent dans les forums et que j'ai un peu de mal a integrer.

Merci encore
Messages postés
10
Date d'inscription
mardi 2 décembre 2008
Statut
Membre
Dernière intervention
28 janvier 2009

Ok merci ! For/Each me semble effectivement plus adapte, c'est pour ca que je comprenais mal l'utilisation quasi systematique de for i/next i sur les forums.

Merci encore.
Messages postés
577
Date d'inscription
vendredi 26 septembre 2008
Statut
Membre
Dernière intervention
20 novembre 2010
4
Visiblement, tu n'es pas allé sur LE bon forum .

Notre devise, c'est : Yes we can. On a voulu la faire protéger par un brevet mais avec la lenteur de l'administration française, on a été pris de vitesse lol

Amicalement