For each() sous excel [résolu]

kraenys

XLDnaute Junior
Bonjour la communauté,

J'ai un fichier excel sur lequel j'ai plusieurs feuilles, chacunes ayant un nom distinct. Ce nom peut varier en fonction des requêtes access que je fais avant, donc je ne peux pas me baser sur les noms de ces feuilles.

Je cherche l'équivalent d'un for each sheet marchant sous excel pour faire une manipulation identique à chacune des feuilles présentes dans mon fichier.

Voici le code utilisé pour une des feuilles:

Sheets("Requête_suspendu").Select
Range("A1:K1").Select
Selection.Copy
Sheets.Add After:=Sheets(Sheets.Count)
Sheets("C12-CD").Select
Call rajouter_ligne ;rajoute une ligne tout en haut de la feuille
ActiveSheet.Paste
Call m_a_p ;toute une série de mises en forme et mises en page
Range("A1:K1").Select
Selection.Copy
Sheets.Add After:=Sheets(Sheets.Count)
Sheets("C34-CD").Select
Call rajouter_ligne
ActiveSheet.Paste
Call m_a_p


Et ainsi de suite pour chacune de mes feuilles
Le problème, c'est que Sheets("C12-CD").Select et Sheets("C34-CD").Select sont des feuilles que j'utilise actuellement, mais il n'est pas certain que ce sera le cas aussi demain, je ne peux donc pas les appeler comme ca.

Je cherche un moyen non nominatif de faire la même manipulation sur chaque feuille de mon fichier, une sorte de for each (sheets), celà existe-t-il?

J'espère avoir été assez clair, je peux préciser si besoin.

Bien à vous.

Kraenys
 
Dernière édition:

Papou-net

XLDnaute Barbatruc
Re : For each() sous excel

Bonjour Kraenys,

Un exemple de boucle pour lire des feuilles:

Code:
For Each sh in Sheets
  sh.Select
  Range("A1").Select
Next
Bien sûr, ce n'est qu'un exemple de base qui ne s'applique pas à ton cas, car il faut déterminer sur quelles feuilles la variable sh doit agir. Il faut donc prévoir une ligne de condition du type "If sh.Name <> "Feuil1" Then..."

D'autre part, concernant les feuilles C12-CD, C34-CD, etc..., je pense qu'il serait préférable d'utiliser le CodeName de ces feuilles (le nom de gauche dans la fenêtre Projet, module Microsoft Excel Objets.

Pour être plus précis, un exemple de ton classeur (sans données sensibles) serait le bienvenu.

A +

Cordialement.
 

kraenys

XLDnaute Junior
Re : For each() sous excel

Voici ci-joint un document pouvant très bien résumer mes besoins, avec certaines colones remplacées.

Les macros y sont toutes, et à mon avis, macro_menu est celle sur laquelle il doit être le plus simple de pouvoir arriver à ses fins, après, je suis ouvert à toute modification tant que ça fonctionne.

Pour tester si ça fonctionne, je rajouterai simplement des lignes ayant des noms de groupes d'alertes différents de ceux qui existent dejà, et la feuille devra être créée et mise en forme/page avec la macro.

Merci de votre aide Papou-net, je reste à votre disposition en cas de besoin d'explications.

Bien à vous.

Kraenys
 

Pièces jointes

  • excel-downloads.xlsm
    66.3 KB · Affichages: 40
  • excel-downloads.xlsm
    66.3 KB · Affichages: 44
  • excel-downloads.xlsm
    66.3 KB · Affichages: 48

Papou-net

XLDnaute Barbatruc
Re : For each() sous excel

RE:

Peux-tu décrire avec précision ce que doit faire la macro car la structure de ton fichier ne correspond pas à ta demande initiale?

Je ne vois qu'une feuille et je ne comprends pas à quoi la boucle peut être utile dans ce cas.

L'idéal serait que tu indiques ligne par ligne les actions à effectuer.

A te lire

Cordialement.
 

kraenys

XLDnaute Junior
Re : For each() sous excel

Bonsoir papou-net.

Il faut lancer la macro test pour pouvoir obtenir les différentes feuilles.
Désolé, j'ai oublié de le préciser. J'ai préféré envoyer un fichier avant toute manipulation pour permettre une meilleure appréhension de celui-ci.

Quand vous la lancerez, vous verrai les différentes feuilles se créer au fur et à mesure, jusqu'à avoir un message d'erreur, c'est là où je bloque, la macro se passe mal. Je n'arrive pas à attribuer la macro macro_menu la faculté de s'appliquer sur toutes les feuilles.

J'explique le fonctionnement de ma macro:
la macro test créé une feuille pour chaque catégorie de goupe d'alertes
Apres ca appel macro_menu qui appel m_a_p sur chaque feuille. Et c'est là qu'il y a le problème, je n'arrive pas à appliquer ces macros à toutes les feuilles sans les nommer une par une. C'est là que le For Each est important pour moi.

Bien à vous.

Kraenys
 
Dernière édition:

kraenys

XLDnaute Junior
Re : For each() sous excel

Re Bonjour papou-net

Je te propose de remplacer la macro macro_menu par:
Sub Macro_menu()
' Declare Current as a worksheet object variable.
Dim Current As Worksheet

' Loop through all of the worksheets in the active workbook.
For Each Current In Worksheets
Range("A1:K1").Select
Selection.Copy
Call rajouter_ligne
ActiveSheet.Paste
Call m_a_p
Next
End Sub

ce n'est pas parfait mais au moins il n'y a pas de messages d'erreur.
Par contre, m_a_p ne s'applique que sur la feuille MTE_MM mais ça donne une bonne idée du résultat attendu.

Au lieu que les lignes en gras et l'activation des liens hypertext s'empilent les une sur les autres, il faut que ça soit une fois par feuille. C'est ça que je ne parvient pas à faire pour le moment.

Bien à vous.

Kraenys
 

kraenys

XLDnaute Junior
Re : For each() sous excel

J'ai fini par arriver à mes fins avec:

Sub Macro_menu()
'Dim Sheet_Name As String
'Do Until Sheet_Name <> ""
'Sheet_Name = InputBox("Saisissez le nom de la première colone : ", " Nom de la colone ")
'Loop
Dim ws As Worksheet, i As Long
Sheets("Requête_suspendu").Select
For i = ActiveSheet.Index To Worksheets.Count - 1
Set ws = Sheets(i)
ws.Select
Range("A1:K1").Select
Selection.Copy
ActiveSheet.Next.Select 'Selects the Next Sheet
Call rajouter_ligne
ActiveSheet.Paste
Call m_a_p
Next i
End Sub

Du coup, j'ai juste un petit détail qui reste en suspends et dont je ne trouve pas de réponses.
Comment je pourrais remplacer [ Sheets("Requête_suspendu").Select ] Par quelquechose de général, cette feuille étant la première du fichier. Je pensais à quelquechose du type: Sheets(First.Sheet).Select
mais il semble que ça ne passe pas, quelqu'un saurait-il comment faire?

Bien à vous, merci d'avance de vos réponses.

Kraenys
 

kraenys

XLDnaute Junior
Re : For each() sous excel

Bon, et bien à force d'essayer j'ai encore fini par tomber dessus, Sheets(1).Select marche à merveilles, tout simplement X)


Désolé pour ce sujet pour le moins bizare dans son évolution.. Mais je vais le clore, n'ayant plus de questions sur ce sujet.

Merci encore Papou-net^^
 

Discussions similaires

Réponses
22
Affichages
2 K

Statistiques des forums

Discussions
312 428
Messages
2 088 319
Membres
103 812
dernier inscrit
mehdifr