Extraction a partir d'onglets sous condition dans le nom de l'onglet.

Résolu
Oldevi Messages postés 10 Date d'inscription mardi 2 décembre 2008 Statut Membre Dernière intervention 28 janvier 2009 - 27 janv. 2009 à 17:50
cs_Orohena Messages postés 577 Date d'inscription vendredi 26 septembre 2008 Statut Membre Dernière intervention 20 novembre 2010 - 28 janv. 2009 à 21:19
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

cs_Orohena Messages postés 577 Date d'inscription vendredi 26 septembre 2008 Statut Membre Dernière intervention 20 novembre 2010 4
28 janv. 2009 à 02:29
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
3
cs_Jack Messages postés 14007 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 77
27 janv. 2009 à 18:07
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)
0
cs_Orohena Messages postés 577 Date d'inscription vendredi 26 septembre 2008 Statut Membre Dernière intervention 20 novembre 2010 4
27 janv. 2009 à 18:09
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
0
Oldevi Messages postés 10 Date d'inscription mardi 2 décembre 2008 Statut Membre Dernière intervention 28 janvier 2009
27 janv. 2009 à 18:31
Merci pour vos reponses,

Merci pour le End if (suis-je bete)...
Je teste et vous dis si ca fonctionne
0

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

Posez votre question
cs_Orohena Messages postés 577 Date d'inscription vendredi 26 septembre 2008 Statut Membre Dernière intervention 20 novembre 2010 4
27 janv. 2009 à 19:07
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 )
0
Oldevi Messages postés 10 Date d'inscription mardi 2 décembre 2008 Statut Membre Dernière intervention 28 janvier 2009
27 janv. 2009 à 23:14
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
0
Oldevi Messages postés 10 Date d'inscription mardi 2 décembre 2008 Statut Membre Dernière intervention 28 janvier 2009
28 janv. 2009 à 18:10
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.
0
cs_Orohena Messages postés 577 Date d'inscription vendredi 26 septembre 2008 Statut Membre Dernière intervention 20 novembre 2010 4
28 janv. 2009 à 21:19
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
0
Rejoignez-nous