Macro et couleurs de MFC

Résolu
Utilisateur anonyme -  
eriiic Messages postés 24603 Date d'inscription   Statut Contributeur Dernière intervention   -
Salut,

est-il possible de demander à Excel d'ouvrir un classeur sur une feuille où une MFC colorie des cellules?

i.e. :
si la cellule A2 de la feuille 1 est coloriée par une MFC alors activer la feuille 1
sinon si la cellule A2 de la feuille 2 est coloriée par une MFC alors activer la feuille 2
sinon si la cellule A2 de la feuille 3 est coloriée par une MFC alors activer la feuille 3
fin si

j'ai essayé en mettant si la couleur de remplissage est différente du blanc, mais ça ne marche pas car sans les MFC, les cellules sont toutes non remplies!

merci pour votre aide.
A voir également:

12 réponses


 
Bonjour,
Que fait-on si les 3 cellules A2 sont coloriées ?
0
Utilisateur anonyme
 
Salut,

comme ce sont des si, si la première condition est remplie, ça désactive les suivantes.
on regarde d'abord pour la feuille, si oui alors on active, sinon on regarde la feuille 2 et ainsi de suite.
0

 
Bonjour,
Oui d'accord avec les SI , mais le [si] de MFC de la feuille 1 n'a pas d'influence sur la MFC des autres, donc les cellules A2 peuvent être toutes colorées !
0
Utilisateur anonyme
 
les MFC entre feuilles sont indépendantes oui.
elles sont tout le temps de la même forme et les 3 MFC par feuille sont identiques.
du genre, si la différence entre aujourd'hui et une date est compris entre 15 et 30 jours alors la MFC colorie en orange. etc...
0

 
Bonjour,
Je reviens encore une fois, les cellules [A2] des feuilles 1, 2 et 3 peuvent être colorées, dans ce cas qu'elle est la feuille à activer dès l'ouverture.
C'est votre problème, la procédure à mettre dans [ThisWorkbook], active la feuille dont A2= rouge.
Private Sub Workbook_Open() 
Dim sh As Worksheet 
For Each sh In Worksheets 
    If sh.Range("A2").Interior.Color = 255 Then 
        sh.Activate 
        Exit Sub 
    End If 
Next sh 
End Sub 

Salutations.
Le Pingou
0
Utilisateur anonyme
 
Salut,

avec les si justement je définis un ordre.
d'abord regarder pour la feuille 1, puis la feuille 2 et enfin la feuille 3.
et si aucune des feuilles n'a la cellule A2 coloriées, alors on active la feuille 1.
0
Utilisateur anonyme
 
re,

je viens d'essayer le code que tu as mis, mais ça ne marche pas.
comme je l'avais mis dans le message 1, sans les MFC, les cellules sont toutes non remplies, blanches.
donc forcément, il ne trouve aucune cellule et active la dernière feuille. alors qu'en fait, il y a des cellules colorées.
il faudrait arriver à prendre en compte les couleurs données par les MFC.
0

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

Posez votre question

 
Bonjour,
Ceci : comme je l'avais mis dans le message 1

et la suite :
si la cellule A2 de la feuille 1 est coloriée par une MFC alors activer la feuille 1
sinon si la cellule A2 de la feuille 2 est coloriée par une MFC alors activer la feuille 2
sinon si la cellule A2 de la feuille 3 est coloriée par une MFC alors activer la feuille 3


De ce fait, la procédure proposée se base sur la cellule A2 de chaque feuille et en plus comme vous ne mentionnez aucune couleur de fond, j'ai par défaut pris le rouge.
Ma procédure marche très bien, je l'ai testé, bien entendu avec la couleur rouge(code=255).

Salutations.
Le Pingou
0
Utilisateur anonyme
 
re,

je t'assure je l'ai testé et elle marche pas, en tout cas sur mon classeur.

toutes les cellules sont vides pour le remplissage.
les MFC colorent soit en rouge, soit en jaune, soit en vert.
pour le moment, en feuille 1, A2 est en rouge et A3 en vert.
en feuille 2, A2 est en jaune.
en feuille 3, A2 reste non colorié.
avec le prog, Excel s'ouvre sur la feuille 3, alors que normalement elle aurait dû s'ouvrir sur le feuille 1, comme A2 est en rouge imposé par la MFC!

il n'y a pas une "feinte" avec les couleurs imposées par les MFC et les couleurs de remplissage qu'on peut donner sans MFC? je pense vraiment que ça vient de là le problème.

tu dis que ça a marché chez toi, mais tu as essayé en définissant toi-même une couleur de remplissage ou par le biais d'une MFC?
0

 
Bonjour,
Au minimum il faudrait quand même contrôler qu'elle est le code de votre couleur et remplacer le mien (255) par le votre.
Au passage, pour ouvrir la feuille 1 si pas de rouge, vous ajoutez la ligne ci-après( entre [Next sh] et [End Sub] )

Sheets("Feuil1").Activate

Salutations.
Le Pingou
0
Utilisateur anonyme
 
j'ai vérifié ça et c'est bien 255, rouge pur.
j'avais même essayé de remplacer le chiffre par vbred.
0

 
Bonjour,
Il y a certainement une erreur chez vous,
la procédure est-elle dans [ThisWorkbook] .... oui/non
Est-ce bien la cellule [A2] de chaque feuille qui à la couleur de fond ...oui/non

C'est aussi possible de mettre une copie du classeur sur https://www.cjoint.com/
0
Utilisateur anonyme
 
http://www.cijoint.fr/cjlink.php?file=cj201005/cijtEzX9Pe.xls
j'ai mis un classeur simple. normalement il devrait s'ouvrir sur la feuille 2 qui est la seule à avoir la cellule A2 en rouge. je n'ai même pas utilisé de MFC.
et ben ça ne marche pas quand même! je comprends pas. j'ai loupé quelque chose?!
0
Utilisateur anonyme
 
dans mon vrai classeur, la procédure est bien dans [ThisWorkbook].
c'est bien à partir de la ligne 2 qu'il peut y avoir des couleurs. j'ai simplifié en disant A2, pas besoin de vérifier sur plusieurs cellules d'une même ligne.
0

 
Bonjour,
J'ai juste remplacé le code [vbred] (n'est pas valable) par 255, plus l'instruction pour ouvrir sur feuille 1 si pas de rouge.
Cela fonctionne correctement à l'ouverture : https://www.cjoint.com/?fosu6jxBYW
0
Utilisateur anonyme
 
on est d'accord qu'avec le fichier que tu as mis, ça devrait s'ouvrir sur le feuille3?
0
Utilisateur anonyme
 
ça ne fonctionne pas chez moi. et chez toi?
en fait, elle s'ouvre sur la même feuille que lors du précédent enregistrement.
0

 
Bonjour,
Oui à l'ouverture sur la feuille 3.
Je suppose que vous avez activé les macros suite à l'avertissement de sécurité, sinon rien ne fonctionne ?
0
Utilisateur anonyme
 
Re,

j'aurais besoin d'aide pour faire la macro avec les formules parce que là non plus j'y arrive pas!

voilà ce que j'ai mis :
Dim sh As Worksheet
For Each sh In Worksheets
If (D2 - Date) = 0 Then
sh.Activate
End If
Next sh
For Each sh In Worksheets
If (D2 - Date) >= 1 And (D2 - Date) < 10 Then
sh.Activate
End If
Next sh
For Each sh In Worksheets
If (D2 - Date) >= 10 And (D2 - Date) <= 15 Then
sh.Activate
End If
Next sh
Sheets("Feuil1").Activate


pour expliquer cette macro.
il faut regarder sur toutes les feuilles si D2-aujourdhui()=0 (MFC rouge)
la première qui est trouvée avec cette condition, doit être activée.
ensuite il faut regarder sur toutes les feuilles si et(D2-aujourdhui()>=1;D2-aujourdhui()<10) (MFC jaune)
la première qui est trouvée avec cette condition, doit être activée.
enfin il faut regarder sur toutes les feuilles si et(D2-aujourdhui()>=10;D2-aujourdhui()<=15) (MFC verte)
la première qui est trouvée avec cette condition, doit être activée.
sinon, activer la feuille 1.

j'espère que la macro retranscrit effectivement ce que je souhaite faire.
mais là encore problème car avec ce que j'ai, le classeur devrait s'ouvrir sur la feuille 2 puisque qu'il y a du jaune en ligne 2.

merci pour votre aide.
0
eriiic Messages postés 24603 Date d'inscription   Statut Contributeur Dernière intervention   7 276
 
Pas le temps de regarder dans le détail mais déjà :
- remplace D2 par sh.[D2]
- inverse tes tests pour finir par le plus important, ou bien positionne un flag pour ne pas réaliser les suivants si la condition est réalisée.
- ajoute application.screenupdating=false au début pour éviter le clignotement des pages (remettre à true à la fin)
eric
0
Utilisateur anonyme
 
application.screenupdating=false je l'avais déjà mis car en fait je n'ai pas que ce prog qui tourne avec ce classeur.

- inverse tes tests pour finir par le plus important, ou bien positionne un flag pour ne pas réaliser les suivants si la condition est réalisée.
je viens de m'en apercevoir en regardant pas à pas l'exécution de la macro.
comment on fait pour ajouter un flag?

j'aimerais qu'il y ait un ordre de priorité parmi les feuilles. je pensais qu'il était pris en compte avec le prog mais non!
donc dans l'ordre, il faudrait :
- regarder les conditions (rouge, puis jaune, puis vert) et arrêter ce test dès qu'il en trouve une
- puis regarder les feuilles (feuille 1, puis 2, puis 3) et arrêter ce test dès qu'il en trouve une
ou encore pour être plus clair, l'ordre de priorité :
1R, 2R, 3R, 1J, 2J, 3J, 1V, 2V, 3V
et si rien de tout ça, activer la feuille 1.
0
eriiic Messages postés 24603 Date d'inscription   Statut Contributeur Dernière intervention   7 276
 
Sans tester et en gardant la structure de ton exemple ça devrait plus s'approcher de ça :
Sub test()
    Dim sh As Worksheet, ok As Boolean
    Sheets("Feuil1").Activate
    For Each sh In Worksheets
        If (sh.[D2] - Date) = 0 Then
            sh.Activate
            ok = True
            Exit For
        End If
    Next sh
    If Not ok Then
        For Each sh In Worksheets
            If (sh.[D2] - Date) < 10 Then
                sh.Activate
                ok = True
                Exit For
            End If
        Next sh
    End If
    If Not ok Then
        For Each sh In Worksheets
            If (sh.[D2] - Date) <= 15 Then
                sh.Activate
                Exit For
            End If
        Next sh
    End If
End Sub


eric
0