IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Application d'une macro à plusieurs feuilles [XL-2000]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Juillet 2006
    Messages
    366
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 366
    Par défaut Application d'une macro à plusieurs feuilles
    Bonjour,

    j'ai un problème avec une macro que je souhaite éxécuter sur plusieurs feuilles et qui ne marche que sur une... la première.

    Voici le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Sub Couleur()
      Sheets(Array("1", "2")).Select
       Range("b5:c10,b13:c18,b21:c26").Select
      For Each Cellule In Selection
          If Cellule.Value = 2 Or 3 Or 5 Or 7 Then Cellule.Interior.ColorIndex = 8 'bleu vif
          If Cellule.Value = 0 Then Cellule.Interior.ColorIndex = 3 ' rouge
             Next
    End Sub
    Si quelqu'un a une explication, j'avoue avoir essayé ça également :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub Couleur()
      Dim w As Worksheet
        For Each w In Worksheets
            Range("b5:c10,b13:c18,b21:c26").Select
            For Each Cellule In Selection 
                If Cellule.Value = 2 Or 3 Or 5 Or 7 Then Cellule.Interior.ColorIndex = 8 'bleu vif
                If Cellule.Value = 0 Then Cellule.Interior.ColorIndex = 3 ' rouge
             Next Cellule
        Next w
    End Sub
    ou même en remplaçant directement "Selection" dans le For par le Range(...) mais toujours le même résultat, les cases de la feuille 1 sont remplies correctement, mais les cases de la feuille 2 ne le sont pas.

    Merci d'avance pour vos idées :-)

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 130
    Par défaut
    Salut Alqualonde et le forum
    Outre le fait qu'utiliser select/selection est une absurdité, tu ne prends pas en compte les valeurs par défaut : quand tu code Range("A1"), c'est comme si tu écivais : ActiveBook.ActiveSheet.range("A1").value. comme ce sont des valeurs bien pratiques, on les omet, excel se chargeant de complêter. Mais tu ne veux pas la feuille active, mais une feuille particulière. et comme tu fais des tests sur des cellules, Excel ne garde que la feuille active pour travailler (ce n'est peut-être pas exactement ça, mais ça permet de comprendre).

    De plus, il ne faut pas comfondre français et logique :
    A égal 1 ou 2 se traduit en logique A=1 ou A=2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    Sub Couleur()
    Dim F As Worksheet, Plage_F As Worksheet
    Dim Cel As Range, Plage As Range
    For Each F In Sheets(Array("1", "2"))
        Set Plage = F.Range("b5:c10,b13:c18,b21:c26")
        For Each Cel In Plage
            If (Cel = 2) Or (Cel = 3) Or (Cel = 5) Or (Cel = 7) Then
                Cel.Interior.ColorIndex = 8 'bleu vif
            ElseIf Cel = 0 Then
                Cel.Interior.ColorIndex = 3     ' rouge
            Else
                Cel.Interior.ColorIndex = xlNone 'automatique
            End If
        Next Cel
    Next F
    End Sub
    ayant la flemme, j'ai juste repris ton code.
    J'ai ajouté la disparition du fond, si la valeurs ne correspond pas à (0, 2, 3, 5 ou 7) : dans Excel, il ne faut jamais demander au programme de réfléchir, mais lui demander d'exécuter des instructions. Ne connaissant que ce que tu as mis, si tu passes de 0 (fond rouge) à 1, tu aurais eu un fond rouge, alors qu'en passant de 2 à 1 tu aurais eu un bleu vif : une cellule, en fonction de sa valeur ne devrait avoir qu'une "couleur".
    A+

  3. #3
    Membre éclairé
    Inscrit en
    Juillet 2006
    Messages
    366
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 366
    Par défaut
    Merci pour cette réponse très complète et efficace Gorfael !

    J'avoue que je n'ai pas fait assez attention à toutes les valeurs par défaut, c'est noté, je ferai attention pour le futur.

    J'ai bien compris toutes tes remarques, que j'essaierai d'appliquer soigneusement, toutes sauf une : "qu'utiliser select/selection est une absurdité". Dans quelle mesure est-ce une absurdité ? Je ne comprends pas trop ce qui cloche avec les select selection, mais c'est surement car je suis un utilisateur assez occasionnel de VBA qui utilise souvent l'enregistreur de macros et tous ses problèmes de code pas très optimisé.

    Merci beaucoup en tout cas !
    Bonne soirée !

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 130
    Par défaut
    Salut Alqualonde et le forum
    qu'utiliser select/selection est une absurdité
    Peut-être un abus de langage...
    Plage.select => je sélectionne la plage
    Selection.Action => j'agis sur la sélection.
    Les macros apprentissage ne font que coder les actions réelles que tu effectues manuellement. Si tu en utilises une pour mettre A dans la cellule A1, le code sera :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        Range("A1").Select
        ActiveCell.FormulaR1C1 = "A"
        Range("A2").Select
    ActiveCell/Selection même combat
    alors quesuffit amplement. De plus, si tu utilises les macros automatiques et que tu veux modifier une autre feuille, le select déclenche une erreur. Et pour teminer, ça te fais perdre du temps. Et si tu as un code assez complexe, retourner jusqu'à l'instruction Select, pour savoir sur quelle plage tu agis, ne rend certainement pas le code plus lisible.
    Sur certaines instructions, ça peut-être obligatoire (si je ne me trompe pas, les tris ne se font que sur la feuille active). Mais sinon, il est préférable de les éliminer.
    A+

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2007] Application d'une macro sur plusieurs feuilles
    Par cattivo dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 10/01/2015, 10h24
  2. appliquer une macro à plusieurs cellules
    Par litium dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 09/02/2009, 21h53
  3. [E-07] Application d'une macro à plusieurs classeurs
    Par MONINQUE dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 08/12/2008, 21h08
  4. Réponses: 2
    Dernier message: 10/11/2008, 02h51
  5. [vbexcel]vider le contenu d'une ou plusieurs feuille(s)
    Par Mugette dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 24/11/2005, 15h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo