Microsoft 365 Choisir les colonnes les plus récentes pour effectuer un taux d'évolution entre 2 dates

  • Initiateur de la discussion Initiateur de la discussion zaza34
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

zaza34

XLDnaute Nouveau
Bonjour à tous,

Nouveau sur ce forum, je vais bientôt être concerné par un plan social dans mon entreprise et me retrouver à chercher du boulot dans la région montpelliéraine.
J'utilise un fichier perso que j'aimerais améliorer en l'automatisant davantage et vous solliciterai pour ce faire.

Chaque ligne de ce fichier correspond à une société, chaque colonne à une date. Les cellules sont la plupart du temps vierges, sauf quand je rentre une valeur chiffrée, mais la colonne n'est alors jamais pleine complètement. Pour que les données les plus récentes apparaissent à l'ouverture, j'incrémente le tableau en annotant les données les plus récentes à gauche.

Je souhaiterais enregistrer une formule qui prendrait uniquement les 2 dernières colonnes remplies pour chaque ligne concernée, donc sur une autre colonne rentrer cette formule qui concernerait les 2 valeurs les plus à gauche du tableau.
Jusqu'ici, je rentrais manuellement les opérations suivantes: =(SOMME([@[14/8/19]])-SOMME([@[5/8/19]]))/SOMME([@[5/8/19]]) par exemple.
Je pensais utiliser le code couleur ou plutôt son absence (-4142) pour différencier des données que je remplis systématiquement de 6 couleurs différentes: 12, 3, 43, 44, 14 et 6.

Merci pour votre aide et bon courage pour ceux d'entre vous qui reprennent.
 
Re,

Superbe exemple qui nous aide à comprendre ce que vous voulez faire...
Les deux colonnes les plus à gauche renseignées dans votre exemple sont les colonnes C et D.
Prenez ces deux colonnes.
Pour en faire quoi ? vous ne le dites pas 🙁
Pour mettre où ? vous ne dites pas 🙁
A tout hasard en E1 : =SI(($C1*$D1)>0;($C1-$D1)/$D1;"") à recopier vers le bas
 
Bonsoir zaza34, Patrick,

Voyez le fichier joint avec cette formule matricielle en S1 :
Code:
=SIERREUR(INDEX(A1:R1;PETITE.VALEUR(SI(ESTNUM(A1:R1);COLONNE(A1:R1));1))/INDEX(A1:R1;PETITE.VALEUR(SI(ESTNUM(A1:R1);COLONNE(A1:R1));2))-1;"")
Bonne nuit.
 

Pièces jointes

Dernière édition:
Bonjour job75,

Merci beaucoup pour votre aide.
Malheureusement, mes données sont sous forme de tableau et lorsque je veux valider la formule, j'ai une invite qui m'affiche: "Un tableau ne peut pas contenir de formules matricielles à plusieurs cellules."
J'aurais dû vous donner un exemple plus parlant qui faisait apparaître ce qui pour moi était un détail.
Auriez-vous une idée pour contourner ce problème ?

Cordialement,
 
Avec un tableau Excel structuré les formules matricielles vont très bien, voyez ce fichier (2).

Le problème vient du fait que vous avez essayé de valider en bloc une plage de plusieurs cellules.

Il faut valider par Ctrl+Maj+Entrée uniquement la cellule S2, la formule se recopie automatiquement vers le bas.
 

Pièces jointes

Bonjour,zzaz34, Gérard 🙂

Essayez en EP2:
VB:
=SIERREUR((INDEX(D2:DI2;PETITE.VALEUR(SI(ESTNUM(D2:DI2);COLONNE(A2:DF2));1))-INDEX(D2:DI2;PETITE.VALEUR(SI(ESTNUM(D2:DI2);COLONNE(A2:DF2));2)))/INDEX(D2:DI2;PETITE.VALEUR(SI(ESTNUM(D2:DI2);COLONNE(A2:DF2));2));"")

*COLONNE(A2: DF2) n'est pas une zone, mais un numéro d'ordre devant commencer par 1 (A2:A2), et contenir autant de membres qu'en contiennent les zones.
 
Tout à fait Patrick.

Puisque la formule détermine la position avec COLONNE() il faut utiliser INDEX(A2: DI2; en EP2.
Code:
=SIERREUR(INDEX(A2:DI2;PETITE.VALEUR(SI(ESTNUM(D2:DI2);COLONNE(D2:DI2));1))/INDEX(A2:DI2;PETITE.VALEUR(SI(ESTNUM(D2:DI2);COLONNE(D2:DI2));2))-1;"")
Fichier (3).
 

Pièces jointes

Maintenant si vous voulez du VBA vous pouvez utiliser cette fonction, à placer impérativement dans un module standard :
VB:
Function Evolution(r As Range)
If Application.Count(r) < 2 Then Evolution = "": Exit Function
Dim a(1), n As Byte
For Each r In r
    If IsNumeric(CStr(r)) Then a(n) = r: n = n + 1: If n = 2 Then Exit For
Next
Evolution = a(0) / a(1) - 1
End Function
Formule très simple en EP2 du fichier .xlsm joint :
Code:
=Evolution(D2:DI2)
 

Pièces jointes

Remarquable, mais là vous dépassez largement mon seuil de compétence et de compréhension 😉
Je vais m'en tenir à la version Excel qui me sera peut-être plus facile à transposer au cas où je modifierais les cellules concernées à l'avenir.
Merci encore
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
3
Affichages
626
Réponses
3
Affichages
485
Réponses
9
Affichages
646
Retour