Validation des données avec la formule "Décaler"

Bonjour,

J'ai créer un fichier ou j'utilise la fonction "Décaler" dans une liste à partir de la validation des données.

A chaque fois que je ferme le fichier et que je le réouvre, excel perd la validation des données, mais pas la formule inscrite, et je dois à chaque fois recommencer pour l'ensemble des feuilles la procédure pour la validation des données.

J'ai essayé d'enregistrer une macro pour le faire automatiquaement, mais celle-ci ne passe pas.

Je vous glisse ici, le texte du débogage :

capture d ecran 2025 10 30 191745

Est-ce que quelqu'un aurait la solution, soit pour ne plus avoir à re-valider les données, soit une solution pour ce code ?

Merci par avance pour votre retour.

Bonjour, laisse un fichier test pour de meilleures réponses.

A première vue je serais surpris que tu aies enregistré cette macro sans l'avoir modifiée ! Ta formule est fausse... commences par utiliser des ";" à la place des "," dans la formule ="=DECALER[.........]"

Bonsoir,

A première vue, je dirais que la validation de données dans un Tableau Structuré n'a nullement besoin d'être insérée via un code VBA....

Range("TMandela[Catégorie]").Select
....

Un TS garde en mémoire les formats, formules et autres validations de données. Les modifier peut provoquer un comportement aléatoire.

Bonne soirée

Bonjour,

Merci Tomato.
Je suis passé par un enregistrement auto pour la macro, et cela a du modifier la formule "Décaler", car celle-ci fonctionne bien dans le fichier.

Je le glisse ici. Tu verras que sur les feuilles des salles, les colonnes C et D, ne conservent pas la validation des données à la suite de la fermeture du fichier.

La macro, qui n'est pas indispensable, à surtout été essayé, pour ne pas avoir à refaire la procédure de la validation des données à chaque réouverture de ce fichier.

Merci Cousinhub.

Oui je suis d'accord avec toi, que la validation des données n'a pas besoin de passer par VBA.

Je cherchais juste une solution pour, comme je le dis dans le post précédent, ne pas avoir à refaire la procédure de la validation des données.

Je ne comprend pas pourquoi, elle n'est pas conservée sur les colonnes précédemment citée.

Hello,

Voici la macro qui fera ton bonheur.

1/ Je rejoins cousinhub sur le fait que normalement tu n'as pas à recréer des listes de validation dans un tableau structuré. Si c'est bien fait à la base, le simple fait d'ajouter une ligne reporte les formats et donc les conditions de validation des données pour les cellules concernées. Je pars donc du principe que tu nous caches quelque-chose dans ton fichier test et/ou dans tes explications. Ca ne regarde donc que toi.

2/ La validation de données ne supporte pas les formules matricielles dynamiques mais tu as Excel 365, il faudra donc utiliser la puissance de cet outil qui embarque des formules sympathiques :

=UNIQUE(FILTRE(TBesoinGlobal[Catégorie];(TBesoinGlobal[FOURNISSEUR]=Mandela!A2)*(TBesoinGlobal[Famille]=Mandela!B2)))

3/ Tu retrouveras un code opérationnel en module 3 du fichier suivant. Il faut se servir du gestionnaire de nom pour entrer chaque formule selon l'effet recherché ; puis les intégrer "en dur" dans le code du module ; puis exécuter le code. Je te laisse te débrouiller pour ajouter un bouton ou un raccourci clavier afin de déclencher le code.

8uneusineagaz.zip (367.39 Ko)

Attention, je n'ai codé aucun cas de gestion d'erreur

Bonjour Tomato,

Merci pour ta réponse.

Alors quelques éléments de réponse (à la tienne)...
Pour le coup, je crois n'avoir rien eu envie de cacher, bien au contraire .

Je pense que cela vient probablement de mes explications, sans doute un peu confuses sur mon problème.

Je reprend depuis le début...

Je joins à ce message, un nouveau fichier que j'ai essayé de modifier pour plus de clarté à l'utilisation.

Donc à partir de ce (nouveau) point de départ, voici mon problème:

Je perd la validation des données en colonne C, à chaque fois que je ré-ouvre mon fichier pour toutes les feuilles hormis la première (pour laquelle, ce ne sont que des données de référence). Il faut que les re-valide sur cette même colonne, pour chaque feuille, alors que je n'ai pas besoin de la faire pour les colonnes A et B. (Je précise qu'à ce stade, je n'ai pas utilisé de code VBA, pour l'élaboration de ce fichier, et que ce n'est absolument pas le but).

Ma question, (et désolé, mais je débute en VBA, et je ne connais pas grand chose à tout ça),est d'essayer de trouver une solution, pour ne plus avoir à re-valider les données à chaque fois, et je ne comprend pas pourquoi excel ne les garde pas d'une fois sur l'autre.

Est-ce que a formule utilisée dans la validation des données :

=DECALER('Besoin Global'!$C$16;EQUIV(A2&B2;LFamille&LCatégorie;0)-1;0;NB.SI.ENS(LFamille;A2;LCatégorie;B2))

Est-ce que c'est ce que tu appelles une "formule matricielle dynamique" ?

Qu'est ce que tu appelle "un tableau structuré bien fait à la base" ? J'avais l'impression que le mien n'était pas si mal...

Je ne connaissais pas la formule "Unique" et "Filtre". Est-ce que c'est utilisable dans la validation des données ? Je vais la tenter.

Bon, bon , bon... je ne suis pas sur d'être beaucoup plus clair, tu me rediras.

En tout cas un grand merci, de prendre de ton temps, pour me répondre, comme tu l'as sans doute un peu perçu, je connais des trucs sur excel, mais je ne suis pas une flèche non plus...

Merci à toi.

"Une usine à Gaz...."

C'est tout à fait ça...

Bonsoir,

Je m'auto-corrige pour ceux qui passent par là puisque effectivement dans l'enregistreur de macro le "," apparait bien à la place du ";". Je m'attendais à retrouver une cohérence des paramètres régionaux ";" avec formules FR et "," avec formules US - passons ! Quant au phénomène rencontré j'ai eu le même souci pendant mes tests. Entre nous je pense qu'il faut repartir du bon pied :

1/ efface l'ensemble de tes listes de validation. Puis recrée l'ensemble de ces listes en utilisant les formules adéquates avec UNIQUE et/ou FILTRE :

=UNIQUE(FILTRE(TBesoinGlobal[Catégorie];(TBesoinGlobal[FOURNISSEUR]=Mandela!A2)*(TBesoinGlobal[Famille]=Mandela!B2)))

Je n'ai pas office365 mais ca rendra déjà plus propres tes menus déroulants !

2/ il est possible (probable ?) que ce phénomène existe tout de même. A ce moment là, sauf si un pro de la formule pointe son bout du nez, je pourrais te proposer une solution par vba. Grosso modo suivant cette logique : à chaque changement détecté dans famille/catégorie/référence du code s'exécute pour lister les valeurs possibles et les reporte dans ton menu déroulant, qui se restreint donc à chaque choix.

un code qui tourne sur chaque évènement de modification empêchera l'utilisation du retour en arrière (ctrl+Z). C'est une conséquence négative de l'emploi de macro évènementielles. Possible de contrer une partie de cet effet en codant une banque mémoire des modifications apportée. Mais ca devient une usine à gaz nauséabonde

Hello,

Assez d'accord avec tomato.

Pour moi, supprimer tes listes déroulantes, TRIER le tableau contenant toutes les listes déroulantes (y compris les restrictions) et laisser une macro évènementielles qui supprimera les valeurs déjà sélectionnées si il y a un changement sur une des listes déroulantes "mère".

Je ne sais pas si je suis clair mais en gros avec le tableau et 3 formules decaler dans le gestionnaire de nom ça fait le taff. C'est comme ça que j'ai fait quand j'avais besoin de listes déroulantes en cascade.

@+

Bonjour Tomato, bonjour Baroute78,

Tout d'abord, un grand merci pour votre temps et vos remarques.

Je n'arrive pas à me servir des formules "Unique" et/ou "Filtre", et elles ne fonctionnent pas qu'elles soit placées dans les cellules, ou dans les gestionnaire de noms, ou dans la VDD.

Et sans vous offenser, je n'arrive pas à appliquer vos remarques ou vos pistes de solutions,

Pour l'instant, je vais rester avec les formules Décaler dans les VDD, même si ce bug persiste, ce qui est un peu pénible pour l'utilisation du fichier.

J'ai bien conscience que ce tableau est un peu une usine à gaz, et peut-être qu'il sort un peu des sentiers habituels d'excel. Mais comme moi, il n'est pas parfait, et nous allons pour l'instant nous en accommoder (je le fais bien avec moi depuis 44 ans...)

Je laisse ce post ouvert, si toutefois, un magicien de la formule, me permet de contourner ce bug.

Merci encore, et bonne continuation à vous.

Hello,

Nul besoin des formules filtres et unique vu qu'elles ne fonctionnent pas dans le gestionnaire de noms.

Juste les fonctions decaler c'est good.

Chacun apporte des éléments de perfection à sa façon

@+

bonjour le fil, une solution, un peu comme déjà suggéré, il y a une macro dans Thisworkbook "Workbook_SheetSelectionChange" qui vérifie qu'on est dans la colonne 2 ou 3 d'un TS avec une validation dans cette cellule et puis on vérifie la/les cellule(s) à gauche pour créer une validation dans la macro paramétrée "M_Validation" du module1. J'éspère que cela fonctionne.

PS. je n'avais pas trouvé le bug dans votre fichier ...

PS2: il y a déjà une gestion d'erreurs dans la formula "RechercheX" donc 2 fois comme dans la colonne "Désignation" est trop

Rechercher des sujets similaires à "validation donnees formule decaler"