[Résolu] Copier une ligne si valeur d'une cellule est vraie

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.
s05b
Membre lOOyal
Membre lOOyal
Messages : 34
Inscription : 12 août 2017 12:42

[Résolu] Copier une ligne si valeur d'une cellule est vraie

Message par s05b »

Bonjour,

Après avoir examiné les sujets suivants, je n'ai pas réussi à mettre en oeuvre les solutions proposées :
https://forum.openoffice.org/fr/forum/v ... =4&t=36494
https://forum.openoffice.org/fr/forum/v ... =4&t=36416

Pourriez-vous m'éclairer sur la manière de procéder pour recopier automatiquement une ligne sur une autre feuille si la valeur d'une cellule de cette ligne est vraie ?
(dans mon cas, recopier la ligne vers la page "tampon" si présence d'un "1" d'un "2" dans la colonne "demande d'impression" de la page "grand total").

Merci par avance !

PS : merci de me préciser si je dois valider la fonction proposée par CTRL+SHIFT+ENTER ou non
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Dernière modification par micmac le 25 août 2019 22:01, modifié 1 fois.
Raison : Balisage
Libre Office 6.2.8.2 sous Windows 10
Avatar de l’utilisateur
Jean-Louis Cadeillan
GourOOu
GourOOu
Messages : 5753
Inscription : 02 janv. 2009 23:56

Re: Copier une ligne si la valeur d'une cellule est vraie

Message par Jean-Louis Cadeillan »

Bonjour,
Une solution consiste à mettre la formule suivante en A23 de la feuille Tampon :

Code : Tout sélectionner

=SIERREUR(INDEX(gt;PETITE.VALEUR(SI(imp=1;LIGNE(imp));LIGNE(A1))-MIN(LIGNE(imp))+1;COLONNE());"")
La formule est matricielle avec une seule cellule en sortie, à valider par Ctrl+Maj+Entrée. Pour recopier une formule matricielle vers le bas :
  • il suffit de positionner la souris dans le coin inférieur droit de la cellule : le curseur se transforme en croix (+), puis, il faut cliquer/glisser vers le bastout en appuyant simultanément sur la touche Ctrl ;
  • une autre manière de faire est de copier la cellule initiale (Ctrl+C), puis de sélectionner la plage des cellules qui doivent contenir la même formule, puis de coller (Ctrl+V).
gt est la plage de cellules $'Grand total'.$A$54:$L$153 (153 parce que cela fait 100 lignes, mais bien sûr c'est modifiable).
imp est la plage de cellules $'Grand total'.$K$54:$K$153 (même remarque). Les plages de cellules sont définies par Insertion > Plages ou expressions nommées > Définir (ou Gérer).
Si je traduis cette formule en langage courant : si le code impression est à 1, alors je retiens la ligne correspondante [fonction SI()], je remonte ces n° de lignes [fonction PETITE.VALEUR()], je vais chercher les valeurs de gt correspondant à ces n° de ligne et en fonction de la colonne courante [fonction INDEX()] et enfin, s'il y a une erreur, je ne mets rien [fonction SIERREUR(), propre à LibreOffice]. MIN(LIGNE(imp)) est égal à 54, c'est le plus petit n° de ligne de la plage gt, il sert à décaler la recherche dans INDEX(), fonction qui utilise non pas les n° de ligne absolus, mais les rangs de sa plage de cellules.
La même formule sera utilisée en A41, mais avec imp=2.
Cordialement,
Jean-Louis
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
LibO 7.6.6.3 (x64 avec Java 1.8.0_411) et AOO 4.1.15 (avec Java x32 1.8.0_381), Windows 7 Édition Intégrale 64 SP1
s05b
Membre lOOyal
Membre lOOyal
Messages : 34
Inscription : 12 août 2017 12:42

[Résolu] Copier une ligne si la valeur d'une cellule est vra

Message par s05b »

Bonjour Jean-Louis,

Merci pour cette solution qui fonctionne à merveille !

J'ai eu quelques difficultés avec les plages de cellules :
- j'avais en tête de les définir dans "Données/Définir la plage" alors qu'en fait, c'est dans la case en haut à gauche de l'onglet concernée
- j'avais ensuite une difficulté à basculer sur mes propres plages de données puisque LibreOffice gardait en tête l'adresse absolue de ton document de démonstration : il m'a donc fallu (pour aller au plus simple) les supprimer puis les recréer depuis cette case et le menu "Gérer les noms..."
- j'avais ensuite une dernière difficulté à comprendre que la plage gt comprenait plusieurs colonnes (ce que tu avais pourtant décrit de manière très précise) : j'avais lu trop vite...

Même si j'ai encore du mal à maitriser ta formule, tes explications permettent d'avancer et d'apprendre de nouvelles choses.

Merci beaucoup !
Libre Office 6.2.8.2 sous Windows 10