[RESOLU]Problème de cellule dans une boucle

RoadRunner

XLDnaute Nouveau
Bonjour

Voici ce que je veux faire :

Copier la cellule A25 de toutes les feuilles du classeur pour la mettre dans la feuille 'RECAP_MOIS'
en cellule C1 pour la feuille 01
en cellule D1 pour la feuille 02
en cellule E1 pour la feuille 03
etc... le nombre de feuille peut varier suivant le classeur

Voici ce que j'ai fait :

Dim WS As Worksheet
Dim n As Integer
i = 3
For Each WS In Worksheets
cel = Cells(1, i)
WS.Select
Range('A25').Select
Selection.Copy
If WS.Name <> 'RECAP_MOIS' Then Sheets('RECAP_MOIS').Select , cel.Select, ActiveSheet.Paste
i = i + 1
Next

J'ai une erreur (en bleu), une histoire d'objet je crois

je n'y connais rien donc si vous m'expliquez quelque chose, n'oubliez pas que je suis un grand novice !

merci d'avance

Message édité par: RoadRunner, à: 26/08/2005 16:46
 

myDearFriend!

XLDnaute Barbatruc
Re:problème de boucle

Bonjour RoadRunner,

Tu peux essayer d'adapter ta procédure comme suit :
Dim Ws As Worksheet
Dim Cel As Range
Dim I As Byte
I = 3
      For Each Ws In Worksheets
            Set Cel = Cells(1, I)
            Ws.Select
            Range('A25').Select
            Selection.Copy
            If Ws.Name <> 'RECAP_MOIS' Then
                  Sheets('RECAP_MOIS').Select
                  Cel.Select
                  ActiveSheet.Paste
            End If
            I = I + 1
      Next Ws
Cela dit, si le but est uniquement de récupérer les valeurs en A25 (et non les formats, couleurs etc...), tu peux faire simplement comme ça :
Dim Ws As Worksheet
Dim I As Byte
I = 3
      For Each Ws In Worksheets
            If Ws.Name <> 'RECAP_MOIS' Then
                  Sheets('RECAP_MOIS').Cells(1, I).Value = Ws.Range('A25').Value
                  I = I + 1
            End If
      Next Ws
En effet, il n'est point besoin (c'est même à éviter) de sélectionner une feuille, une cellule pour en récupérer les valeurs...

Cordialement,
 

Shining Hawk

XLDnaute Junior
Re:problème de boucle

Hug bip-bip...

j'ai deux remarques à faire :

la première serait de mettre
Code:
Set cel = Cells(1,i)
L'instruction Set sert à dire que la variable cel devient en objet identique à la cellule pointée par Cells(1,i). Du coup dans ta ligne en bleu, le cel.Select devient compréhensible et ça doit marcher. ;)

la deuxième, c'est pour un peu de confort: Tu n'est pas obligé de sélectionner tes cellules et onglets à chaque opération. Du coup ton code pourrait devenir (Bien sûr, ca ne reste qu'une suggestion...):
Code:
Dim WS As Worksheet
Dim n As Integer
i = 3
For Each WS In Worksheets
If WS.Name <> 'RECAP_MOIS' Then 
    Sheets('RECAP_MOIS').Cells(1, i).Value = WS.Range('A25').Value
    i = i + 1
End If
Next

Je pense que c'est assez clair, mais dis moi si ce n'est pas le cas;
Bon courage
A+

PS: Fais attention à toi, il y a des coyottes qui rodent dans le coin...
 

RoadRunner

XLDnaute Nouveau
Re:problème de boucle

Salut Shining Hawk, myDearFriend!, le forum

SUPER !

ça fonctionne très bien

une dernière question pour connaitre la différence entre

Integer et Byte ?

et pourquoi mettre des \\ dans :
Sheets(\\'RECAP_MOIS\\')

voila comme ça j'apprend et je me régale...

merci encore...

à bientot
 

myDearFriend!

XLDnaute Barbatruc
Re:problème de boucle

Re

Tout dépend de la valeur maximum que ta variable doit pouvoir atteindre RoadRunner. Avec 'Byte', la variable peut contenir une valeur de 0 à 255 maximum, tandis qu'avec 'Integer', cette valeur peut aller de -32768 à + 32768. Le but du 'jeu' étant d'utiliser le type le plus approprié en privilégiant le moins lourd.

Ci-dessous, le résumé des types de données que tu peux trouver dans l'Aide VBA avec leurs valeurs possibles et leur poids :

TypeDonnees.gif


Pour ta deuxième question, je n'ai pas compris RoadRunner.

Cordialement,


Message pour Shining Hawk : seulement quand je fume le 'hache' de guerre.... heu, quand j'enterre le calumet de la paix je veux dire... heu, non c'est pas ça non plus ! Bon... ben, tipi je tourne l'Apache... :) :) :)
Au plaisir de te croiser ici Michel (si j'ai bien compris)...
 

Shining Hawk

XLDnaute Junior
Re:problème de boucle

Re,

Pour connaitre la différence entre Byte et Integer ... va faire un tour dans l'aide....

j'déconne, Byte est un nombre stocké sur 1octet et ne peut contenir que des nombres allant de 0 à 255; Integer est un nombre stocké sur 2 octets et peut contenir des nombres allant de -32 768 et 32 767.

En ce qui concerne Sheets('RECAP_MOIS'):
Sheets est une collection contenant l'ensemble des onglets. Entre les parenthèses, on peut mettre un paramètre qui correspond à l'index dans la collection.
Ce paramètre peut être:
- un entier (1,2,3,...) correspondant au numéro de l'onglet,
- une chaine de caractère entourée par des \\' correspondant au nom de l'onglet
- un nom de variable. Variable qui contient bien entendu le nom de l'onglet...

Donc si je récapitule, Sheets ca te revoit tous les onglets, et quand tu n'en veux qu'un en particulier, tu le spécifies entre paranthèses.
;)

A bientôt.
 

RoadRunner

XLDnaute Nouveau
Re:problème de boucle

Un grand MERCI à vous deux

ça rentre petit à petit, c'est qu'il y a l'aide VBA mais je m'y perds un peu quand même...

pour la deuxièmme question les antislash ont disparu de mon message c'est pour cela qu'elle devenue incompréhensible

bizarre ces antislash \\ qui disparaisent...

à bientôt...
 

Discussions similaires

Réponses
7
Affichages
354

Statistiques des forums

Discussions
312 391
Messages
2 087 975
Membres
103 690
dernier inscrit
LeDuc