[Résolu]Recopier à la suite les cases non nulles d'une ligne
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.
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.
-
- Membre lOOyal
- Messages : 34
- Inscription : 12 août 2017 12:42
[Résolu]Recopier à la suite les cases non nulles d'une ligne
Bonjour,
J'aimerais trouver un moyen de faire - sans macro - la recopie de toutes les cases non nulles d'une ligne donnée vers un autre tableau où elles apparaîtraient à la suite et sans blanc.
Dans cet exemple, j'aimerais que le tableau "valeurs en vrac sur historique" placé dans l'onglet "B" soit utilisé pour insérer dans l'onglet "A" les valeurs du mois N sélectionné dans une case, ainsi que du mois N+1.
Comme indiqué dans la "Synthèse par mois en fonction de l'historique", j'aimerais trouver le moyen de les faire s'afficher à la suite, sans blanc et avec les valeurs MOIS, TITRE et VALEUR, quel que soit le nombre de valeurs effectivement présentes dans le mois.
Auriez-vous des pistes ?
Remerciements
J'aimerais trouver un moyen de faire - sans macro - la recopie de toutes les cases non nulles d'une ligne donnée vers un autre tableau où elles apparaîtraient à la suite et sans blanc.
Dans cet exemple, j'aimerais que le tableau "valeurs en vrac sur historique" placé dans l'onglet "B" soit utilisé pour insérer dans l'onglet "A" les valeurs du mois N sélectionné dans une case, ainsi que du mois N+1.
Comme indiqué dans la "Synthèse par mois en fonction de l'historique", j'aimerais trouver le moyen de les faire s'afficher à la suite, sans blanc et avec les valeurs MOIS, TITRE et VALEUR, quel que soit le nombre de valeurs effectivement présentes dans le mois.
Auriez-vous des pistes ?
Remerciements
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Dernière modification par s05b le 15 août 2017 17:04, modifié 1 fois.
Libre Office 6.2.8.2 sous Windows 10
-
- RespOOnsable forum
- Messages : 9254
- Inscription : 28 août 2010 08:45
Re: Recopier à la suite les cases non nulles d'une ligne
Bonjour et beinvenue,
Pour faciliter la compréhension de votre problème par les personnes qui vont vous aider, plutôt qu'une copie d'écran, vous devriez joindre un exemple de fichier dépersonnalisé à votre prochain message.
Comment joindre un fichier
Pour faciliter la compréhension de votre problème par les personnes qui vont vous aider, plutôt qu'une copie d'écran, vous devriez joindre un exemple de fichier dépersonnalisé à votre prochain message.
Comment joindre un fichier
Touche Ctrl de Windows = touche cmd⌘ sur Mac
Outils > Options sur Windows = OpenOffice > Préférences sur Mac
Outils > Options sur Windows = OpenOffice > Préférences sur Mac
-
- Membre lOOyal
- Messages : 34
- Inscription : 12 août 2017 12:42
Re: Recopier à la suite les cases non nulles d'une ligne
J'ajoute effectivement pour plus de clarté un fichier d'exemple :
Merci pour cette remarque Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Libre Office 6.2.8.2 sous Windows 10
-
- ManitOOu
- Messages : 3031
- Inscription : 02 juil. 2014 17:25
Re: Recopier à la suite les cases non nulles d'une ligne
Bonjour,
Si pour un même mois il y a plusieurs titre renseignés (exemple mois 3 Titre C et Titre F -- mois 4 Titre D et Titre F)
comment le tableau de synthèse doit-il afficher cela ?
Merci
Si pour un même mois il y a plusieurs titre renseignés (exemple mois 3 Titre C et Titre F -- mois 4 Titre D et Titre F)
comment le tableau de synthèse doit-il afficher cela ?
Merci
-
- Membre lOOyal
- Messages : 34
- Inscription : 12 août 2017 12:42
Re: Recopier à la suite les cases non nulles d'une ligne
Bonjour Zeguedon,
Merci pour les retours
Il me suffit que les éléments s'affichent à la suite (une ligne chacun), du moment qu'ils existent.
C'est pour ça que dans mon exemple, j'ai volontairement laissé un seul élément concernant MOIS 5 et deux concernant MOIS 6.
En fait, je vais me retrouver avec environ 20 TITRES possibles mais environ 2 ou 3 uniquement de remplis chaque mois.
Je n'aimerais donc pas alourdir inutilement le document avec des valeurs nulles.
Je reste dispo si besoin d'éclaircir un peu plus la demande
Merci pour les retours
Il me suffit que les éléments s'affichent à la suite (une ligne chacun), du moment qu'ils existent.
C'est pour ça que dans mon exemple, j'ai volontairement laissé un seul élément concernant MOIS 5 et deux concernant MOIS 6.
En fait, je vais me retrouver avec environ 20 TITRES possibles mais environ 2 ou 3 uniquement de remplis chaque mois.
Je n'aimerais donc pas alourdir inutilement le document avec des valeurs nulles.
Je reste dispo si besoin d'éclaircir un peu plus la demande
Libre Office 6.2.8.2 sous Windows 10
-
- ManitOOu
- Messages : 3031
- Inscription : 02 juil. 2014 17:25
Re: Recopier à la suite les cases non nulles d'une ligne
Bonjour,
Une solution à base de formules matricielles et de plages nommées.
Je me suis planté dans la lecture de l’énoncé, le tableau de synthèse affiche le mois sélectionné et le mois précédent au lieu du mois suivant. C'est corrigeable.
Pour les explications concernant l'adaptation à ton fichier réel, je reviendrai plus tard car je dois m'absenter encore une bonne parie de la journée. En attendant je te laisse décortiquer
Je me suis aussi permis la liberté de modifier les libellés des mois afin qu'ils soient des valeur numériques (plus facile à gérer que du texte).
et le fichier qui va avec :
Une solution à base de formules matricielles et de plages nommées.
Je me suis planté dans la lecture de l’énoncé, le tableau de synthèse affiche le mois sélectionné et le mois précédent au lieu du mois suivant. C'est corrigeable.
Pour les explications concernant l'adaptation à ton fichier réel, je reviendrai plus tard car je dois m'absenter encore une bonne parie de la journée. En attendant je te laisse décortiquer
Je me suis aussi permis la liberté de modifier les libellés des mois afin qu'ils soient des valeur numériques (plus facile à gérer que du texte).
et le fichier qui va avec :
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Dernière modification par zeguedon le 13 août 2017 23:07, modifié 1 fois.
-
- Membre lOOyal
- Messages : 34
- Inscription : 12 août 2017 12:42
Re: Recopier à la suite les cases non nulles d'une ligne
Merci beaucoup Zeguedon pour cette approche !
Je sentais bien le côté matrice mais la lecture de tes formules reste déjà bien compliqué pour en subodorer l'autoconstruction
Ok pour les 3 plages de données Titre, Données et Mois. Je n'ai pas encore ce réflexe.
Le renommage des mois en chiffres me va très bien ; cela peut également être très pratique à l'usage si je veux rappeler un mois d'une autre année dans l'historique...
Libre à moi également de rajouter une colonne pour les mois et laissant ce "numéro d'ordre".
Par contre, si j'ajoute cette colonne, il ne faudrait pas qu'elle soit dans la plage de données j'imagine ?
J'ai également vu ta case de choix insérée dans l'onglet B.
J'imagine que c'est celle-ci que je devrai déplacer dans l'onglet A pour coller à mon exemple initial ?
Pour la suite, je ne m'amuserai pas à essayer de modifier ta formule pour inverser la sélection de "mois N-1" en "mois N+1" car je pense faire plus de dégâts qu'autre chose
Mais laisser le fichier en historique pourra peut-être aider d'autres personnes par la suite car le cas semble effectivement plus classique
En tout cas, si tu arrives à m'en glisser deux mots de français pour essayer d'en comprendre le fonctionnement, c'est avec grand plaisir !
Au plaisir d'en rediscuter pour finaliser ton idée
Je sentais bien le côté matrice mais la lecture de tes formules reste déjà bien compliqué pour en subodorer l'autoconstruction
Ok pour les 3 plages de données Titre, Données et Mois. Je n'ai pas encore ce réflexe.
Le renommage des mois en chiffres me va très bien ; cela peut également être très pratique à l'usage si je veux rappeler un mois d'une autre année dans l'historique...
Libre à moi également de rajouter une colonne pour les mois et laissant ce "numéro d'ordre".
Par contre, si j'ajoute cette colonne, il ne faudrait pas qu'elle soit dans la plage de données j'imagine ?
J'ai également vu ta case de choix insérée dans l'onglet B.
J'imagine que c'est celle-ci que je devrai déplacer dans l'onglet A pour coller à mon exemple initial ?
Pour la suite, je ne m'amuserai pas à essayer de modifier ta formule pour inverser la sélection de "mois N-1" en "mois N+1" car je pense faire plus de dégâts qu'autre chose
Mais laisser le fichier en historique pourra peut-être aider d'autres personnes par la suite car le cas semble effectivement plus classique
En tout cas, si tu arrives à m'en glisser deux mots de français pour essayer d'en comprendre le fonctionnement, c'est avec grand plaisir !
Au plaisir d'en rediscuter pour finaliser ton idée
Libre Office 6.2.8.2 sous Windows 10
-
- ManitOOu
- Messages : 3031
- Inscription : 02 juil. 2014 17:25
Re: Recopier à la suite les cases non nulles d'une ligne
Au temps pour moi, je ne t'ai pas transmis le bon fichier.
Il faudrait que tu me donne les dimension de ton tableau final pour adapter les formules.
A+
Il faudrait que tu me donne les dimension de ton tableau final pour adapter les formules.
A+
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
-
- Membre lOOyal
- Messages : 34
- Inscription : 12 août 2017 12:42
Re: Recopier à la suite les cases non nulles d'une ligne
Tu est sur la bonne piste, c'est génial !
Plutôt que de te donner mon fichier cible, je préfère bien comprendre comment modifier ton travail sans le casser.
(si besoin, je pourrai te donner le tableau, il n'y a rien de bien confidentiel... mais je préfère cette démarche)
Par exemple, sur mes essais ci-dessous : - j'ai vu que je pouvais ajouter des colonnes de Titre (onglet B) mais il semble que la zone de la matrice (onglet A) soit limitée.
En effet, lorsque je sélectionne les zones matricielles sur l'onglet A avec CTRL+/, je vois le surlignage des zones concernées.
Peut-être que la limitation rencontrée est liée à la plage A8:A13 de l'onglet A qui est plus courte de 2 cases des zones B8:B15 et C8:C15 ?
Dans ce cas, je ne sais pas comment agrandir la zone de la matrice A8:A13 sans message d'erreur "#NOM ?" (si je rallonge la zone de la colonne A) ou "Impossible de modifier uniquement une partie de la matrice." (si je rallonge la zone de la colonne B ou C).
D'ailleurs, saurais-tu m'expliquer pourquoi il y a cette différence de traitement dans les erreurs entre ces colonnes ?
- je vois que tu as devancé mon travail en créant la liste déroulante de choix sur l'onglet A en E3 (Merci !)
Pour bien maitriser le sujet sur LibreOffice, j'avais besoin de mieux comprendre comme c'était fabriqué et géré...
Si d'autres lecteurs venaient à être intéressés,
un tuto clair est dispo sur https://forum.openoffice.org/fr/forum/v ... 29&t=22412
Merci beaucoup !
Plutôt que de te donner mon fichier cible, je préfère bien comprendre comment modifier ton travail sans le casser.
(si besoin, je pourrai te donner le tableau, il n'y a rien de bien confidentiel... mais je préfère cette démarche)
Par exemple, sur mes essais ci-dessous : - j'ai vu que je pouvais ajouter des colonnes de Titre (onglet B) mais il semble que la zone de la matrice (onglet A) soit limitée.
En effet, lorsque je sélectionne les zones matricielles sur l'onglet A avec CTRL+/, je vois le surlignage des zones concernées.
Peut-être que la limitation rencontrée est liée à la plage A8:A13 de l'onglet A qui est plus courte de 2 cases des zones B8:B15 et C8:C15 ?
Dans ce cas, je ne sais pas comment agrandir la zone de la matrice A8:A13 sans message d'erreur "#NOM ?" (si je rallonge la zone de la colonne A) ou "Impossible de modifier uniquement une partie de la matrice." (si je rallonge la zone de la colonne B ou C).
D'ailleurs, saurais-tu m'expliquer pourquoi il y a cette différence de traitement dans les erreurs entre ces colonnes ?
- je vois que tu as devancé mon travail en créant la liste déroulante de choix sur l'onglet A en E3 (Merci !)
Pour bien maitriser le sujet sur LibreOffice, j'avais besoin de mieux comprendre comme c'était fabriqué et géré...
Si d'autres lecteurs venaient à être intéressés,
un tuto clair est dispo sur https://forum.openoffice.org/fr/forum/v ... 29&t=22412
Merci beaucoup !
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Libre Office 6.2.8.2 sous Windows 10
-
- ManitOOu
- Messages : 3031
- Inscription : 02 juil. 2014 17:25
Re: Recopier à la suite les cases non nulles d'une ligne
Bonjour,
Pour éditer ces formules, clique dans la liste déroulante de la zone de nom (en haut à gauche des entêtes lignes et de colonnes). Tu as en haut de la liste, une entrée de liste nommée Gérer les noms sur laquelle il faut cliquer pour ouvrir le dialogue des zones et formules nommées.
Les formules _LigneRecherchee et _MoisPrecedent définissent dynamiquement les lignes recherchées mais la largeur de ces plages est fixée par le nom des colonnes. C'est cette partie qu'il faut modifier :
Avant le dernier EQUIV(), la lettre G détermine la dernière colonne de ta ligne. C'est cette lettre qu'il faut modifier pour que toute la largeur de ton tableau soit traitée. Idem pour _MoisPrecedent ; tu peux définir à l'avance une zone plus large en prévision de l'évolution susceptible d'être apportée à ton tableau.
Il faut aussi modifier la plage Pl_mois
Pour qu'elle atteigne un nombre de ligne suffisant A30 par exemple. Attention, quelle que soit la ligne à partir de laquelle commence ton tableau, il faut que cette plage commence à la ligne 1 (A1).
Après, pour modifier tes formules matricielles, je te conseille de commencer par toutes les supprimer en ayant pris le soin de les copier en amont (sans le signe égal (=) et sans les valider par Ctl+Maj+Entrée) dans des cellules vides du fichier. Cela te permettra de les recopier ensuite après avoir modifié les formules nommées et les revalider à nouveau par Ctrl+Maj au bon endroit.
A+ pour la suite...
Là comme ça non !s05b a écrit :saurais-tu m'expliquer pourquoi il y a cette différence de traitement dans les erreurs entre ces colonnes ?
Non seulement, il faut aussi que tu édites les formules nommées pour modifier les formules nommées _LigneRecherchee et _MoisPrecedents05b a écrit :j'ai vu que je pouvais ajouter des colonnes de Titre (onglet B) mais il semble que la zone de la matrice (onglet A) soit limitée.
Pour éditer ces formules, clique dans la liste déroulante de la zone de nom (en haut à gauche des entêtes lignes et de colonnes). Tu as en haut de la liste, une entrée de liste nommée Gérer les noms sur laquelle il faut cliquer pour ouvrir le dialogue des zones et formules nommées.
Les formules _LigneRecherchee et _MoisPrecedent définissent dynamiquement les lignes recherchées mais la largeur de ces plages est fixée par le nom des colonnes. C'est cette partie qu'il faut modifier :
Code : Tout sélectionner
INDIRECT("$'Onglet B'.B"&EQUIV(Cel_mois;Pl_mois;0)&":G"&EQUIV(Cel_mois;Pl_mois;0))
Il faut aussi modifier la plage Pl_mois
Code : Tout sélectionner
$'Onglet B'.$A$1:$A$8
Après, pour modifier tes formules matricielles, je te conseille de commencer par toutes les supprimer en ayant pris le soin de les copier en amont (sans le signe égal (=) et sans les valider par Ctl+Maj+Entrée) dans des cellules vides du fichier. Cela te permettra de les recopier ensuite après avoir modifié les formules nommées et les revalider à nouveau par Ctrl+Maj au bon endroit.
A+ pour la suite...
-
- Membre lOOyal
- Messages : 34
- Inscription : 12 août 2017 12:42
Re: Recopier à la suite les cases non nulles d'une ligne
Merci !
(je reformule en mode pas-à-pas)
J'ai donc modifié la plage des formules _LigneRecherchee et _MoisPrecedent dans "Gérer les noms" du menu déroulant permettant de nommer les plages de données : pour étendre la plage au delà de la colonne G, j'ai modifié par BZ dans les deux, avant le dernier EQUIV(). Cela correspond à un maxi du nombre de colonne que j'aurai à exploiter selon mes brouillons.
De plus, pour comprendre un plus grand nombre de lignes (par exemple un max de 50 ans de mois successifs puisque mon ordinateur a l'air de le tolérer facilement lors des essais), je modifie dans le même menu la plage de données Pl_mois en allant de A1 (important selon ce que tu m'expliques) à A600.
Je vois, en faisant CTRL+/ dans chaque colonne de l'onglet A, que cela a pour effet d'agrandir les plages des colonnes Titre (B) et Valeur (C).
Mais la colonne Mois (A) reste limitée à 6 lignes et le résultat se limite aux données des colonnes A à J dans l'onglet B.
Je modifie donc les autres plages de données :
- Pl_entete passe de A1:J1 à A1:BZ1
- Pl_donnees passe de A1:J8 à A1:BZ600
Le résultat n'étant pas suffisant, je vois que la seule formule matricielle qui comprenne des plages "absolues" (nommément désignées dans la formule, hors plages dynamiques) est celle de la colonne Mois (A) de l'onglet A.
J'ai donc copié la formule sans le = et les accolades de début et fin (elles disparaissent automatiquement lorsqu'on sélectionne la formule), pour la mettre dans une autre case (on est obligés de sélectionner toute la plage par CTRL+/ pour pouvoir cliquer dans la formule, sinon message d'erreur bloquant).
Pour cela, on est obligés de faire copier, puis echap, puis coller dans une autre case. Pas de validation de formule matriucielle par CTRL+Maj+entrée à ce stade ni d'ajout de = en début de formule.
Je supprime ensuite la formule dans son emplacement initial en sélectionnant toute la plage par CTRL+/ puis en y faisant un clic droit, "effacer le contenu", tout décocher sauf "formules".
Je retourne dans la case avec la copie de la formule initiale : j'y modifie la plage "B8:B13=" en "B8:B20=" car j'estime que cela englobera les données max possibles pour un mois donné, puis je copie la formule.
Je sélectionne la première case de la plage en devenir (B8), puis j'écris = dans la barre de formule et j'y colle ensuite la formule. Je n'oublie pas de valider par CTRL+Maj+entrée pour transformer en formule matricielle : la formule est automatiquement appliquée à toute la zone B8 à B20 concernée par la formule.
Reste un dernier détail que je n'arrive pas à comprendre : pourquoi est-ce que les données récupérées de l'onglet B semblent ne pas intégrer les données des dernières colonnes "Titre F" et "Titre G", notamment quand on sélectionne le mois 6 ?
Ce sujet est très enrichissant pour découvrir les formules matricielles
Merci pour ta patience très pédagogique !!!
(je reformule en mode pas-à-pas)
J'ai donc modifié la plage des formules _LigneRecherchee et _MoisPrecedent dans "Gérer les noms" du menu déroulant permettant de nommer les plages de données : pour étendre la plage au delà de la colonne G, j'ai modifié par BZ dans les deux, avant le dernier EQUIV(). Cela correspond à un maxi du nombre de colonne que j'aurai à exploiter selon mes brouillons.
De plus, pour comprendre un plus grand nombre de lignes (par exemple un max de 50 ans de mois successifs puisque mon ordinateur a l'air de le tolérer facilement lors des essais), je modifie dans le même menu la plage de données Pl_mois en allant de A1 (important selon ce que tu m'expliques) à A600.
Je vois, en faisant CTRL+/ dans chaque colonne de l'onglet A, que cela a pour effet d'agrandir les plages des colonnes Titre (B) et Valeur (C).
Mais la colonne Mois (A) reste limitée à 6 lignes et le résultat se limite aux données des colonnes A à J dans l'onglet B.
Je modifie donc les autres plages de données :
- Pl_entete passe de A1:J1 à A1:BZ1
- Pl_donnees passe de A1:J8 à A1:BZ600
Le résultat n'étant pas suffisant, je vois que la seule formule matricielle qui comprenne des plages "absolues" (nommément désignées dans la formule, hors plages dynamiques) est celle de la colonne Mois (A) de l'onglet A.
J'ai donc copié la formule sans le = et les accolades de début et fin (elles disparaissent automatiquement lorsqu'on sélectionne la formule), pour la mettre dans une autre case (on est obligés de sélectionner toute la plage par CTRL+/ pour pouvoir cliquer dans la formule, sinon message d'erreur bloquant).
Pour cela, on est obligés de faire copier, puis echap, puis coller dans une autre case. Pas de validation de formule matriucielle par CTRL+Maj+entrée à ce stade ni d'ajout de = en début de formule.
Je supprime ensuite la formule dans son emplacement initial en sélectionnant toute la plage par CTRL+/ puis en y faisant un clic droit, "effacer le contenu", tout décocher sauf "formules".
Je retourne dans la case avec la copie de la formule initiale : j'y modifie la plage "B8:B13=" en "B8:B20=" car j'estime que cela englobera les données max possibles pour un mois donné, puis je copie la formule.
Je sélectionne la première case de la plage en devenir (B8), puis j'écris = dans la barre de formule et j'y colle ensuite la formule. Je n'oublie pas de valider par CTRL+Maj+entrée pour transformer en formule matricielle : la formule est automatiquement appliquée à toute la zone B8 à B20 concernée par la formule.
Reste un dernier détail que je n'arrive pas à comprendre : pourquoi est-ce que les données récupérées de l'onglet B semblent ne pas intégrer les données des dernières colonnes "Titre F" et "Titre G", notamment quand on sélectionne le mois 6 ?
Ce sujet est très enrichissant pour découvrir les formules matricielles
Merci pour ta patience très pédagogique !!!
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Libre Office 6.2.8.2 sous Windows 10
-
- ManitOOu
- Messages : 3031
- Inscription : 02 juil. 2014 17:25
Re: Recopier à la suite les cases non nulles d'une ligne
Je ne reproduis pas : essaye d'enregistrer ton fichier puis recharge le afin que les formules soit réévaluée.s05b a écrit : Reste un dernier détail que je n'arrive pas à comprendre : pourquoi est-ce que les données récupérées de l'onglet B semblent ne pas intégrer les données des dernières colonnes "Titre F" et "Titre G", notamment quand on sélectionne le mois 6 ?
J'ai lu ta réponse en diagonale (suis occupé ailleurs), je reviendrai dessus plus tard pour voir si je n'ai rien oublié.
Concernant l'affichage du numéro du mois, afin qu'il affiche mois xyz tu peux définir un format de cellule personnalisé:
Code : Tout sélectionner
"Mois "#,##
A+
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
-
- Membre lOOyal
- Messages : 34
- Inscription : 12 août 2017 12:42
Re: Recopier à la suite les cases non nulles d'une ligne
Bien vu, il suffisait effectivement de recharger le document pour recharger les formules.
Merci beaucoup pour ton astuce finale !
Elle me sera effectivement très utile.
Bonne continuation à toi
Je passe le sujet en [Résolu].
Merci beaucoup pour ton astuce finale !
Elle me sera effectivement très utile.
Bonne continuation à toi
Je passe le sujet en [Résolu].
Libre Office 6.2.8.2 sous Windows 10