Sélection et MàJ automatique d'éléments d'une liste

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

Modérateur: Vilains modOOos

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.

Sélection et MàJ automatique d'éléments d'une liste

Messagepar Laadna » 03 Nov 2009 12:47

Bonjour,

J'ai toutes les peines du monde à utiliser l'aide d'OO pour mon problème car je ne connais pas les termes techniques associés aux fonctions que je cherche à reproduire.

J'ai deux feuilles : l'une nommée data qui contient un listing de personnes, et l'autre nommée matrice dans laquelle je souhaite copier automatiquement certains éléments du listing sus-cité.

L'élément clé que je souhaite utiliser comme condition de la présence (ou pas) d'une personne dans la feuille "matrice" est un numéro (qui apparait dans le listing au sein d'une cellule contenant une liste de validité elle-même construite par concaténation ; je peux toutefois faire apparaitre ce numéro en tant que tel si c'est plus simple).

Traduit naïvement en terme de logique de programmation, voila ce que ça donne :
Code: Tout sélectionner   AgrandirRéduire
$matrice.L4=%numero (donnée entrée à la main)

si %numero existe dans $data.T2
alors $matrice.B4=$data.I2
et $matrice.C4=$data.J2

puis

si %numero existe dans $data.T3
$matrice.B5=$data.I3
et $matrice.C5=$data.J3

etc...


Je souhaite également que le changement de %numero provoque automatiquement la modification du listing présent dans la feuille matrice, et qu'un ajout dans la feuille data provoque la mise à jour (si la condition est remplie) de la feuille matrice.

En espérant avoir été clair.
OpenOffice 3.1.0, XP familial SP 3
Laadna
Fraîchement OOothentifié
 
Messages: 8
Inscrit le: 01 Avr 2008 12:21

Re: [Calc] Sélection et MàJ automatique d'éléments d'une liste

Messagepar jjk » 03 Nov 2009 13:53

Bonjour

J'ai l'impression que ton problème se rapproche de celui-ci.
Le mieux serait que tu joignes ton fichier (procédure).

As-tu essayé les filtres ?
OpenOffice 2.4.2 sous XP SP2 et 3.1.1/Win 7 sur 2 postes différents
jjk
InconditiOOonnel
InconditiOOonnel
 
Messages: 935
Inscrit le: 27 Oct 2008 16:30

Re: Sélection et MàJ automatique d'éléments d'une liste

Messagepar Laadna » 05 Nov 2009 13:45

Bonjour,

Voila le fichier en question :
listing bafa 2.ods
(16.21 Kio) Téléchargé 7 fois


J'ai donc deux problèmes sur la feuille "covoiturage" :

1- je veux que, en entrant le numéro d'habilitation dans la cellule covoiturage.L1, Calc cherche dans data.T2:Tx ce numéro et renvoie dans covoiturage.B1 le contenu de la cellule data.Iy qui correspond, fasse de même pour toutes les colonnes de cette ligne y dont l'intitulé se retrouve dans les deux feuilles, puis continue de chercher ce numéro pour remplir les autres lignes de la feuille covoiturage.

2- je veux qu'en sélectionnant le nom du directeur de stage dans la cellule covoiturage.L4, Calc recherche dans data.X2:Xx ce nom et renvoie dans covoiturage.D28 une concaténation de certaines cellules de la ligne data.Xy:AFy (prénom, nom, n° de téléphone).



J'utilise les filtres pour masquer des éléments, mais dans la mesure ou la feuille covoiturage est destinée à l'impression et data à une saisie brute des données, je préfère éviter d'imprimer directement via data (sans compter q'uil faudrait masquer des colonnes, ce que je ne sais pas faire non plus).

J'ai jeté un œil sur ton lien, j'ai à peu près saisi l'usage des fonctions equiv, decaler et rechercheV mais je n'arrive pas à les réutiliser correctement.
Dernière édition par Laadna le 05 Nov 2009 17:58, édité 1 fois au total.
OpenOffice 3.1.0, XP familial SP 3
Laadna
Fraîchement OOothentifié
 
Messages: 8
Inscrit le: 01 Avr 2008 12:21

Re: Sélection et MàJ automatique d'éléments d'une liste

Messagepar jjk » 05 Nov 2009 16:27

Bonjour

1) Ne mets pas de données perso sur le forum.
2) Tu veux que "Calc cherche dans data.T2:Tx ce numéro " mais la colonne T contient des libellés longs et pas des numéros, et en plus les numéros contenus dans ces libellés ne sont pas uniques. Comment doit-on procéder ? On prend le premier trouvé ???
OpenOffice 2.4.2 sous XP SP2 et 3.1.1/Win 7 sur 2 postes différents
jjk
InconditiOOonnel
InconditiOOonnel
 
Messages: 935
Inscrit le: 27 Oct 2008 16:30

Re: Sélection et MàJ automatique d'éléments d'une liste

Messagepar Laadna » 05 Nov 2009 17:55

On les prend tous, un par un et à chaque fois qu'on le trouve on insère la ligne correspondante dans la feuille covoiturage.

Ce numéro correspond à un ID de stage, pour lequel est associée une liste de stagiaires. Ce sont ces stagiaires (ou plutôt leurs coordonnées) que je veux copier dans la feuille covoiturage avec la saisie de l'ID. Mais si Calc ne peut pas rechercher une chaine de caractères au sein d'une cellule, je peux créer une colonne ne contenant que cet ID.

J'ai édité la feuille, un oubli.
OpenOffice 3.1.0, XP familial SP 3
Laadna
Fraîchement OOothentifié
 
Messages: 8
Inscrit le: 01 Avr 2008 12:21

Re: Sélection et MàJ automatique d'éléments d'une liste

Messagepar jjk » 06 Nov 2009 10:29

Bonjour

Pour ton problème 1, voici une solution possible via des formules.
Une solution utilisant les filtres serait sans doute plus efficace mais c'est plus long à expliquer.
J'ai inséré une colonne B dans laquelle je mets le n° de la ligne de la colonne data.T où est trouvé chaque n° d'habilitation.
Code: Tout sélectionner   AgrandirRéduire
B3 = EQUIV(".*"&$M$1&".*";data.$T$2:$T$1000;0)-1
renvoie le n° de la première ligne contenant le n° d'habilitation dans les lignes 2 à 1000. Si on a plus de 1000 lignes en data.T, il te faut augmenter ce chiffre dans la formule.
Mais la fonction EQUIV ne renvoie que la première occurrence dans une liste. Pour trouver les suivantes il faut décaler l'origine de la liste afin que la recherche évite les premières occurrences déjà trouvées. D'où le
Code: Tout sélectionner   AgrandirRéduire
DECALER(data.$T$2:$T$1000;$B3+1;0)
que tu trouves dans la formule à partir de B4.
Dans la colonne covoiturage.B la formule B3 est particulière. Mais les formules B5 à B25 sont obtenues par simple recopie de B4.
Seules les lignes trouvées renvoient un n° de ligne correct, les autres renvoient la valeur d'erreur #NA. Pour "cacher" ce #NA il faudrait au moins tripler la longueur des formules, ce qui me semble un travail disproportionné par rapport au gain esthétique obtenu.

Une fois trouvé le n° de ligne, il est facile de trouver le nom, le prénom etc. par la formule
Code: Tout sélectionner   AgrandirRéduire
INDEX(data.$J$2:$J$1000;$B3+1;1)
par exemple pour le prénom, puisque la colonne data.$J contient les prénoms. Je te laisse le soin de compléter les formules pour l'adresse, la ville, etc.

Dernière chose : note la liste déroulante en data.M1, basée sur la plage de cellules $data.$G$2:$G$20. Bien sûr si cette plage s'allonge au-delà de la ligne 20 il te faudra modifier son adresse (menu Données > Validité > onglet Critères). Est-ce que ça te convient ? Je n'en suis pas certain, car dans cette plage je ne retrouve pas tous les n° d'habilitation de la plage data.T.
Pièces jointes
listing bafa jjk.ods
(20.32 Kio) Téléchargé 3 fois
OpenOffice 2.4.2 sous XP SP2 et 3.1.1/Win 7 sur 2 postes différents
jjk
InconditiOOonnel
InconditiOOonnel
 
Messages: 935
Inscrit le: 27 Oct 2008 16:30

Re: Sélection et MàJ automatique d'éléments d'une liste

Messagepar gerard24 » 06 Nov 2009 11:24

Bonjour,

jjk a écrit:Seules les lignes trouvées renvoient un n° de ligne correct, les autres renvoient la valeur d'erreur #NA. Pour "cacher" ce #NA il faudrait au moins tripler la longueur des formules, ce qui me semble un travail disproportionné par rapport au gain esthétique obtenu.

C'est vrai que ça rallonge mais on ne triple pas tout à fait quand même. Par exemple en B4 :
Code: Tout sélectionner   AgrandirRéduire
=SI($A4<=NB.SI(data.$T$2:$T$1000;".*"&$M$1&".*");(EQUIV(".*"&$M$1&".*";DECALER(data.$T$2:$T$1000;$B3+1;0);0)+$B3);"")


Pour les colonnes suivantes, un simple test sur cellules vides : SI($B4="";"";ta_formule)

Tu peux égalemant nommer ta plage data.$T$2:$T$1000 les formules y gagneront en lisibilité.

A+
OpenOffice 3.1.1 sous Windows vista SP2
Site officiel pour télécharger OpenOffice.org
Avatar de l’utilisateur
gerard24
PassiOOonné
PassiOOonné
 
Messages: 710
Inscrit le: 06 Juil 2008 19:08
Localisation: dans le Périgord

Re: Sélection et MàJ automatique d'éléments d'une liste

Messagepar jjk » 06 Nov 2009 14:03

A gerard24
Bien vu Gérard. Je n'avais pas pensé à utiliser la colonne A pour comparer au nombre d'occurrences trouvées.

A Laadna
Pour ton problème n°2 :
Code: Tout sélectionner   AgrandirRéduire
=DECALER(formateurs;EQUIV($M$4;formateurs;0)-1;0;1;1)&" "&DECALER(formateurs;EQUIV($M$4;formateurs;0)-1;1;1;1)&" "&DECALER(formateurs;EQUIV($M$4;formateurs;0)-1;2;1;1)
par exemple pour récupérer les 3 premières colonnes.
OpenOffice 2.4.2 sous XP SP2 et 3.1.1/Win 7 sur 2 postes différents
jjk
InconditiOOonnel
InconditiOOonnel
 
Messages: 935
Inscrit le: 27 Oct 2008 16:30

Re: Sélection et MàJ automatique d'éléments d'une liste

Messagepar Laadna » 06 Nov 2009 15:38

jjk a écrit:Dernière chose : note la liste déroulante en data.M1, basée sur la plage de cellules $data.$G$2:$G$20. Bien sûr si cette plage s'allonge au-delà de la ligne 20 il te faudra modifier son adresse (menu Données > Validité > onglet Critères). Est-ce que ça te convient ? Je n'en suis pas certain, car dans cette plage je ne retrouve pas tous les n° d'habilitation de la plage data.T.

Merci, ce sera plus pratique lorsque je confierai le fichier à des gens technologiquement inaptes. :p

Les valeurs #N/D ne me dérangent pas car les lignes vides sont effacées avant impression (à la main, mais s'il existe une solution pour automatiser leur effaçage ou masquage à l'impression je prend).

Par contre je retrouve certaines cellules vides et d'autres avec un zéro lorsque des informations manquent (tel et mail), mais je n'arrive pas à comprendre pourquoi deux valeurs différentes s'affichent (les cellules dans data sont bien vides, pas de caractères cachés). Pour le coup, j'aimerais bien que si le champ correspondant dans data est vide, la cellule dans covoiturage le soit aussi.

Concernant la concaténation des informations relatives au directeur, une idée ? J'ai besoin que s'affiche dans covoiturage.E28 la formule suivante
Code: Tout sélectionner   AgrandirRéduire
=CONCATENER(data.Yx;" ";data.Xx;", ";data.AFx;)

Ou x est le numéro de ligne correspondant au contenu de covoiturage.M4 cherché dans data.X
OpenOffice 3.1.0, XP familial SP 3
Laadna
Fraîchement OOothentifié
 
Messages: 8
Inscrit le: 01 Avr 2008 12:21

Re: Sélection et MàJ automatique d'éléments d'une liste

Messagepar gerard24 » 06 Nov 2009 16:02

Bonjour,

Laadna a écrit:Par contre je retrouve certaines cellules vides et d'autres avec un zéro lorsque des informations manquent (tel et mail), mais je n'arrive pas à comprendre pourquoi deux valeurs différentes s'affichent (les cellules dans data sont bien vides, pas de caractères cachés). Pour le coup, j'aimerais bien que si le champ correspondant dans data est vide, la cellule dans covoiturage le soit aussi.

Cela risque d'être très long par formule, le + simple est donc :
_ Pour l'affichage à l'écran : décocher valeur zéro dans les options OpenOffice.Calc
_ Pour l'impression : format > page , onglet classeur décocher valeur zéro dans impression.

Concernant la concaténation des informations relatives au directeur, une idée ? J'ai besoin que s'affiche dans covoiturage.E28 la formule suivante
Code: Tout sélectionner   AgrandirRéduire
=CONCATENER(data.Yx;" ";data.Xx;", ";data.AFx;)

Ou x est le numéro de ligne correspondant au contenu de covoiturage.M4 cherché dans data.X

jjk, dans son message précédent t'a indiqué une formule. Pour l'adapter au données que tu veux voir figurer, modifies le 3ième argument de la fonction DECALER.
Il s'agit du nombre de colonne en décalage par rapport à la colonne contenant le nom du formateur. (exemple : 1 pour prénom, 7 pour téléphone).

A+
OpenOffice 3.1.1 sous Windows vista SP2
Site officiel pour télécharger OpenOffice.org
Avatar de l’utilisateur
gerard24
PassiOOonné
PassiOOonné
 
Messages: 710
Inscrit le: 06 Juil 2008 19:08
Localisation: dans le Périgord

Re: Sélection et MàJ automatique d'éléments d'une liste

Messagepar Laadna » 06 Nov 2009 17:49

gerard24 a écrit:jjk, dans son message précédent t'a indiqué une formule. Pour l'adapter au données que tu veux voir figurer, modifies le 3ième argument de la fonction DECALER.
Il s'agit du nombre de colonne en décalage par rapport à la colonne contenant le nom du formateur. (exemple : 1 pour prénom, 7 pour téléphone).

A+

Ok merci, je me suis débrouillé pour les coordonnées du directeur.

Par contre j'ai voulu faire la même chose pour les références du stage en A30, voila mes formules :
Code: Tout sélectionner   AgrandirRéduire
L11=EQUIV(".*"&$M$1&".*";data.$AO$3:$AO$35;0)
A30=INDEX(data.$AO$3:$AO$35;$L$11;1)

Seulement, la cellule A30 ne se met à jour que lorsque je la modifie et pas à chaque modification de M1.
OpenOffice 3.1.0, XP familial SP 3
Laadna
Fraîchement OOothentifié
 
Messages: 8
Inscrit le: 01 Avr 2008 12:21

Re: Sélection et MàJ automatique d'éléments d'une liste

Messagepar jjk » 06 Nov 2009 18:25

Difficile a priori de voir pourquoi la MAJ ne se fait pas automatiquement sur cette cellule-là alors qu'elle se fait ailleurs.
Tu es bien en mode de calcul automatique (menu Outils > Contenu des cellules) ?
Sinon, envoie le fichier...
OpenOffice 2.4.2 sous XP SP2 et 3.1.1/Win 7 sur 2 postes différents
jjk
InconditiOOonnel
InconditiOOonnel
 
Messages: 935
Inscrit le: 27 Oct 2008 16:30


Retour vers Tableur

Qui est en ligne ?

Utilisateurs parcourant actuellement ce forum : Google [Bot] et 1 invité