Data validation avec formule de plus de 255 caractères

Fermé
farreneit Messages postés 282 Date d'inscription jeudi 5 juillet 2012 Statut Membre Dernière intervention 13 janvier 2023 - 8 sept. 2022 à 16:11
Raymond PENTIER Messages postés 58388 Date d'inscription lundi 13 août 2007 Statut Contributeur Dernière intervention 17 avril 2024 - 8 sept. 2022 à 19:01

Bonjour,

Comme le titre l'indique, j'aimerai effectuer une validation de données avec une formule de plus de 255 caractères (plusieurs IFs).

Excel limite à 255 caractères, je pensais donc mettre ma formule dans une cellule basique, et lier la validation de données à cette cellule. Malheureusement je n'arrive pas à mes fins...

Pensez-vous que cette méthode fonctionnerait ? 

Si oui comment ? Si non pensez-vous à une autre solution ?

Merci d'avance et bonne journée !

A voir également:

5 réponses

DjiDji59430 Messages postés 4027 Date d'inscription samedi 19 avril 2008 Statut Membre Dernière intervention 17 avril 2024 644
8 sept. 2022 à 16:25

Bonjour à tous,

Tu peux par exemple donner des noms a tes condtions et t'en servir dans ta formule.

si(condition1;           ;si(condition2;       etc....

tu peux aussi faire un tableau de correspondance cndition==>resultat et utiliser recherchev()

en , utiliser la fonction filtre

bref,

Un fichier EXCEL (test ou non), complété par des explications exhaustives et des exemples remplis à la main, mis sur https://www.cjoint.com/ , ainsi que la version d'Excel  , permettrait aux intervenants de répondre plus précisément à ta question.
Crdmt

1
farreneit Messages postés 282 Date d'inscription jeudi 5 juillet 2012 Statut Membre Dernière intervention 13 janvier 2023 10
8 sept. 2022 à 16:38

Merci pour ta réponse.

Voilà la formule en question : 

=IF(LEFT(G4,1)>"1",IF(AND(D3="ERMEE",F4=90),OFFSET(Plaque!$AX:$AX,1,0,COUNTA(Plaque!$AX1:$AX3)-2,1),IF(AND(D3="ERMEE",F4=80),OFFSET(Plaque!$AX:$AX,2,0,COUNTA(Plaque!$AX:$AX)-2,1),IF(G4="2H",OFFSET(Plaque!$E:$E,2,0,COUNTA(Plaque!$E:$E)-2,1),IF(OR(G4="3H",G4="4H"),OFFSET(Plaque!$I:$I,2,0,COUNTA(Plaque!$I:$I)-2,1),OFFSET(Plaque!A:A,1,0,COUNTA(Plaque!A:A)-2,1))))),"")

Mes conditions sont courtes et simples, je ne pense pas pouvoir gagner assez de caractères avec cette méthode.

Je ne suis pas sur de comprendre bien la deuxième solution mais je vais m'y pencher.

Je suis actuellement sur une autre piste qui pourrait marcher : modifier ma formule pour obtenir une zone au lieu d'un offset, et utiliser un indirect.

Oui, je sais bien qu'un fichier est bien plus simple pour comprendre les questions et y répondre, mais pour être honnête le fichier est trop complet pour être clair et expliqué.

Je pensais que ma question était bien expliquée mais à priori ce n'est pas le cas ! J'aurais surement dû faire un autre fichier pour illustrer ..

0
brucine Messages postés 14228 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 18 avril 2024 1 794
8 sept. 2022 à 16:29

Bonjour,

On a sur ce même forum l'exemple d'une formule beaucoup plus longue dans une seule cellule qui fonctionne (je n'ai plus le lien en tête), cherches si le coeur t'en dit à conversion euros chiffres en lettres.

Excel limite la largeur d'une colonne à 255 caractères, le nombre maximal de caractères d'une cellule à 32767, et la longueur du contenu des formules à 8192 caractères: ce n'est donc pas la cause de tes soucis, en revanche, des chemins de noms de fichier trop longs peuvent en effet bloquer l'enregistrement.

0
farreneit Messages postés 282 Date d'inscription jeudi 5 juillet 2012 Statut Membre Dernière intervention 13 janvier 2023 10
Modifié le 8 sept. 2022 à 16:31

Merci pour la réponse.

En fait ma formule fonctionne parfaitement dans une cellule "simple". Excel bloque juste le nombre de caractères pour la formule de la validation de donnée.

0
brucine Messages postés 14228 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 18 avril 2024 1 794 > farreneit Messages postés 282 Date d'inscription jeudi 5 juillet 2012 Statut Membre Dernière intervention 13 janvier 2023
8 sept. 2022 à 16:48

Et c'est quoi, une formule de validation de la donnée?

J'ai eu parfois des soucis comparables, si c'est ce que tu veux dire, en copiant une formule dans une cellule, peu importe la longueur, après avoir enlevé le signe égal initial pour ne pas déplacer les références de cellules et l'avoir rajouté: la formule reste littérale et ne calcule pas, pas d'autre solution que de la ressaisir au kilomètre.

0
farreneit Messages postés 282 Date d'inscription jeudi 5 juillet 2012 Statut Membre Dernière intervention 13 janvier 2023 10 > brucine Messages postés 14228 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 18 avril 2024
8 sept. 2022 à 16:50

Je parle de la formule qui se situe normalement ici.

La formule que je souhaitais entrer est la suivante :

=IF(LEFT(G4,1)>"1",IF(AND(D3="ERMEE",F4=90),OFFSET(Plaque!$AX:$AX,1,0,COUNTA(Plaque!$AX1:$AX3)-2,1),IF(AND(D3="ERMEE",F4=80),OFFSET(Plaque!$AX:$AX,2,0,COUNTA(Plaque!$AX:$AX)-2,1),IF(G4="2H",OFFSET(Plaque!$E:$E,2,0,COUNTA(Plaque!$E:$E)-2,1),IF(OR(G4="3H",G4="4H"),OFFSET(Plaque!$I:$I,2,0,COUNTA(Plaque!$I:$I)-2,1),OFFSET(Plaque!A:A,1,0,COUNTA(Plaque!A:A)-2,1))))),"")

Mais cela ne fonctionne pas car supérieure à 255 caractères ..

0
farreneit Messages postés 282 Date d'inscription jeudi 5 juillet 2012 Statut Membre Dernière intervention 13 janvier 2023 10
8 sept. 2022 à 16:55

 Pour ceux qui sont confrontés au même problème, j'ai finalement modifié le fonctionnement.

Ancienne formule que je souhaitais intégrer dans ma validation de donnée (mais trop longue pour être acceptée) :

=IF(LEFT(G4,1)>"1",IF(AND(D3="ERMEE",F4=90),OFFSET(Plaque!$AX:$AX,1,0,COUNTA(Plaque!$AX1:$AX3)-2,1),IF(AND(D3="ERMEE",F4=80),OFFSET(Plaque!$AX:$AX,2,0,COUNTA(Plaque!$AX:$AX)-2,1),IF(G4="2H",OFFSET(Plaque!$E:$E,2,0,COUNTA(Plaque!$E:$E)-2,1),IF(OR(G4="3H",G4="4H"),OFFSET(Plaque!$I:$I,2,0,COUNTA(Plaque!$I:$I)-2,1),OFFSET(Plaque!A:A,1,0,COUNTA(Plaque!A:A)-2,1))))),"")

Nouvelle formule équivalente (pour moi) à mettre dans une cellule de la feuille :

=IF(LEFT(G4,1)>"1",IF(AND(D3="ERMEE",F4=90),"Plaque!AX2:AX"&COUNTA(Plaque!AX1:AX1000),IF(AND(D3="ERMEE",F4=80),"Plaque!AX2:AX"&COUNTA(Plaque!AX1:AX1000),IF(G4="2H","Plaque!E2:E"&COUNTA(Plaque!E1:E1000),IF(OR(G4="3H",G4="4H"),"Plaque!I2:I"&COUNTA(Plaque!I1:I1000),"Plaque!A2:A"&COUNTA(Plaque!A1:A1000))))),"")

Celle cellule va donc afficher une zone au format texte (exemple : Plaque!A2:A28)

Il suffit donc de relier la validation de donnée à cette cellule (L28 dans mon cas) avec un indirect :

=INDIRECT(L28)

Bonne journée !

0
Raymond PENTIER Messages postés 58388 Date d'inscription lundi 13 août 2007 Statut Contributeur Dernière intervention 17 avril 2024 17 089
8 sept. 2022 à 17:11

Bonjour.

Excel limite à 255 caractères, je pensais donc mettre ma formule dans une cellule basique, et lier la validation de données à cette cellule. Malheureusement je n'arrive pas à mes fins...

Pensez-vous que cette méthode fonctionnerait ? 

Si oui comment ? Si non pensez-vous à une autre solution ?

Non ! Aucun chance !

Comme te l'a indiqué mon ami DjiDji, que je salue ici, il faudrait essayer une toute autre approche ...

Et comme cela est répété 20 fois par semaine dans nos discussions sur CCM, il faut toujours joindre un fichier-exemple afin que l'explication du problème soit correctement illustrée, que des essais et des tests puissent être réalisés, et qu'une formule exacte et finalisée soit proposée.


En attendant, tu peux commencer par diminuer de manière drastique le nombre de caractères pour les noms définis (Gestionnaire de noms) et pour le nom des feuilles (Onglets).

Ainsi ta feuille {AB - MTL REGION}pourrait utilement être rebaptisée {MTLREGION} soit 9 caractères au lieu de 15 !

Et ta plage "Prix de revient final" aura la même efficacité si tu la renommes "Revient", soit 7 au lieu de 21 ...

Voici d'ailleurs un exemple concret, traité récemment dans ce forum :
https://forums.commentcamarche.net/forum/affich-37674193-comprehension-formules-imbriquees#2


0
farreneit Messages postés 282 Date d'inscription jeudi 5 juillet 2012 Statut Membre Dernière intervention 13 janvier 2023 10
8 sept. 2022 à 17:28

Bonjour,

Merci pour votre réponse.

Je vous confirme que la formule de la validation de donnée est limitée à 255 caractères. Essayez, vous risquez d'être surpris ! (sauf si une question de version est en cause ! Je suis sur un fichier xlsm version 2207 Build 15427.20210 Click to run).

Effectivement, j'aurais surement dû faire un autre fichier afin d'illustrer le problème, je prendrai le temps de le faire pour la prochaine fois.

Et enfin, merci pour cette solution. C'est en effet une solution que j'avais trouvé sur d'autres forums, mais cela ne me convenait pas .. Les plages proviennent d'un fichier excel externe, les données peuvent donc évoluer et les noms seraient à remodifier à chaque fois.
J'avais d'ailleurs utilisé cette méthode sur une version precedente de mon fichier, avec une macro permettant de mettre à jour les noms automatiquement, mais c'était vite devenu une usine à gaz. C'est pour cela que j'étais revenu sur du OFFSET.

0

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

Posez votre question
Raymond PENTIER Messages postés 58388 Date d'inscription lundi 13 août 2007 Statut Contributeur Dernière intervention 17 avril 2024 17 089
8 sept. 2022 à 19:01

Surpris ? Pas du tout : je sais parfaitement que 255 est une limite structurelle du logiciel, et mes conseils avaient précisément pour objectif de faire tenir ta formule dans ces limites de taille.

Lorsque j'ai enregistré à 17:11 ma réponse que j'avais commencé à rédiger vers 16:26, je n'avais pas pris connaissance des messages 2 à 7 ...

J'espère que tu auras pu tirer de tous ces échanges des pistes efficaces pour solutionner ton problème.


0