Comment empêcher les formules et les plages de mise en forme conditionnelle de changer automatiquement?

24

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 à casser les choses pour moi de manière assez étrange.

Pour éviter cela, j'ai essayé d'écrire des règles qui s'appliquaient à l' ensemble de la feuille de calcul et saisissaient les en-têtes de colonne pour mettre en évidence 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 s'ajustait toujours automatiquement (et cassait de façon étrange en le faisant) pendant que je travaillais dans la feuille.

Comment puis-je éviter ça?

Iszi
la source
Peut-être que vous ne pouvez tout simplement pas utiliser la feuille de calcul entière ... Pouvez-vous donner un exemple plus concret de ce que vous faites?
Doktoro Reichard
Pourriez-vous peut-être avoir une capture d'écran et indiquer quelles zones sont cassées?
Jerry
@JohnBensin On dirait que c'est exactement ce que je cherchais. J'essaierai de m'en souvenir une prochaine fois.
Iszi
@Iszi Je l'ai ajouté comme réponse. Je suis sûr que vous savez comment ajouter des plages nommées, mais j'inclus des détails dans la réponse pour les futurs visiteurs (et parce que lorsque j'ai appris à utiliser Excel pour la première fois, je ne m'en souvenais jamais).
John Bensin
Un article sur ce qui ne va pas: cauchemar de mise en forme conditionnelle Excel 2010 . Ils ont certainement aggravé la situation en essayant de l'améliorer un peu ...
RomanSt

Réponses:

7

Lorsque j'ai besoin d'une plage qui ne devrait en aucun cas changer , y compris le déplacement, l'insertion et la suppression de cellules, j'ai utilisé une plage nommée et la INDIRECTfonction.

Par exemple, si je veux qu'une plage s'applique toujours aux cellules A1:A50, j'ai défini une plage nommée via le gestionnaire de noms:

ajouter une plage nommée

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"). Étant donné que la plage n'est techniquement qu'un argument textuel, aucune quantité de cellules réorganisées ne provoquera la mise à jour d'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é.

Avertissements

  1. Gardez à l'esprit que cette invariance peut également vous faire trébucher. Par exemple, si vous modifiez le nom de la feuille, la plage nommée sera rompue.

  2. J'ai remarqué un léger impact 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 s'étendent sur plusieurs milliers de plages de cellules disparates, et Excel se sent un peu lent lorsque je mets à jour les cellules de ces plages. Cela peut être mon imagination ou le fait qu'Excel effectue des appels de fonction supplémentaires à INDIRECT.

John Bensin
la source
Bien que la plage nommée fournisse une méthode abrégée pratique pour faire référence aux cellules cibles, ne pourriez-vous pas simplement utiliser la INDIRECTfonction seule?
Iszi
@Iszi Oui, je le crois. Cependant, comme vous le dites, les plages nommées sont pratiques, et je me retrouve souvent à faire référence à la même plage de cellules à plusieurs endroits dans un classeur. J'essaie de garder les plages aussi petites que possible, pour des raisons de performances, et de les modifier uniquement lorsque cela est nécessaire, donc l'utilisation d'une plage nommée signifie que je n'ai besoin de la modifier qu'en un seul endroit.
John Bensin
@Iszi Avez-vous fini par utiliser cette méthode? Si vous rencontrez des pièges ou des inconvénients que je n'ai pas mentionnés, faites-le moi savoir ou modifiez-les dans la réponse. J'utilise cette stratégie à suffisamment d'endroits pour que je ne veuille pas que quelque chose revienne vous hanter ou que je descende la route.
John Bensin
Je n'ai pas encore réussi à l'implémenter, mais le ferai probablement la prochaine fois que je rencontrerai ce problème. Je vous ferai savoir s'il y a des problèmes.
Iszi
9
J'ai essayé d'utiliser la plage nommée dans la colonne "S'applique à" du Gestionnaire de règles de mise en forme conditionnelle, mais la plage nommée est développée lorsque je clique sur "OK" ou "Appliquer". Suis-je en train de mal faire?
Mihai Alexandru Bîrsan
2

J'ai trouvé que les règles sont très faciles à enfreindre, mais voici quelque chose que vous pouvez essayer qui ne semble enfreindre aucune règle.

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 nombres, puis triez à nouveau le tableau.

Cela fonctionne pour moi lorsque j'ai une mise en forme conditionnelle qui est appliquée aux colonnes, et je règle généralement la mise en forme pour la colonne entière, par exemple. $ F: $ F. Cela devrait toujours fonctionner si vous formatez pour une plage partielle, assurez-vous simplement que lorsque vous avez terminé d'ajouter / supprimer et d'utiliser que toutes les données que vous souhaitez mettre en forme sont toujours dans vos paramètres de plage d'origine.

C'est aussi une énorme frustration pour moi.

J'espère que ça aide.

Paul
la source
1

Je ne suis pas si sûr 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. Ainsi, il convertira TOUJOURS toutes les références au format =$A$1:$A$50.

C'est une douleur.

Leandro Ferreira Fernandes
la source
Ce n'est pas le cas, même lorsque j'utilise des déclarations explicites ou variables ($ ou no $).
Paul
1

J'ai constaté que l'utilisation de la INDIRECTfonction et de la ROWfonction dans la règle de mise en forme conditionnelle élimine le problème d'Excel créant de nouvelles règles et modifiant la plage.

Par exemple, je voulais ajouter une ligne entre les lignes de ma feuille de calcul de registre de chéquier lorsque le mois passait d'une ligne à la suivante. Donc, ma formule dans la règle des FC est:

=MONTH(INDIRECT("C"&ROW()))<>MONTH(INDIRECT("C"&ROW()-1))

où la colonne C de ma feuille de calcul contient la date. Je n'ai rien eu à faire de spécial pour la plage (je n'ai pas eu à définir de nom de plage, etc.).

Ainsi, dans l'exemple de l'affiche originale, au lieu de "A1" ou "A $ 1" dans la règle CF, utilisez:

INDIRECT("A"&ROW())
CRS
la source
0

J'ai rencontré un problème très similaire. J'ai créé quelques macros pour ajouter des lignes et copier des formules, puis ajuster les colonnes et les tailles de ligne pour formater l'apparence de la feuille. J'ai trouvé que ce problème se produit à l'une des deux occasions.

1) Lorsque quelque chose d'INTERIEUR le "s'applique à" est coupé / collé en dehors de cette plage.

2) Lorsqu'il y a des cellules fusionnées à l'intérieur du "s'applique à", et n'importe laquelle des lignes ou colonnes est ajustée.

Il apparaît lors du problème de fusion des cellules, qu'Excel doit tout annuler, recalculer son application conditionnelle, ajuster toutes les cellules (ajouter ou supprimer des lignes ou autre), puis les refaire retomber. C'est invisible pour nous, mais cela semble être la façon dont il est appliqué.

Pensée qui pourrait nous aider à trouver la solution à ce sujet.

-T

Terrence
la source
0

J'ai une solution simple pour cela.

Déplacez-vous simplement vers une cellule qui est dans la plage (celle qui n'est pas cassée de la plage), cliquez sur Format Painter puis collez-la sur toute la colonne. Encore une fois, il montrera où il s'est cassé, il vous suffit de faire un peintre de format pour la cellule qui a cassé la plage. Maintenant, cela peut aussi sembler un peu long, vous pouvez simplement créer une macro simple pour cela.

Girish Nagarhalli
la source
0

Dans la formule de mise en forme conditionnelle, utilisez la R1C1notation avec la INDIRECTfonction:
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)
Karen B
la source
0

Si le cas d'utilisation est de générer une feuille de calcul de rapport, cela devrait bien fonctionner:


Vous pouvez contourner l' utilité excessive d'Excel avec quelques étapes de configuration uniques, si vous êtes également disposé à effectuer manuellement une simple actualisation des données finales après avoir effectué toutes les entrées de données.

En supposant que vos données sont organisées normalement (en lignes):

  1. Saisissez toutes vos données sur une seule feuille. Pour ce tutoriel, je nommerai la feuille Input. Ne lui appliquez aucune mise en forme conditionnelle. N'hésitez pas à déplacer les valeurs vers le contenu de votre cœur (par exemple, supprimer / insérer / copier / coller)
  2. Créez une autre feuille vide et nommez-la comme vous le souhaitez (par exemple Output). Copiez manuellement votre mise en forme globale, comme la largeur des colonnes et la mise en forme des en-têtes (pas le contenu des en-têtes, juste la mise en forme).
  3. Remplacez $A$1dans la formule suivante par l'emplacement du début de votre ligne d'en-tête, puis copiez dans toutes les colonnes et 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' IF(LEN(...)>0,...,"")instruction est nécessaire car Excel détermine également de manière utile les types de données pour vous et utilise 0les cellules vides dans le cas contraire, et les -1termes viennent de la sémantique offset par rapport à la sémantique ordinale)
  4. Appliquez une mise en forme conditionnelle à la Outputfeuille.

Cela copie votre Inputfeuille de données sur une Outputfeuille sans aucune référence de cellule qu'Excel supprimerait automatiquement afin que vous puissiez définir en toute confiance votre mise en forme conditionnelle sur la Outputfeuille.

Il vous suffit d'étendre manuellement la plage à laquelle la formule est appliquée dans la Outputfeuille à mesure que la taille de vos Inputdonnées change.

Je vous suggère d'éviter de fusionner les cellules.


PS Cette question a été posée à plusieurs reprises (elle s'applique également dans Google Sheets, qui est un clone d'Excel), vous pouvez donc trouver une meilleure solution pour votre cas d'utilisation en les parcourant:

  1. Fragmentation de la mise en forme conditionnelle Excel
  2. (celui-ci) Comment puis-je empêcher les formules et les plages de mise en forme conditionnelle de changer automatiquement?
  3. Conserver la mise en forme conditionnelle sur le copier-coller
  4. Excel: comment appliquer définitivement la mise en forme conditionnelle à l'ensemble de la feuille de calcul?
  5. Pourquoi Excel coupe-t-il ma mise en forme conditionnelle?
Elaskanator
la source
0

Si vous collez sans format ( Paste > Paste Special > Unicode Textou similaire), le formatage spécial ne sera pas copié, et en tant que tel, la plage "S'applique à" ne devrait pas changer.

Vous pouvez supprimer des lignes / colonnes, mais si vous les insérez, la gamme "S'applique à" sera divisée.

Vous étendez la zone en sélectionnant la dernière ligne / colonne et "copiez-tirez" sur le petit carré en bas à gauche du "curseur". De cette façon, la gamme "Appliquer à" doit rester intacte. (Notez que cela ne prolongera pas les formules sur les lignes ou les colonnes comme le fait l'insertion.)

C'est cependant une douleur totale de ne pas oublier de coller sans format, etc. Je ne le fais pas d'habitude.

Parfois, je définis également un nom pour la zone que je souhaite formater. Il ne sera pas utilisé dans la règle, mais vous pouvez nettoyer la règle en supprimant toutes les règles sauf une et utiliser le nom de la zone dans la section "S'applique à".

J'ai testé sur un Mac en utilisant Excel 16.3 (je pense qu'Office 2016 ... hmm).

Erk
la source