Macro avec boucle opérant sur plusieurs onglets

Résolu
cs_dede94
Messages postés
5
Date d'inscription
mardi 26 août 2008
Statut
Membre
Dernière intervention
26 août 2008
- 26 août 2008 à 13:55
bigfish_le vrai
Messages postés
1835
Date d'inscription
vendredi 13 mai 2005
Statut
Membre
Dernière intervention
20 novembre 2013
- 26 août 2008 à 16:22
Bonjour,

je souhaite écrire une macro qui fige les valeurs (remplace les formules par leur valeur actuelle) de toutes les cellules de tous les onglets de mon fichier excel, sauf ceux que je liste.
J'ai écrise ceci :
Sub essaiBis()

Dim F As Worksheet
For Each F In ThisWorkbook.Worksheets
If F.Name <> "a" And F.Name <> "b" Then
With F
Cells.Select
Selection.Copy
Range("A1").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("A1").Select
Application.CutCopyMode = False
Range("A2").Select
End With
End If
Next F

La macro fonctionne sur l'onglet actif, mais ne passe pas aux onglets suivant.
Pouvez vous m'aider ?
Merci

5 réponses

cs_dede94
Messages postés
5
Date d'inscription
mardi 26 août 2008
Statut
Membre
Dernière intervention
26 août 2008

26 août 2008 à 14:36
en fait, cela fonctionne en faisant F.activate avant le IF. Merci!
3
jrivet
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
59
26 août 2008 à 14:13
Salut,
Il est inutile de poster deux fois la même question (surtout dans un laps de temps aussi court...)

NOTE: dans ton Code le With F ne sert strictement à rien sauf si tu fais comme suit: essaie ce code peu etre règlera t il ton problème.

Sub essaiBis()

Dim F As Worksheet
   For Each F In ThisWorkbook.Worksheets
       If F.Name <> "a" And F.Name <> "b" Then
           With F
               .Cells.Select
               Selection.Copy
               .Range("A1").Select
               Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
                   :=False, Transpose:=False
               .Range("A1").Select
               Application.CutCopyMode = False
               .Range("A2").Select
           End With
       End If
   Next F
End Sub<hr />, ----
[code.aspx?ID=41455 By Renfield]

Sinon essaie d'ajouter avant ton traitement F.activate
@+: Ju£i€n
Pensez: Réponse acceptée
0
cs_dede94
Messages postés
5
Date d'inscription
mardi 26 août 2008
Statut
Membre
Dernière intervention
26 août 2008

26 août 2008 à 14:32
merci. En fait dans mon deuxième message, j'avais enlevé les commentaires, mis pendant mes essais personnels..

Cette fois, j'ai un message d'erreur disant "400"...J'ai pensé que ça pouvait etre une limitation dun nombre de calculs, j'ai mis 500 iterations, mais ne change rien. Une idée ?
Merci
0
jrivet
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
59
26 août 2008 à 15:05
Re,
Si tu estimes que ton problème est résolu, penses à appuyer sur réponse acceptée sur le OU les posts qui t'on aider à avancer.

@+: Ju£i€n
Pensez: Réponse acceptée
0

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

Posez votre question
bigfish_le vrai
Messages postés
1835
Date d'inscription
vendredi 13 mai 2005
Statut
Membre
Dernière intervention
20 novembre 2013
12
26 août 2008 à 16:22
Salut,


en fait, cela fonctionne en faisant F.activate avant le IF. Merci! 

oui mais une reponse accepter sur une mauvaise methode je suis pas sur que cela nous aide !

le F.activate qui est a proscrir car  activate et autre select ne sont generalement pas recommandé. Il sont source d'erreur et de lenteur.
Le code donné par jrivet qui exploite le with est bien meilleur et est en fait la seul reponse acceptable ici

et pour aller au bout du raisonnement voici un code qui fait la meme chose (c'est a dire rien vu que tu copies les cellules de chaque feuille pour les coller au meme endroit) sans select et sans activate :

Dim F As Worksheet
   For Each F In ThisWorkbook.Worksheets
       If F.Name <> "a" And F.Name <> "b" Then
           With F
               .
Cells.Copy
               F.Paste .
Range("A1") 'attrention il y a un espace entre F.Paste et .
Range
           End With
       End If
   Next F
End Sub

A+
0