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 :

Modifier couleur cellules d'une feuille inactive


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Inscrit en
    Août 2009
    Messages
    817
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 817
    Points : 314
    Points
    314
    Par défaut Modifier couleur cellules d'une feuille inactive
    Bonjour,

    J'ai une petite question de base.
    Je boucle sur une feuille et je compare les valeurs dans une autre.
    Quand je trouve des différences, je recopie les valeur et je voudrais les colorier pour que par la suite l'utilisateur décide des valeurs à conserver.

    Le code fonctionne sauf en ce qui concerne la mise en couleur, en effet j'ai une erreur 1004 car je n’atteins pas les cellules.
    Alors que si en je me mets en pas à pas et que j'active la feuille ça passe.
    Je pourrais passer par un sheets.activate mais n'y a-t-il pas une syntaxe qui me permette directement de passer la commande ?
    Ce que je ne comprends pas c'est que la séquence consistant à ajouter une ligne et à copier les valeurs d'une feuille vers l'autre passe.
    J4ai essayé avec worksheets et sheets.
    merci pour vos explications

    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
    17
    For Each cell2 In Worksheets(WS_Call).Range("a" & NR_Ligne_Call & ":v" & NR_Ligne_Call)
    If cell2.Value <> Worksheets("donnees").Cells(NR_Ligne, cell2.Column).Value Then '.Copy .Range("a1").End(xlDown).Offset(1, 0)
    Worksheets("Donnees").Cells(NR_Ligne + 1, cell2.Column).EntireRow.Insert Shift:=xlDown
    With Worksheets("Donnees")
        Worksheets(WS_Call).Range("a" & NR_Ligne_Call & ":v" & NR_Ligne_Call).Copy .Range("a" & NR_Ligne + 1)
    End With
    
    '   c'est là que ça passe en erreur 1004
        Sheets("Donnees").Range(Cells(NR_Ligne + 1, 1), Cells(NR_Ligne + 1, 22)).Interior.ColorIndex = 36
    '    Sheets("Donnees").Range(Cells(NR_Ligne, 23), Cells(NR_Ligne + 1, 34)).FillDown
    'End With
    
    MsgBox "Ligne : " & NR_Ligne_Call
    Exit For
    'Else: MsgBox "OK" & NR_Ligne_Call
    End If

  2. #2
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 653
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 653
    Points : 34 370
    Points
    34 370
    Par défaut
    Salut,

    essaie de passer par la feuille :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("Donnees").Range(Sheets("Donnees").Cells(NR_Ligne + 1, 1), Sheets("Donnees").Cells(NR_Ligne + 1, 22)).Interior.ColorIndex = 36

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    95
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 95
    Points : 52
    Points
    52
    Par défaut
    Bonsoir,
    j'ai fait un truc comme çà :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
                    Set Plage = Sheets("Donnees").Range(Cells(2, 1), Cells(2, 22))
                    With Plage
                        .Interior.ColorIndex = 36
                    End With
    chez moi ça colle

  4. #4
    Membre averti
    Inscrit en
    Août 2009
    Messages
    817
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 817
    Points : 314
    Points
    314
    Par défaut
    Merci Jean-Philippe, ta solution fonctionne,

    Ce qui m'intéresse c'est de garder cette syntaxe.
    J'ai toujours des soucis pour comprendre vraiment les différentes portées de sheets, worskheets etc..

    Patyom, j'ai testé aussi ta solution, mais celle ci ne sélectionne pas la feuille ciblée, donc ça ne marche pas non plus.

    en tout cas merci
    Denis

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    95
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 95
    Points : 52
    Points
    52
    Par défaut
    Patyom, j'ai testé aussi ta solution, mais celle ci ne sélectionne pas la feuille ciblée, donc ça ne marche pas non plus.
    Tu n'as pas besoin de sélectionner la feuille, ici tu la modifies simplement sans avoir à l'afficher à l'écran.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    NR_Ligne_Call = 2  ' pour exemple
    Set Plage = Sheets("Donnees").Range(Cells(NR_Ligne_Call + 1, 1), Cells(NR_Ligne_Call + 1, 22))
    Si ça ne fonctionne pas c'est que tu as un PB avec ta variable "NR_Ligne_Call"

  6. #6
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 653
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 653
    Points : 34 370
    Points
    34 370
    Par défaut
    SAlut Patyom,

    en principe, si la feuille active n'est pas Donnees, alors ton code ne devrait pas fonctionner

  7. #7
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 138
    Points : 9 972
    Points
    9 972
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    le problème est la filiation de tes Cells()

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("Donnees").Range(Cells(NR_Ligne + 1, 1), Cells(NR_Ligne + 1, 22)).Interior.ColorIndex = 36
    si la feuille Donnees est active, alors tes Cells y font référence
    si ce n'est pas le cas, tes Cells font référence à ceux de la feuille active

    d'où le plantage : tu fais référence à la plage d'une feuille.... en utilisant une plage d'une autre feuille

    le bloc With/End With permet de ne pas mettre Sheets("Donnees") partout sur cette ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    With Sheets("Donnees")
        .Range(.Cells(NR_Ligne+1,1), .Cells(NR_Ligne+1,22)).Interior.ColorIndex = 36
    End With
    Il faut prendre la sage attitute de ne JAMAIS travailler sur les objets actifs, et de renseigner à minima la feuille (et mieux encore le classeur)

  8. #8
    Membre averti
    Inscrit en
    Août 2009
    Messages
    817
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 817
    Points : 314
    Points
    314
    Par défaut
    Merci pour vos explications complémentaires très utiles.

    En effet j'essaie de me débarasser de l'activation des feuilles (d'où ma question).
    L'activation des feuilles est un héritage de l'autoformation avec l'enregistreur de macro qui lui entre autre active les feuilles au fur et à mesure de l'enregistrement.
    Il faudrait écrire un petit utilitaire de conversion de l'enregistreur .
    Merci et bonne année 2018 !
    Denis

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 12/03/2011, 16h42
  2. définir la cellule active d'une feuille inactive
    Par Fanfan2A dans le forum Macros et VBA Excel
    Réponses: 14
    Dernier message: 24/11/2009, 15h56
  3. Couleur d'une cellule d'une feuille Excel
    Par FredericB dans le forum C++Builder
    Réponses: 3
    Dernier message: 13/09/2006, 22h09
  4. [VB6] Protection de cellules d'une feuille Excel
    Par Carole_Canada dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 15/02/2006, 19h08
  5. [VBA-E] supprimer le contenu de toutes les cellules d'une feuille
    Par BipBip2 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 13/08/2004, 15h13

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