[Résolu]ecrire une formule conditionnelle

Discussions à propos du tableur Calc.
Les questions sur les macros doivent être postées dans la section dédiée en dessous.

Modérateur : Vilains modOOs

Règles du forum
Cette section est uniquement dédiée au tableur Calc. Vous ne devez pas poster ici de questions sur les macros mais utiliser la section éponyme.
qdb54
NOOuvel adepte
NOOuvel adepte
Messages : 24
Inscription : 09 janv. 2017 10:13

[Résolu]ecrire une formule conditionnelle

Message par qdb54 »

Bonjour,
J'ai une base de données d'environ 100 lignes de noms en A et des nombres dans une dizaine de colonnes
Dans un autre classeur j'aimerai que lorsque j'inscrit un nom, certains nombres selectionnés de la base de donnée s'incrivent automatiquement
sur des colonnes adjacentes.
J'ai parcouru le forum et je pense qu'il faut utiliser une formule conditionnelle mais je ne comprend pas grand chose et
je crains que même avec des explications ce soit pareil, mais nous pouvous toujours essayer si toutefois il y a une solution
Je vous remercie
Dernière modification par qdb54 le 23 nov. 2020 11:18, modifié 1 fois.
OpenOffice 4.1.7 sous Windoxs 10
Avatar de l’utilisateur
njhub
Membre enthOOusiaste
Membre enthOOusiaste
Messages : 495
Inscription : 18 juin 2017 05:43
Localisation : 976

Re: ecrire une formule conditionnelle

Message par njhub »

Bonjour qdb54,

C'est possible avec l'un des couples INDEX(EQUIV()) ou INDIRECT(EQUIV())

si vous voulez renvoyer la colonne B du fichier 1 et que la valeur commune se trouve en A1 du fichier 2 et en colonne C du fichier 1
INDIRECT("fichier1.ods#feuille1.B"&EQUIV(A1;fichier1.ods#feuille1.C:C;0);1)

si vous voulez renvoyer la colonne D du fichier 1
INDIRECT("fichier1.ods#feuille1.D"&EQUIV(A1;fichier1.ods#feuille1.C:C;0);1)

si vous voulez renvoyer la colonne E du fichier 1
INDIRECT("fichier1.ods#feuille1.E"&EQUIV(A1;fichier1.ods#feuille1.C:C;0);1)

Ce ne sont que des hypothèses, à corriger suivant l'emplacement de vos fichiers, le nom des fichiers, le nom des feuilles, les colonnes à renvoyer

:wink:
LibreOffice 7.5.9.2.M1 (x64) FR-YT 05/12/23
OS : Windows 11.0
qdb54
NOOuvel adepte
NOOuvel adepte
Messages : 24
Inscription : 09 janv. 2017 10:13

Re: ecrire une formule conditionnelle

Message par qdb54 »

Classeur 2.ods
Classeur 1.ods
Merci pour votre réponse mais je constate après plusieurs essais que mon QI en la matière est trés faible.
Je vais joindre deux tableaux avec des cas précis, le classeur 1 (Base de données) et le classeur 2 (travail quotidien)

Sur mon classeur 2 j'inscrit chaque jour en A ligne 3 un nom correspondant au classeur 1 (colonne B ligne 2)
Disons que j'inscrive Martin ou la formule (='file:///C:/classeur1.ods'#$Feuille1.B2)
J'aimerai que les chiifres inscrits en face de Martin sur la colonne C et F du classeur 1 s'inscrivent automatiquement en A et B ligne 8 sur le classeur 2 ; idem pour D/E sur A et B ligne 7 ainsi que H/I sur A et B ligne 6 ; et pour finir G sur A ligne 9.
Pour info il y a 4 autres feuilles sur le classeur 2 qui fonctionnent de la même façon
Si j'abuse vous pouvez mettre bien entendu un seul exemple que je reproduirai.
J'aimerai pour finir, comprendre de quelle façon les chiffres correspondants vont pouvoir s'inscrire automatiquement quand je vais inscrire un autre nom le lendemain , vais-je devoir refaire toutes les manips ?
Merci d'avance
Cordialement
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
OpenOffice 4.1.7 sous Windoxs 10
Avatar de l’utilisateur
micmac
RespOOnsable forum
RespOOnsable forum
Messages : 9252
Inscription : 28 août 2010 08:45

Re: ecrire une formule conditionnelle

Message par micmac »

Bonjour,
Dans votre signature il y a écrit : OpenOffice 4.1.5
Cette version de OpenOffice est obsolète.
Si c'est une obligation, mentionnez-le dans votre signature en ajoutant Obligation de version.

Afin de profiter des dernières améliorations, il est fortement recommandé d'être à jour de la dernière version
Accès direct à votre signature pour la corriger.
Touche Ctrl de Windows = touche cmd⌘ sur Mac
Outils > Options sur Windows = OpenOffice > Préférences sur Mac
Avatar de l’utilisateur
njhub
Membre enthOOusiaste
Membre enthOOusiaste
Messages : 495
Inscription : 18 juin 2017 05:43
Localisation : 976

Re: ecrire une formule conditionnelle

Message par njhub »

Bonjour qdb54,
Dans votre signature il y a écrit:
OpenOffice 4.1.5
Afin de profiter des dernières améliorations, il est fortement recommandé d'être à jour de la dernière version, accédez directement à votre signature pour la corriger en suivant le lien dans le post de micmac.
------------------------------------------------------------------------------------------------------------------------------------------------------
Ouvrez les deux pièces jointes, complétez le nom "MARTIN" en A3 de la feuille "Feuille1" du classeur "qdb54_Classeur 2.ods" et les données du classeur "qdb54_Classeur 1.ods" seront renvoyées aux endroits prévus.
qdb54_Classeur 1.ods
qdb54_Classeur 2.ods
:wink:
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
LibreOffice 7.5.9.2.M1 (x64) FR-YT 05/12/23
OS : Windows 11.0
qdb54
NOOuvel adepte
NOOuvel adepte
Messages : 24
Inscription : 09 janv. 2017 10:13

Re: ecrire une formule conditionnelle

Message par qdb54 »

Désolé d'avoir tardé à revenir vers vous.
Je ne parviens toujours pas à obtenir un résultat
J'ai complété la ligne MARTIN en A3 sur le classeur 2 reçu et j'obtiens le message #N/D sur les lignes qui doivent recevoir les chiffres.

Mes 2 dossiers s'appellent BASE et 11 2020 et ils sont tous deux dans Documents; j'ai essayé de reproduire votre formule
La valeur commune se trouve en B2 (BASE) et A3 (11 2020)
La valeur à renvoyer se trouve en C2 (BASE) vers A6 (11 2020)

Donc sur le classeur 11 2020 en A3 j'écrit = et clique sur MARTIN du classeur BASE
en A6 j'écrit la formule suivante
=INDIRECT('file:///C:/Users/DANIEL/Documents/BASE.ods'#$feuille1.C2
&EQUIV($A$3;'file:///C:/Users/DANIEL/BASE.ods'#$Feuille1.$B$1:$B$2;0);1)
et j'obtiens le message ERREUR 502, pouvez vous me dire ou se trouve le problème
Pour Info dans votre formule concernant INDIRECT il y avait juste la colonne après feuille1 et pas de numéro de ligne, j'ai essayé d'enlever le numéro dans ma formule, mais calc inscrit a côté de C #REF!
Merci
OpenOffice 4.1.7 sous Windoxs 10
Avatar de l’utilisateur
OOotremer971
ManitOOu
ManitOOu
Messages : 2744
Inscription : 16 avr. 2010 13:31

Re: ecrire une formule conditionnelle

Message par OOotremer971 »

Bonjour,

Je trouve que le titre de ce sujet ne reflète pas correctement la situation. Il ne s'agit pas d'écrire une formule conditionnelle mais plutôt de Rechercher des valeurs dans un autre fichier

Dans le fichier joint, une formule simple à partir de formules nommées. Pour info, les formules nommées sont stockées dans un conteneur accessible par le raccourci clavier Ctrl+F3 (touche de fonction F3). Cette pratique permet d'appeler une longue formule par un petit nom bien explicite :

Par exemple dans le fichier 11 2020 en A6:

Code : Tout sélectionner

=INDEX(_PlageRecherche;EQUIV($A$3;_ColonneRecherche;0);LIGNE(A1))
ou

Code : Tout sélectionner

=RECHERCHEV($A$3;_PlageRecherche2;LIGNE(A2);0)
La première formule fait appel aux formules nommées _PlageRecherche et _ColonneRecherche et la deuxième, uniquement à la formule nommée _PlageRecherche2. Ces différentes plages correspondent aux plages du fichier BASE dans lesquelles les valeurs vont-être extraites. Pour la fonction EQUIV() un vecteur de recherche s'impose soit sous forme de ligne ou de colonne. Ici il s'agit d'une colonne, en l'occurrence B2:Bx où x correspond au numéro de la dernière ligne utilisée dans la colonne de recherche. Et les fonctions INDEX() et RECHERCHEV() permettent d'extraire des valeurs dans des plages de plusieurs lignes et plusieurs colonnes.

Les formules nommées de ce fichier, permettent de créer automatiquement le chemin et les plages à atteindre vers le fichier BASE. Comment ça marche ?

La fonction CELLULE() permet de de récupérer le chemin du fichier et le nom de la feuille dans laquelle elle est écrite:

Code : Tout sélectionner

=CELLULE("FILENAME")
va retourner : 'file:///C:/Users/DANIEL/Documents/11 2020.ods'#$Feuille1

Ensuite, on va utiliser la fonction SUBSTITUE() sur le résultat obtenu par la précédente formule pour y remplacer 11 2020 par BASE

Code : Tout sélectionner

=SUBSTITUE(CELLULE("FILENAME");"11 2020";"BASE")
retourne : 'file:///C:/Users/DANIEL/Documents/BASE.ods'#$Feuille1

ensuite on va faire de même avec Feuille1 pour le remplacer par Feuille1.B2:B12

Code : Tout sélectionner

=SUBSTITUE(SUBSTITUE(CELLULE("FILENAME");"11 2020";"BASE");"Feuille1";"Feuille1.B2:$B$12")
et ça donne : 'file:///C:/Users/DANIEL/Documents/BASE.ods'#$Feuille1.$B$2:$B$12, ce qui correspond au chemin de la colonne dans laquelle il faut rechercher la position de MARTIN

Pour finir, on utilise la fonction INDIRECT() pour que le texte du résultat obtenu par la précédente formule soit interprété comme un plage de cellule définie par ces références. On aura fait la même chose pour les autres plages.

L’intérêt de procéder de cette façon c'est que quelque soit la position du fichier dans l'arborescence des répertoires de ta machine, le chemin s'actualise automatiquement alors que lorsqu'il est écrit en dur dans une fonction INDIRECT() il ne s'actualise pas. Il faut donc tout réécrire.

Accessoirement j'ai mis une liste déroulante en A3 pour choisir différents nom. Elle s'obtient par le menu Données>Validité sur la cellule A3 et l'appel à la formule nommée _ColonneRecherche :
Validité.png
Les deux fichier pour tester :
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
En principe, toujours à jour des dernières versions dites stables
AOO
LibreOffice
Debian 10 et 11
Avatar de l’utilisateur
OOotremer971
ManitOOu
ManitOOu
Messages : 2744
Inscription : 16 avr. 2010 13:31

Re: ecrire une formule conditionnelle

Message par OOotremer971 »

Et la fenêtre des formules nommées :
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
En principe, toujours à jour des dernières versions dites stables
AOO
LibreOffice
Debian 10 et 11
qdb54
NOOuvel adepte
NOOuvel adepte
Messages : 24
Inscription : 09 janv. 2017 10:13

Re: ecrire une formule conditionnelle

Message par qdb54 »

Bonjour,
Vous avez raison pour le titre du sujet mais j'étais parti sur une fausse piste
Merci pour votre patience et vos explications détaillées avec beaucoup de pédagogie, je comprends mieux la théorie et la finalité de ces formules, il me faudra simplement un peu de temps pour la pratique.
Je pense dans un premier temps intégrer mes données sur vos tableaux, j'ai ajouté des lignes de noms sur le dossier Base mais rien ne change sur le menu déroulant car je ne trouve pas ou se situe la formule substitue(substitue... afin d'agrandir la plage de la colonne de recherche, quelque chose d'important m'échappe.
Concernant les formules Index et recherche, on obtient le même résultat, y a t-il un intérêt à utiliser une plus que l'autre.
Après votre réponse je clôturerai le sujet car je ne veux pas vous monopoliser indéfiniment, vous ne pouvez rien faire de plus c'est moi qui ait un niveau de compréhension trés faible en la matière et ce n'est pas faute d'essayer.
Merci d'avance
Cordialement
OpenOffice 4.1.7 sous Windoxs 10
Avatar de l’utilisateur
OOotremer971
ManitOOu
ManitOOu
Messages : 2744
Inscription : 16 avr. 2010 13:31

Re: ecrire une formule conditionnelle

Message par OOotremer971 »

Bonjour,
qdb54 a écrit :je ne trouve pas ou se situe la formule substitue(substitue... afin d'agrandir la plage de la colonne de recherche
Il faut soit passer par le menu Insertion>Noms>Définir ou utiliser le raccourci clavier Ctrl+F3 pour y accéder.
qdb54 a écrit :Concernant les formules Index et recherche, on obtient le même résultat, y a t-il un intérêt à utiliser une plus que l'autre.
Cela dépend du contexte. RECHECHEV() dans le cas présent suffit et est peut-être plus simple à appréhender. INDEX() s'utilise généralement avec EQUIV() ce qui nécessite l'utilisation de deux plages (une pour EQUIV() qui ne sait gérer que des vecteurs ligne ou colonne, et une autre pour INDEX()).
qdb54 a écrit :Après votre réponse je clôturerai le sujet car je ne veux pas vous monopoliser indéfiniment,
En même temps c'est un peu l'objectif de ce forum. Les explication données à l'un servent ensuite à d'autre lorsqu'ils effectuent des recherches ciblées. D'où l'importance d'ailleurs d'avoir un titre de sujet explicite.

A+
En principe, toujours à jour des dernières versions dites stables
AOO
LibreOffice
Debian 10 et 11
qdb54
NOOuvel adepte
NOOuvel adepte
Messages : 24
Inscription : 09 janv. 2017 10:13

Re: ecrire une formule conditionnelle

Message par qdb54 »

Merci ça fonctionne parfaitement
Je fais un tableau par jour toutes les 10 lignes, si j'ai bien compris le 2ème jour je reproduis en A13 en modifiant la formule et ainsi de suite, je fais de même pour les quatre autres feuilles avec changement du n°de feuille dans la formule ; ce sera fait une fois pour toutes.
Par contre pour les mois suivants (dossier 12 2020 .....) dois-je modifier tous les formules des jours des cinq feuilles (soit 150 saisies) ou y aurait-il par hasard une autre possibilité ?
Cordialement
OpenOffice 4.1.7 sous Windoxs 10
qdb54
NOOuvel adepte
NOOuvel adepte
Messages : 24
Inscription : 09 janv. 2017 10:13

Re: ecrire une formule conditionnelle

Message par qdb54 »

Désolé j'ai oublié une chose.
Pour la formule RechercheV je ne peux pas aller au de la ligne A6 j'ai ensuite une erreur 502

La modération vous a écrit: Merci de ne pas poster plusieurs messages à la suite. Vous disposez d'un bouton ÉDITER en haut à droite de chaque message et d'un autre bouton ajout si vous désirez ajouter un complément lorsqu'il n'y a pas de réponse.

OpenOffice 4.1.7 sous Windoxs 10
Avatar de l’utilisateur
OOotremer971
ManitOOu
ManitOOu
Messages : 2744
Inscription : 16 avr. 2010 13:31

Re: ecrire une formule conditionnelle

Message par OOotremer971 »

Bonjour,
qdb54 a écrit :Par contre pour les mois suivants (dossier 12 2020 .....) dois-je modifier tous les formules des jours des cinq feuilles (soit 150 saisies) ou y aurait-il par hasard une autre possibilité ?
Je commence à comprendre pourquoi cette notion de formule conditionnelle. En fait il faudrait qu'elle soit capable de s'adapter automatiquement au changement de mois ? C'est ça ? Alors oui c'est faisable mais il va falloir donner plus de précision sur ce qui diffère d'un mois à l'autre en terme d'extraction. Surtout ne pas hésiter à joindre un exemple avec des couleurs différentes s'il le faut pour dire ce mois-ci c'est cette couleur qui doit-être extraite, le mois prochain ce sera cette autre...etc
qdb54 a écrit :Pour la formule RechercheV je ne peux pas aller au de la ligne A6 j'ai ensuite une erreur 502

ça va vraiment pas être simple de trouver l'erreur sans voir ce que tu as fait dans le fichier. A moins que tu puisses l'expliquer.
J'ai encore un peu de mal à cerner la finalité du problème. Si tu pouvais détailler un peu. Merci
En principe, toujours à jour des dernières versions dites stables
AOO
LibreOffice
Debian 10 et 11
qdb54
NOOuvel adepte
NOOuvel adepte
Messages : 24
Inscription : 09 janv. 2017 10:13

Re: ecrire une formule conditionnelle

Message par qdb54 »

ok merci je vous joins les 2 tableaux ce sera effectivement plus simple.
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
OpenOffice 4.1.7 sous Windoxs 10
Avatar de l’utilisateur
OOotremer971
ManitOOu
ManitOOu
Messages : 2744
Inscription : 16 avr. 2010 13:31

Re: ecrire une formule conditionnelle

Message par OOotremer971 »

Bonjour,
Dans ton fichier il y a écrit :1) c'est la même formule mais j'ai un message d'erreur
C'est normal. La plage du fichier BASE contient 10 colonnes or ta formule nommée PlageRecherche2 est définie jusqu'à la colonne H alors qu'il faudrait qu'elle le soit jusqu'à la colonne J

Code : Tout sélectionner

INDIRECT(SUBSTITUE(SUBSTITUE(CELLULE("FILENAME");"11 2020";"BASE");"Feuille1";"Feuille1.$B$2:$J$12"))
Si ton fichier BASE doit évoluer en nombre de ligne, il faudra modifier cette formule pour qu'elle en tienne compte. Par exemple en remplaçant $J$12 par $J$150 pour que la formule aille lire jusqu'à la ligne 150.

Dans ton fichier il y a écrit :2) Dans la formule RECHERCHEV je modifie le numéro de A chaque jour du mois pour les 6 valeurs et je le fait pour les 5 feuilles c'est long mais ce ne sera à faire qu'une fois à moins qu'il y ait une autre solution
il ne faut pas utiliser le signe $ devant le numéro de ligne dans ta formule. Ainsi lorsqu'elle est recopiée vers le bas le numéro s'incrémente automatiquement.
Ainsi, la formule :

Code : Tout sélectionner

=RECHERCHEV($A$3;_PlageRecherche2;2;0)
devient :

Code : Tout sélectionner

=RECHERCHEV($A3;_PlageRecherche2;2;0)
Désormais tu peux copier la plage A33:B40 puis la coller en A43 puis A53, A63 etc... et constater que les références dans les formules s'actualisent automatiquement

Dans ton fichier il y a écrit :3) Pour les mois et années qui vont suivre je dois changer 11 2020 par 12 2020 , puis 01 2021 dans la formule INDIRECT(SUBSTITUE..... donc 150 modifications par mois sauf s'il y a une autre solution
Là tu n'as compris l’intérêt d'un formule nommée. SI tu utilisais cette formule directement dans les cellules de ton fichier, il faudrait effectivement la modifier 150 fois. Là elle est enregistrée dans un conteneur et est appelée 150 fois par son nom. Il suffit de la modifier une fois dans la zone de nom (Ctrl+F3)
Au lieu d'écrire en dur dans ta formule le nom du fichier qui va évoluer tous les mois, tu peux utiliser une nouvelle formule nommée que je te laisse volontairement mettre en place pour que tu intègres le fonctionnement.

La formule suivante te donne automatiquement le nom de ton fichier :

Code : Tout sélectionner

DROITE(GAUCHE(CELLULE("filename");TROUVE(".";CELLULE("filename"))-1);7)
Sous réserve bien-sûr qu'il contienne 7 caractères comme c'est le cas actuellement et le sera encore les mois prochains.
Tu peux la nommer NonFIch par exemple et modifier tes 2 formules nommées PlageRecherhche2 et ColonneRecherche en y remplaçant "11 2020" par NomFich. Lorsque tu enregistreras ton fichier en 12 2020 ou 01 2021 l'actualisation sera automatique.

Code : Tout sélectionner

INDIRECT(SUBSTITUE(SUBSTITUE(CELLULE("FILENAME");NomFich;"BASE");"Feuille1";"Feuille1.B2:$B$12"))
au lieu de :

Code : Tout sélectionner

INDIRECT(SUBSTITUE(SUBSTITUE(CELLULE("FILENAME");"11 2020";"BASE");"Feuille1";"Feuille1.B2:$B$12"))
 Ajout : J'ai légèrement modifié le fichier BASE pour qu'il soit plus lisible et corrigé les formules avec RECHERCHEV() dans le fichier 11 2020 
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
En principe, toujours à jour des dernières versions dites stables
AOO
LibreOffice
Debian 10 et 11
qdb54
NOOuvel adepte
NOOuvel adepte
Messages : 24
Inscription : 09 janv. 2017 10:13

Re: ecrire une formule conditionnelle

Message par qdb54 »

Bonsoir,
J'ai intégré la formule NomFich et tout fonctionne parfaitement, grace à vous j'ai appris beaucoup et je vous en remercie.
Cette question devrait être la derniére
J'ai juste un problème au niveau des autres feuilles, je modifie leurs numéros dans les formules colonne recherche et plage recherche2, comme tout est lié lorsque je modifie la formule d'une des 5 feuilles toutes les autres sont en erreur 502, j'ai essayé de mettre un $ devant le numéro mais évidemment ça ne résoud rien.
Merci d'avance
OpenOffice 4.1.7 sous Windoxs 10
Avatar de l’utilisateur
OOotremer971
ManitOOu
ManitOOu
Messages : 2744
Inscription : 16 avr. 2010 13:31

Re: ecrire une formule conditionnelle

Message par OOotremer971 »

Bonjour,

La formule nommée PlageRecherche2 ne peut fonctionner que pour Feuille1. Lorsque je te l'ai suggérée j’ignorais qu'il fallait qu'elle s'adapte à 5 feuilles différentes. Il faudra créer une nouvelle formule nommée pour chaque feuille, par exemple PlageRecherche1, PlageRecherche2, PlageRecherche3 etc ou réfléchir à une autre solution mais pas aujourd'hui pour ma part

A+
En principe, toujours à jour des dernières versions dites stables
AOO
LibreOffice
Debian 10 et 11
qdb54
NOOuvel adepte
NOOuvel adepte
Messages : 24
Inscription : 09 janv. 2017 10:13

Re: ecrire une formule conditionnelle

Message par qdb54 »

Bonjour,
J'ai mis une plage de recherche différente pour chaque feuille et cela me convient parfaitement.
Encore merci pour votre patience et la qualité de vos explications
Cordialement
OpenOffice 4.1.7 sous Windoxs 10