MFC ne semble pas fonctionner [vba]

  • Initiateur de la discussion Initiateur de la discussion grodep
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

grodep

XLDnaute Occasionnel
bonjour à tous, je patauge toujours dans la construction de mon tableau, j'ai écrit un bout de code(surement trop long mais là n'est pas le souci du moment) pour créer une mfc sur un ensemble de cellules.
voici le code
Code:
For i = 2 To S Step 3

Cells(i, 2).Select
  With Selection.Interior
        .Pattern = xlSolid
        .PatternColorIndex = xlAutomatic
        .Color = 65535
        .TintAndShade = 0
        .PatternTintAndShade = 0
    End With
    Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _
        " =countif(RC(6):RC(31),RC)>3"
    Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
    With Selection.FormatConditions(1).Interior
        .PatternColorIndex = xlAutomatic
        .Color = 5287936
        .TintAndShade = 0
    End With
    Selection.FormatConditions(1).StopIfTrue = False
    
Next i

en prenant pour exemple la cellule (2,2), je vérifie que la mfc est chargée et c'est bien le cas. Pourtant, si sur la ligne 2, dans la plage prévue( 6 à 31), j'inscris à 4 reprises la meme valeur que la cellule (2,2), rien ne se passe.

Quelqu'un peut-il éclairer ma lanterne?

Nb: j'aimerai également comprendre comment remplacer dans la formule countif les valeurs 6 et 31 par des variables, mais je ne trouve pas la syntaxe correcte.
Merci d'avance
 
Re : MFC ne semble pas fonctionner [vba]

vais étudier ça, ça a l'air effectivement très intéressant et surtout ça permet de grandement réduire le code.
je réponds de suite à la supposée erreur chr(65+aa) qui n'en est pas une : en effet, si tu prends une valeur de variable parfaitement multiple de 26, alors tu te retrouves avec Chr(64+0) qui renvoie "@" et qui crée donc une erreur.

Mais en fait je l'avais déjà corrigé plus "betement" en mettant la condition "si col2=0 then col2=1" donc ça faisait double emploi.. donc oui c'est une erreur de ma part, puisqu'il fallait supprimer soit l'une soit l'autre 🙂

je regarde ce que tu m'as écris qui bien évidement va m'apprendre d'autres choses et de meilleures manières d'écrire.

Grand merci 🙂
 
Re : MFC ne semble pas fonctionner [vba]

une première question : que signifie ce sigle " \ " ? car il est introuvable dans l'aide Excel ainsi que dans l'aide vba et il m'est grandement nécessaire à la compréhension de ta formule.

d'autant qu'il me faut vraiment la comprendre puisqu'elle ne fonctionne pas pour des valeurs de j = 25 ou 26, elle renvoie alors les sigles "?" et "@" qui ne sont pas ceux cherchés. Désolé pour la prise de tête, je voulais m'en sortir seul, mais j'avoue que je seche devant ce "\" ..
 
Re : MFC ne semble pas fonctionner [vba]

Re 🙂

une première question : que signifie ce sigle " \ " ? car il est introuvable dans l'aide Excel ainsi que dans l'aide vba et il m'est grandement nécessaire à la compréhension de ta formule.

d'autant qu'il me faut vraiment la comprendre puisqu'elle ne fonctionne pas pour des valeurs de j = 25 ou 26, elle renvoie alors les sigles "?" et "@" qui ne sont pas ceux cherchés. Désolé pour la prise de tête, je voulais m'en sortir seul, mais j'avoue que je seche devant ce "\" ..

Il s'agit d'une division euclidienne : \ donne le résultat "entier" de la division. En ce sens, il est complémentaire de Modulo (MOD).

26 \ 26 donne 1, c'est pourquoi j'ai écrit (j + 1) \ 26 de manière à ce que le résultat soit 0 lorsque l'on tombe 26, incrémenté de 1 à chaque multiple suivant de 26.

Teste les différentes valeurs de StrCol pour les valeurs limites de j, avec :

IIf((j + 1) \ 26 > 0, Chr((j + 1) \ 26 + 64), "")

@+

PS : Vérifie car j'ai peut-être fait une erreur entre j + 1 et j - 1 😱
 
Re : MFC ne semble pas fonctionner [vba]

Re 🙂

Envoyé par grodep
d'autant qu'il me faut vraiment la comprendre puisqu'elle ne fonctionne pas pour des valeurs de j = 25 ou 26, elle renvoie alors les sigles "?" et "@" qui ne sont pas ceux cherchés. Désolé pour la prise de tête, je voulais m'en sortir seul, mais j'avoue que je seche devant ce "\" ..

Suite à mon précédent post, dans lequel tu as compris (j'espère) le rôle de "\" , je confirme qu'il faut effectivement écrire "j - 1" et non "j + 1" ; erreur de transcription 🙄

Pour t'en persuader, voici un petit fichier pour démontrer que les valeurs de StrCol sont correctes dans ce cas.

@+
 

Pièces jointes

Re : MFC ne semble pas fonctionner [vba]

Re le fil, salut Lii 🙂

Envoyé par Lii
tiens-tu vraiment à inclure des MFC par VBA ?
Tu peux régler ton problème peut-être autrement.
Vois si cela t'inspire.

Ta solution est effectivement intéressante, mais je crois que nous sommes tous restés sur le titre du fil. grodep a certainement ses raisons pour choisir de coder ses MFC...

Bon, je vous laisse car le match Söderling / Gonzales devient passionnant 😉

@+
 
Re : MFC ne semble pas fonctionner [vba]

Re 🙂

Envoyé par nolich
Suite à mon précédent post, dans lequel tu as compris (j'espère) le rôle de "\" , je confirme qu'il faut effectivement écrire "j - 1" et non "j + 1" ; erreur de transcription 🙄

Pour t'en persuader, voici un petit fichier pour démontrer que les valeurs de StrCol sont correctes dans ce cas.

Je précise que le code est :

For Col = 1 To 79 ' de la colonne A à la colonne CA

et non :

For Col = 1 To 74 ' de la colonne A à la colonne CA

comme inscrit dans la Feuil1 par erreur.

@+
 
Re : MFC ne semble pas fonctionner [vba]

sorry pour la réponse tardive
merci beaucoup, effectivement j'ai fait comme toi et testé de mon coté ta formule pour vérifier son fonctionnement. Après quelques tatonnements, c'est en effet J-1 et non j+1 qu'il faut écrire.

==> Lii : j'avoue que ton fichier et ta solution sont très instructives, et j'avoue surtout que je n'arrive pas du tout à maitriser Array pour l'instant ( 🙁 ) mais dans le classeur que je crée, ta solution ne peut pas me convenir ( ou alors je ne vois pas comment).
Promis, je vais m'intérresser à Array dès que je peux car je suis sur que je vais en avoir besoin très très bientôt...


Merci à tous les contributeurs et a nolich en particulier

Edit : merci Lii pour ton fichier qui me permet en fait de beaucoup mieux comprendre "Array" : en fait, je ne peux pas l'utiliser sur mon tableau pour deux raisons, la raison majeure étant que ta solution impose de relancer la macro a chaque fois pour "coloriser" les cellules alors que je veux que les cellules se colorisent au fur et a mesure que je rentre des valeurs dans la plage de cellules concernées. La deuxième raison est que la plage de colonnes de cellules à vérifier est la même sur toutes les lignes et n'impose donc pas d'utiliser array(mémé si on pourrait utiliser array( 1 to 20) ).

encore merci 🙂
 
Dernière édition:
Re : MFC ne semble pas fonctionner [vba]

en fait je suis SUR d'avoir bientot besoin d'utiliser Array sous peu, car je cherche justement à "colorier" des cellules d'un tableau selon la valeur des dites cellules. Au vu de ton fichier, je sens que c'est vers ce genre de code qu'il va me falloir me tourner 🙂
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

  • Question Question
Microsoft 365 worksheet_change
Réponses
29
Affichages
1 K
Réponses
9
Affichages
767
  • Question Question
Microsoft 365 comparaison texte
Réponses
5
Affichages
759
  • Question Question
Microsoft 365 colorer une plage
Réponses
2
Affichages
923
Réponses
22
Affichages
3 K
Réponses
8
Affichages
1 K
Retour