J'ai constaté que les formules et les plages de mise en forme conditionnelle s'ajustent automatiquement lorsque vous copiez, supprimez ou déplacez des données dans une feuille de calcul. Bien que ce soit une bonne idée, cela a tendance à me casser les choses de façon plutôt étrange.
Pour éviter cela, j'ai essayé d'écrire des règles qui s'appliquaient à la feuille de calcul entière et supprimaient les en-têtes de colonne pour mettre en surbrillance les données que je voulais vérifier.
Exemple: =AND(A$1="Check This Column For Blanks),ISBLANK(A1))
appliqué à =$1:$1048576
Cependant, même avec la règle explicitement appliquée à la feuille entière, elle était toujours automatiquement ajustée (et cassait de manière étrange en le faisant) alors que je travaillais dans la feuille.
Comment puis-je éviter ça?
Lorsque j’ai besoin d’une plage qui ne devrait pas changer dans toutes les circonstances , notamment le déplacement, l’insertion et la suppression de cellules, j’ai utilisé une plage nommée et le symbole INDIRECT
fonction.
Par exemple, si je souhaite appliquer une plage toujours aux cellules A1:A50
, j'ai défini une plage nommée via le gestionnaire de noms:
Dans le gestionnaire de noms, ajoutez une nouvelle plage (cliquez sur Nouveau) et dans le champ Fait référence à:, utilisez la fonction INDIRECT pour spécifier la plage de cellules souhaitée, par exemple. =INDIRECT("A1:A50")
ou =INDIRECT("Sheet!A1:A50")
. La plage n'étant techniquement qu'un argument textuel, aucune quantité de cellules réarrangées ne sera mise à jour par Excel.
En outre, cela fonctionne au moins dans Excel 2010 et Excel 2013. Bien que ma capture d'écran date de 2013, j'ai utilisé cette technique exacte en 2010 dans le passé.
Gardez à l'esprit que cette invariance peut aussi vous faire trébucher. Par exemple, si vous modifiez le nom de la feuille, la plage nommée sera brisée.
J'ai remarqué un impact mineur sur les performances lors de l'utilisation de cette stratégie sur un nombre important de cellules. Un modèle que j'utilise au travail utilise cette technique avec des plages nommées qui couvrent plusieurs milliers de plages de cellules disparates. Excel est un peu lent lorsque j'actualise les cellules de ces plages. Cela peut venir de mon imagination ou du fait qu'Excel appelle une ou plusieurs fonctions supplémentaires pour INDIRECT.
J'ai trouvé que les règles sont très faciles à enfreindre, mais voici quelque chose que vous pouvez essayer et qui ne semble pas enfreindre les règles.
Vous pouvez modifier le texte à l'intérieur des cellules. Si vous devez ajouter une ligne, ajoutez vos données à la fin de votre tableau et triez-les à nouveau. Si vous devez supprimer une ligne, supprimez uniquement le texte/les chiffres, puis triez à nouveau le tableau.
Cela fonctionne pour moi lorsque la mise en forme conditionnelle est appliquée aux colonnes et que je règle généralement la mise en forme de toute la colonne, par exemple. $ F: $ F. Cela devrait quand même fonctionner si vous formatez pour une plage partielle, assurez-vous simplement que lorsque vous avez terminé d'ajouter/supprimer et d'utiliser toutes les données que vous souhaitez mettre en forme se trouvent toujours dans les paramètres de votre plage d'origine.
C'est une énorme frustration pour moi aussi.
J'espère que ça aide.
J'ai constaté que l'utilisation de la fonction INDIRECT
et de la fonction ROW
dans la règle de mise en forme conditionnelle élimine le problème de la création par Excel de nouvelles règles et de la modification de la plage.
Par exemple, je voulais ajouter une ligne entre les lignes de ma feuille de calcul du registre de chéquier lorsque le mois changeait d’une ligne à l’autre. Donc, ma formule dans la règle des FC est la suivante:
=MONTH(INDIRECT("C"&ROW()))<>MONTH(INDIRECT("C"&ROW()-1))
où la colonne C de ma feuille de calcul contient la date. Je n'avais rien à faire de particulier avec la plage (je n'avais pas à définir un nom de plage, etc.).
Ainsi, dans l'exemple de l'affiche originale, au lieu de "A1" ou "A $ 1" dans la règle des FC, utilisez:
INDIRECT("A"&ROW())
Je ne suis pas DONC et je fais souvent face au même problème.
Je dirais que le champ "Appliquer à" du panneau de mise en forme conditionnelle (CF) fonctionnera TOUJOURS de manière dynamique. Donc, il faudra TOUJOURS convertir les références au format =$A$1:$A$50
.
C'est pénible.
J'ai connu un problème très similaire. J'ai créé quelques macros pour ajouter des lignes et copier des formules, puis ajuster les colonnes et la taille des lignes pour formater l'apparence de la feuille. J'ai constaté que ce problème se produit à l'une des deux occasions suivantes.
1) Lorsque quelque chose de INSIDE le "s’applique à" est coupé/collé en dehors de cette plage.
2) Lorsqu'il y a des cellules fusionnées dans "s'applique à", et que n'importe quelle ligne ou colonne est ajustée.
Lors du problème de cellule fusionnée, il apparaît qu'Excel doit tout annuler, recalculer son application conditionnelle, ajuster toutes les cellules (ajouter ou supprimer des lignes ou non), puis les rétablir. C'est invisible pour nous, mais cela semble être ainsi qu'il est appliqué.
Pensée qui pourrait nous aider à trouver la solution à ce problème.
-T
Dans la formule de mise en forme conditionnelle, utilisez la notation R1C1
avec la fonction INDIRECT
:
Exemple 1:
If same row column A = 1
...
=IF($A1=1,1,0) becomes
=IF(INDIRECT("RC1",FALSE)=1,1,0)
Exemple 2:If same row column A = 2 AND next row column A = 3
...
=IF(AND(($A1=2),($A2=3)),1,0) becomes
=IF(AND((INDIRECT("RC1",FALSE)=2),(INDIRECT("R[1]C1",FALSE)=3)),1,0)
J'ai une solution simple pour cela.
Il suffit de déplacer vers une cellule qui se trouve dans la plage (celle qui n'est pas séparée de la plage), cliquez sur Format Painter puis collez sur la colonne entière. Encore une fois, il montrera Où il est cassé, il vous suffit de faire un Format Painter à la cellule qui a cassé la plage. Maintenant, cela aussi peut sembler un peu long, vous pouvez simplement construire une macro simple pour cela.
Si le cas d'utilisation consiste à générer une feuille de calcul, cela devrait bien fonctionner:
Vous pouvez contourner l'utilité excessive d'Excel avec quelques étapes de configuration uniques, si vous souhaitez également effectuer manuellement un rafraîchissement simple des données finales après toute la saisie.
En supposant que vos données soient classées normalement (en lignes):
Input
. Ne lui appliquez aucune mise en forme conditionnelle. N'hésitez pas à modifier le contenu de votre coeur (par exemple, supprimer/insérer/copier/coller)Output
). Copiez manuellement votre mise en forme globale, telle que la largeur des colonnes et la mise en forme des en-têtes (pas le contenu des en-têtes, mais simplement la mise en forme).$A$1
dans la formule suivante par l'emplacement du début de votre ligne d'en-tête, puis copiez-le dans toutes les colonnes et toutes les lignes que vous souhaitez générer: =IF(LEN(OFFSET(Input!$A$1,ROW()-1,COLUMN()-1))>0,OFFSET(Input!$A$1,ROW()-1,COLUMN()-1),"")
(L'instruction IF(LEN(...)>0,...,"")
est nécessaire car Excel détermine également de manière utile les types de données et utilise 0
pour les cellules vides sinon, et les termes -1
proviennent de la sémantique offset par rapport à la sémantique ordinale)Output
.Ceci copie votre feuille de données Input
dans la feuille Output
sans aucune référence de cellule qu'Excel aurait automatiquement massacré afin que vous puissiez définir en toute confiance votre mise en forme conditionnelle sur la feuille Output
.
Il vous suffit d'étendre manuellement la plage à laquelle la formule est appliquée dans la feuille Output
lorsque la taille de vos données Input
change.
Je vous suggère d'éviter de fusionner des cellules.
P.S. Cette question a été posée à de nombreuses reprises (elle s'applique également à Google Sheets, qui est un clone d'Excel). Vous pourrez donc éventuellement trouver une meilleure solution pour votre cas d'utilisation: