[Résolu] Paramètres invalide formule COLONNE en matricielle

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.
ooSikas
Membre OOrganisé
Membre OOrganisé
Messages : 72
Inscription : 22 juil. 2017 08:33

[Résolu] Paramètres invalide formule COLONNE en matricielle

Message par ooSikas »

Bonjour

J'ai pour but de créer un planning sous Calc avec un bouton de tri automatique sous forme de diagramme de gant.

Avant de coder la macro de tri, je voulais récupérer des informations dans le tableur tel que :

Date de démarrage de la tâche : OK ça fonctionne
Date de fin de la tâche : OK ça fonctionne
Durée de la tâche : Ok ça fonctionne

Date du prochain démarrage : (ultérieur à aujourd'hui, pour le cas ou il y a plusieurs tâches sur la même ligne) : j'ai un bogue Err504
J'ai l'impression que cela vient de la partie de la formule COLONNE(INDIRECT(ADRESSE(xxxx))) qui ne supporte pas le passage en formule matricielle

La formule fonctionne bien en ligne 25 mais impliquerai de la modifier tous les jours manuellement pour décaler la plage d'une cellule. (Départ de la plage : à la colonne de la date d'aujourd'hui)
{=INDEX(ligne_date;1;MIN(SI((INDIRECT(ADRESSE(LIGNE();COLONNE(INDEX($A27:$YC27;EQUIV(AUJOURDHUI();ligne_date;0))))&":"&ADRESSE(LIGNE();num_last_col))=1)=1;COLONNE(DF25:YC25))))}


(Dans la formule ligne_date correspond à la plage A22:YC22 que j'ai renommé ainsi pour y voir plus clair dans les formules)

La formule ligne 27, qui est la même, à la nuance près que j'essaye de récupérer de manière relative le point de départ de la plage (aujourd'hui) me renvoie cette Err504
{=INDEX(ligne_date;1;MIN(SI((INDIRECT(ADRESSE(LIGNE();COLONNE(INDEX($A27:$YC27;EQUIV(AUJOURDHUI();ligne_date;0))))&":"&ADRESSE(LIGNE();num_last_col))=1)=1;COLONNE(INDIRECT(ADRESSE(LIGNE();EQUIV(AUJOURDHUI();ligne_date;0))&":"&ADRESSE(LIGNE();num_last_col))))))}


Je ne comprend pas ou est mon erreur et comment faire pour corriger la formule. Je n'utilise que depuis tout récemment les formules matricielles, et je ne suis pas encore très familier avec, il se peut donc que mon erreur provienne d'un non sens total du a mon incompréhension.

Merci d'avance pour votre aide
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Dernière modification par ooSikas le 05 mai 2020 13:22, modifié 1 fois.
LibreOffice Version: 6.4.4.2 sous Windows 10
Jeff
GourOOu
GourOOu
Messages : 9632
Inscription : 18 sept. 2006 09:40
Localisation : France

Re: Paramètres invalide formule COLONNE en matricielle

Message par Jeff »

Bonjour,

Pas trop le temps de me pencher sur ton classeur :?

Dans l’absolue, on valide matriciellement... quand on attends une matrice en retour (ou bien que l’on travaille sur une matrice) :wink:

Pour C25, renseigne le paramètre de la fonction LIGNE :

Code : Tout sélectionner

=INDEX(ligne_date;1;MIN(SI((INDIRECT(ADRESSE(LIGNE(A25);COLONNE(INDEX($A27:$YC27;EQUIV(AUJOURDHUI();ligne_date;0))))&":"&ADRESSE(LIGNE(A25);num_last_col))=1)=1;COLONNE(DF25:YC25))))
à valider matriciellement

Idem pour H15 :

Code : Tout sélectionner

=COLONNE(INDIRECT(ADRESSE(LIGNE(A15);EQUIV(AUJOURDHUI();ligne_date;0))&":"&ADRESSE(LIGNE(A15);num_last_col)))
Tu verra le résultat lors de la validation :aie:

A +
ooSikas
Membre OOrganisé
Membre OOrganisé
Messages : 72
Inscription : 22 juil. 2017 08:33

Re: Paramètres invalide formule COLONNE en matricielle

Message par ooSikas »

Bonjour et merci pour la réponse

Je ne suis pas sur d'avoir tout compris. :?

Pour moi la formule en O25 (pas C25 mais je pense qu'on parle de la même) fonctionne bien en matricielle même sans le numéro de ligne. Ca va chercher le numero de la ligne sur laquelle est la formule.

Code : Tout sélectionner

=INDEX(ligne_date;1;MIN(SI((INDIRECT(ADRESSE(LIGNE(A25);COLONNE(INDEX($A27:$YC27;EQUIV(AUJOURDHUI();ligne_date;0))))&":"&ADRESSE(LIGNE(A25);num_last_col))=1)=1;COLONNE(DF25:YC25))))
Mon problème c'est le

Code : Tout sélectionner

COLONNE(DF25:YC25)
tout à la fin. Le point de départ de cette plage est variable.

DF25 = 05/05 et YC25 = fin du tableau. Mon but est que demain cela renvoi la plage DG25:YC25 : du 06/05 à la fin du tableau.

Mais quand je change les paramètres de la fonction Colonne avec

Code : Tout sélectionner

INDIRECT(ADRESSE(LIGNE();EQUIV(AUJOURDHUI();ligne_date;0))&":"&ADRESSE(LIGNE();num_last_col))
ca me renvoi une erreur.

Pourtant quand je les teste indépendamment,

Code : Tout sélectionner

ADRESSE(LIGNE();EQUIV(AUJOURDHUI();ligne_date;0))
me renvoi bien DF25

et

Code : Tout sélectionner

ADRESSE(LIGNE();num_last_col))
me renvoi bien YC25
:fou:
LibreOffice Version: 6.4.4.2 sous Windows 10
Avatar de l’utilisateur
Jean-Louis Cadeillan
GourOOu
GourOOu
Messages : 5753
Inscription : 02 janv. 2009 23:56

Re: Paramètres invalide formule COLONNE en matricielle

Message par Jean-Louis Cadeillan »

Bonjour,
Après quelques essais, il semblerait que ce soit la présence de LIGNE() sans argument à l'intérieur de la fonction COLONNE() en matriciel qui crée l'erreur 504. Donc deux solutions :
  • soit tu remplaces en O27 les deux LIGNE() à l'intérieur de COLONNE() par LIGNE(O27) (ou A27, peu importe) et si tu copies cette formule la référence étant relative, elle s'adaptera à la nouvelle ligne, ce qui donnerait en O27 :

    Code : Tout sélectionner

    =INDEX(ligne_date;1;MIN(SI((INDIRECT(ADRESSE(LIGNE();COLONNE(INDEX($A27:$YC27;EQUIV(AUJOURDHUI();ligne_date;0))))&":"&ADRESSE(LIGNE();num_last_col))=1)=1;COLONNE(INDIRECT(ADRESSE(LIGNE(O27);EQUIV(AUJOURDHUI();ligne_date;0))&":"&ADRESSE(LIGNE(O27);num_last_col))))))
    C'est à peu près la solution de Jeff (que je salue :wink:)
  • soit tu remplaces les deux LIGNE() à l'intérieur de COLONNE() par CELLULE("ligne"), ce qui donnerait en O27 :

    Code : Tout sélectionner

    =INDEX(ligne_date;1;MIN(SI((INDIRECT(ADRESSE(LIGNE();COLONNE(INDEX($A27:$YC27;EQUIV(AUJOURDHUI();ligne_date;0))))&":"&ADRESSE(LIGNE();num_last_col))=1)=1;COLONNE(INDIRECT(ADRESSE(CELLULE("ligne");EQUIV(AUJOURDHUI();ligne_date;0))&":"&ADRESSE(CELLULE("ligne");num_last_col))))))
Cordialement,
Jean-Louis
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
ooSikas
Membre OOrganisé
Membre OOrganisé
Messages : 72
Inscription : 22 juil. 2017 08:33

Re: Paramètres invalide formule COLONNE en matricielle

Message par ooSikas »

Ah oui effectivement,ça fonctionne.

Je n'avais pas compris parceque j'utilisai LIGNE() dans le formule au dessus et ça ne posait pas de problème, mais ce n'était pas à l'intérieur de la fonction COLONNE()

Du coup je passe en Résolu

Merci beaucoup
LibreOffice Version: 6.4.4.2 sous Windows 10