Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

boucle pour sheets

  • Initiateur de la discussion Initiateur de la discussion _Thierry
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

_Thierry

XLDnaute Barbatruc
Repose en paix
Re Bonjour Tom, Bonjour Thomas, le Forum

ARf oui, j'ai fait vite mon copié/collé entre la BoucleOnSheets A & B, et je me suis fais avoir comme un bleu avec le i, puisqu'en sorti de boucle de For i = 1 to 3, i vaut 4... ce qui est logique car en sortie du dernier next i, il se produit une incrémentation du numero.

Pour ce qui est de choisir entre les boucles 'For Each XXX in YYYY' et 'For i = X to Y', les deux ne sont pas toujours applicables contrairement à l'exemple présent. De manière générale, on préfèrera, si on en a la possibilité, appliquer une méthode de boucle For Each Object in Objects.Collection qui représente une réélle instance aux objets ainsi spécifiés dans la Collection. C'est sûrement du chinois à lire, désolé, mais je suis à la bourre.

En clair, ici :
Dim WS As Worksheet
For Each WS In ThisWorkbook.Worksheets

On fait bien instance à un Object WorkSheet que l'on scanne dans une Collection des Objets WorkSheets de Ce Classeur...

Par Contre ici
Dim i As Byte
For i = 1 To ThisWorkbook.Worksheets.Count

On ne fait pas d'instance à une collection d'Objets, mais on va appeler à chaque tour de boucle la Feuille dont le numéro d'index est i ...

Sur une petite quantité on ne verra aucune difference, sinon la méthode For Each Object in Objects.Collection devrait être plus optimisée...

Sinon pour Tom, et bien pour Créer et Nommer tes onglets au noms des classeurs ouverts, il suffit de faire le même style de boucle :


Je file je suis ultra à la bourre
Bonsoir
@+Thierry
 
Bonjour
est t il possible de créer un boucle pour sheets avec un nom de variable qui est un nom de fichier excel?
merci de votre attention

🙂 Sir_tom🙂
 
salut,

oui il est possible de faire une boucle sur les onglets, ca donne quelque chose du style:

Code:
for i=1 to 5   '5 étant le nombre d'onglets présent dans ton classeur
    sheets(i).select   'selection de la feuille i
    ....                     'reste de ton code
next i

j'espere que je repond bien a ta question

@+
 
Bonjour Tom, le Forum

Humm, je ne comprends pas du tout ce que tu veux faire ? et surtout ce que tu entends par 'variable qui est un nom de fichier excel' ?

Une premiere boucle de base sur les feuilles :


Une variante :


Une troisième avec un nom de classeur en variable



Cette dernière ayant 'une variable en nom de classeur'...

Bon Aprèm
@+Thierry

Message édité par: _Thierry, à: 27/04/2005 14:36
 
Bonjour,

j'ai une question pour Thierry, mise à par le dernier exemple qui comporte une variable

dans quel cas est il plus util d'utiliser une boucle For Each plutot que For ...= ..To ??

car je debut et je ne comprend pas trop la mechanique faite derriere car je presume que excel ne travail pas de la même facon dans les 2 cas.

sinon au passage pour la version For i=1 to ThisWorkbook.Worksheets.Count

je n'ai pas le meme resulta (il me compte une feuille en plus que dans les autres)

donc c'est simple je me cré une variable ii = i-1 et je met ii dans le msg box au lieu de i mais pourquoi le resulta est il différent.


d'avance merci
Thomas
 
ce que j'appelle 'variable qui est un nom de fichier excel', c'est que j'aimerai que mes onglet portent les noms des fichiers exportés!
petit exemple:
fic1.xls
fic2.xls
fic3.xls
dans un fichier resultat.xls j'aimerai avoir trois onglets:fic1, fic2,fic3
merci

🙂 Sir_tom 🙂
 
Bonjour Thomas, Tom

Tiens je n'avais pas vu que ce Fil avait encore de l'activité, en plus je suis désolé mais évidemment j'avais commis une erreur dans mon code...

Pour Thomas, en fait je me suis fait avoir avec une erreur de débutant sur ma Boucle 'For i = 1 To X' en efeet en sortie de boucle, le dernier Next incrément toujours 'i' une fois de plus, de là ta différence. Il faudrait écrire 'MsgBox 'Il y a ' & i -1' ....

Pour ta question entre les cas où utiliser ces deux boucles, et bien en résumé c'est assez simple, VBA préfèrera toujours travailler sur des Objets Implicitemernt désignés/référencés/déclarés et par conséquent une boucle :

Dim MyObject As Object

For Each MyObject Objects.Collection

MyObject.Name = MyObject.Name & 'Tested'

Sera bien plus digeste pour VBA que de travailler sur l'index des objets comme ceci :

Dim i as Integer

For i = 1 to Objects.Collection.Count
Object(i).Name = Object(i).Name & 'Tested'


Maintenant cette 'optimisation' ne sera perceptible que sur une grande quantité d'objets, car sur une liste de Feuilles on ne verra pas la différence. Cependant VBA se 'fatiguera' moins avec la première boucle puisque dans celle là il ne fera instance une seule fois à la création des Objets 'MyObject' alors que dans la seconde boucle une instance de création d'Objet sera initiailisée à chaque passage sur 'Object(i)'

En général si on a la possibilité (ce qui n'est pas toujours le cas), on fera donc usage de For Each Object in Objects.Collection

NB tout ceci n'est applicable que sur des instance à des collections d'object, et ne sera pas applicable sur des Boucle sur des Tableaux où là on utilisera 'For i = 0 to Ubound(MonTablo)'

Donc voilà en espérant t'avoir éclairci Thomas.


Pour Tom et bien on peut faire une approche comme ceci si j'ai compris ton problème :



Ce code copiera toutes les feuilles qui ont le premier index dans tous les classeurs ouvert vers le classeur où sera placée cette macro...

Bon Week End et désolé pour les délais de cette réponse jj'étais parti en déplacement.

@+Thierry
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
7
Affichages
448
Réponses
5
Affichages
572
Réponses
10
Affichages
658
Réponses
4
Affichages
721
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…