Créer des MFC d'un type prédéfini pour chaque ligne d'une feuille

Bonsoir,

Je te remercie de ta persévérance.

Alors voilà où j'en suis :

– quand j'ouvre le classeur : OK. Toutes les MFC fonctionnent (cf fichier 1-avant.jpg)

– quand je passe en L1C1 : les MFC fonctionnent

– quand je lance la macro par le bouton : les MFC dysfonctionnent... (cf fichier 2-après.jpg)

Je ne sais pas trop quoi faire car le code est trop pointu pour moi....

2 apres 1 avant

on est bien d'accord que c'est sur le fichier que j'ai déposé ?

– quand j'ouvre le classeur : OK. Toutes les MFC fonctionnent (cf fichier 1-avant.jpg)

– quand je passe en L1C1 : les MFC fonctionnent

Là déjà tu n'a rien testé, tu n'as que le résultat que moi j'ai obtenu.

Donc en fait ça ne fonctionne pas du tout chez toi.

Vu que je n'ai pas 2003 ça ne va pas être simple pour voir pourquoi. Tu vas être mes doigts et mes yeux...

Déjà, peux-tu repasser en A1, lancer la macro et me dire ce qu'il en est ? ok ou non ?

Ensuite, lancer cette macro :

Sub test()
    Dim fc As FormatCondition, lig As Long
    With Sheets("Feuil2")
        .[A1:B1].Resize(.Cells(Rows.Count, 1).End(xlUp).Row).ClearContents
        lig = 1: .[A1] = "F6"
        For Each fc In Sheets("Feuil1").[F6].FormatConditions
            lig = lig + 1
            .Cells(lig, 1) = "'" & fc.Formula1
            .Cells(lig, 2) = "'" & fc.AppliesTo.Address
        Next fc
        lig = lig + 1: .Cells(lig, 1) = "F9"
        For Each fc In Sheets("Feuil1").[F9].FormatConditions
            lig = lig + 1
            .Cells(lig, 1) = "'" & fc.Formula1
            .Cells(lig, 2) = "'" & fc.AppliesTo.Address
        Next fc
        .Columns("A:B").EntireColumn.AutoFit
    End With
End Sub

et me copier ici Feuil2!A:B. Mettre en forme avec l'icone </>

Repasser en L1C1, lancer test et me copier ici le résultat.

Si tu n'obtiens pas 6 lignes en Feuil2 remplace F6, F9 par S6, S9 dans la macro test et recommence en me le précisant.

eric

Merci pour ta réponse,

on est bien d'accord que c'est sur le fichier que j'ai déposé ?

Oui. Et j'ai refait les manips plusieurs fois pour être bien sûr.

Déjà, peux-tu repasser en A1, lancer la macro et me dire ce qu'il en est ? ok ou non ?

Pas OK....

3 apres

Ensuite, lancer cette macro

Ça beugue.

J'obtiens le message d'erreur suivant :

"Erreur d'exécution '438': Propriété ou méthode non gérée par cet objet.

Et au débogage, c'est cette ligne qui est surlignée :

.Cells(lig, 2) = "'" & fc.AppliesTo.Address

Je ne peux donc pas aller plus loin...

Bonjour,

Ah, il ne connaissait pas grand chose ce 2003...

Je tenterai autre chose demain, les yeux fermés vu qu'il n'y a pas le choix.

Supprime cette ligne de code, j'aurais au moins une vision de la formule telle qu'elle a été retranscrite dans la MFC.

Avec paramètre en A1 et en L1C1 stp

eric

Bon j'ai fait ce que tu me demandais.

En supprimant la 1ère occurrence de la ligne

.Cells(lig, 2) = "'" & fc.AppliesTo.Address

la macro ne beugue plus, mais ne donne pas les résultats attendus.

J'ai aussi testé en supprimant les 2 occurrences de la ligne de code, mais ça ne produit pas de modification apparente.

Donc voilà les captures d'écran.

Après lancement de la macro modifiée, en style A1

4 apres a1

Après lancement de la macro modifiée, en style L1C1

5 apres l1c1

En revanche, je me suis aperçu par hasard que la position de la cellule active au moment d'appuyer sur le bouton a une influence sur l'apparence des cellules après application des MFC ! Incompréhensible pour moi, mais ça va peut-être te parler.

Ex 1 : cellule active en L9C6

6 cellule active en l9c6

Ex 2 : cellule active en L11C6

7 cellule active en l11c6

J'ai aussi testé le remplacement de F6 et F9 par S6 et S9, sans effet notable...

Merci beaucoup de m''avoir accompagné jusque là.

Mais comme tout ça est laborieux, je comprendrais que tu souhaites laisser tomber – mais j'apprécierais aussi bcp l'inverse :^)

Bonjour,

pour la macro test c'est de son résultat en Feuil2 comme dit que j'avais besoin.

Elle note les formules des MFC.

En revanche, je me suis aperçu par hasard que la position de la cellule active au moment d'appuyer sur le bouton a une influence sur l'apparence des cellules après application des MFC ! Incompréhensible pour moi, mais ça va peut-être te parler.

Oui, je vois ça un peu plus tard. Bizarre que ça fasse ça mais je sais quoi y faire.

eric

Ah oui, j'ai oublié de te dire : en Feuill2 il ne se passe rien : la feuille reste vierge.

Bonjour,

Planning 'CLAP' 5ème...

eric

12planning-1-1.zip (15.05 Ko)

Je répondrai : "CLAP-CLAP-CLAP" !!! Car ça marche parfaitement ! (en A1 et en L1C1)

Youpi...pour moi : car je vais pouvoir appliquer ça à mon grand planning déconnant.

Youpi...pour toi, parce que tu n'auras plus à répondre à mes demandes.

Merci beaucoup et chapeau bas.

(et maintenant, je vais essayer de bien comprendre comment ça marche)

Tant mieux. Je n'étais pas sûr à 100% faute de pouvoir tester sur 2003

Avant de déclarer le sujet résolu, je vais tester sur Office 365 sur Mac à mon boulot....

Bon ben voilà, je viens de tester sur Office 365 sur Mac...et ça beugue.

Quand je clique sur le bouton, j'obtiens un msg d'erreur : "Erreur d'exécution " 5 " : Argument ou appel de procédure incorrect"

pour la ligne

plage.FormatConditions.Add Type:=xlExpression, Formula1:="=ET(LC4<=L2C;LC5>=L3C)"

Du coup j'ai testé pour voir si en remplaçant ET par AND il se passait qqch : non.

Testé aussi : remplacement, par exemple, de LC5 par RC5 : non.

Testé en style L1C1 et en A1 : non.

Je ne sais que faire.

Et bizarrement, je m'aperçois que, quand j'essaie d'enregistrer la création d'une MFC avec Excel 365 sur Mac, l'enregistreur de macros n'enregistre que le nom de la procédure et End Sub mais rien d'autre...

Une idée sur ce qui se passe ?

Alors là aucune idée.

Déjà 365 est assez pénible sur windows avec toutes ses maj permanentes qui plantent des fonctionnalités tirées au hasard, mais sur Mac en plus...

Tu sais quoi ? Tu leur dis de m'offrir un Mac avec 365 pour noël car je n'ai ni l'un, ni l'autre.

Ou bien tu leur dis de le revendre pour te prendre un PC et te filer la différence en prime pour te faire plaisir

Par curiosité essaie avec "=ET($D9<=F$2;$E9>=F$3)" et dans le code remplacer xlR1C1 par xlA1.

Mais on va retomber sur une version incompatible 2003 et/ou sensible à la cellule active.

Et puis c'est peut-être une différence de séparateur.

En enregistrement de macro modifie et remet la MFC =ET(LC4<=L2C;LC5>=L3C) (ajoute et enlève un espace à la fin, mais ne me fait pas une MFC avec juste =" " comme l'autre fois) et donne moi ce que t'as mis l'enregistreur comme formule (s'il a enregistré).

A défaut copie la formule dans une cellule et donne-moi telle qu'elle est écrite.

eric

Hello,

Merci pour ta réponse.

Tu leur dis de m'offrir un Mac avec 365 pour noël car je n'ai ni l'un, ni l'autre

D'accord c'est transmis ;^)

Ou bien tu leur dis de le revendre pour te prendre un PC et te filer la différence en prime pour te faire plaisir

Déjà tenté...sans succès :°(

Quant à l'enregistreur de macros, il n'enregistre rien quand il s'agit de MFC :,^(

A défaut copie la formule dans une cellule et donne-moi telle qu'elle est écrite.

Euhhh, là je ne comprends pas ce que tu souhaites.

Copier-coller ta formule MFC ici (depuis 365 Mac) que je vois s'il y a des différences de syntaxe (séparateur autre que ; par exemple).

Pour l'enregistreur de macro il faut absolument modifier la formule MFC pour qu'il enregistre. C'est pour ça que je te disais d'ajouter puis d'enlever un espace. Ca suffit pour lui faire croire qu'il y a une modif.

eric

Hélas, ça se confirme : l'enregistreur de macros n'enregistre rien dès lors que j'interviens sur des MFC.

Voilà le genre d'enregistrement que j'obtiens :

Sub Macro1()
'
' Macro1 Macro
'

'
End Sub

Cela dit j'ai 2 choses à te signaler :

1/ pour un autre classeur dont le contenu évolue beaucoup moins, j'ai déjà créé (chez moi, sur Excel 2003 sour Win 7) une macro qui efface les MFC et les recrée, et ça fonctionne sans problème (exemple du code plus bas)

2/ quand je crée des MFC sur Excel 365 sur Mac, la plage de cellules auxquelles s'applique la MFC comprend le nom de la feuille, ce qui n'est pas le cas je crois sur Excel 2003 sous Windows.

Ça m'a posé de gros problèmes tant que je travaillais sur Excel 2011 pour Mac. Depuis que je suis passé sur Excel 365 ces problèmes sont résolus, mais c'est peut-être là que ça coince...

Exemple de macro avec effacement/recréation de MFC qui fonctionne sans pb sur Mac et PC :

Columns("D:D").Select
Selection.FormatConditions.Delete
Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _
    "=ET(LC<>"""";LC13="""";LC11<>"""";L(1)C(-1)="""";AUJOURDHUI()-LC6>14)"
    Selection.FormatConditions(1).Font.ColorIndex = 2
Selection.FormatConditions(1).Interior.ColorIndex = 3
Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _
    "=ET(LC<>"""";LC13="""";LC11<>"""";L(1)C(-1)="""";AUJOURDHUI()-LC6>7)"
Selection.FormatConditions(2).Interior.ColorIndex = 45
Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _
    "=ET(LC<>"""";LC13="""";LC11<>"""";L(1)C(-1)="""";AUJOURDHUI()-LC6>0)"
Selection.FormatConditions(3).Interior.ColorIndex = 36

Bonjour,

Je ne vois pas de nom de feuille sur ton exemple...

Et de toute façon j'urilise la variable plage qui est passée en range et qui contient le nom de la feuille en plus de la référence.

Par contre il veut peut-être que ce soit sélectionné. Bien que ce serait étonnant, c'est la seule différence que je vois.

Essaie en ajoutant plage.Select au début des 2 macros MFC

eric

Hello,

Je ne vois pas de nom de feuille sur ton exemple...

Non, car c'est une macro que j'ai créée sur Excel 2003 sous Windows, en revanche, quand j'édite la MFC sur Mac, le champ qui précise la plage où s'applique la MFC comprend le nom de la feuille (alors que sur Excel 2003 sous Windows, non).

Essaie en ajoutant plage.Select au début des 2 macros MFC

J'ai essayé bêtement en faisant ça :

plage.Select
Columns("D:D").Select
Selection.FormatConditions.Delete
Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _
    "=ET(LC<>"""";LC13="""";LC11<>"""";L(1)C(-1)="""";AUJOURDHUI()-LC6>14)"
    Selection.FormatConditions(1).Font.ColorIndex = 2
Selection.FormatConditions(1).Interior.ColorIndex = 3
Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _
    "=ET(LC<>"""";LC13="""";LC11<>"""";L(1)C(-1)="""";AUJOURDHUI()-LC6>7)"
Selection.FormatConditions(2).Interior.ColorIndex = 45
Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _
    "=ET(LC<>"""";LC13="""";LC11<>"""";L(1)C(-1)="""";AUJOURDHUI()-LC6>0)"
Selection.FormatConditions(3).Interior.ColorIndex = 36

...mais j'obtiens :

erreur d'exécution '424' Objet requis

Je suppose que je m'y prends mal...

Bonjour,

quand j'édite la MFC sur Mac, le champ qui précise la plage où s'applique la MFC comprend le nom de la feuille

c'est cette formule que je te demande depuis un moment.

La syntaxe sur Mac risque d'être différente que sur PC.

Je suppose que je m'y prends mal...

C'était prévu pour aller dans les 2 macros MFC que je t'ai fournies

eric

OK, compris.

Alors réponse en début de semaine, quand je serai face à mon Mac.

Bon week end.

Rechercher des sujets similaires à "creer mfc type predefini chaque ligne feuille"