Récupération des 20 dernières colonnes non vides d'un tableau

Bonjour à tous,

je me permets d'appeler au secours après moultes recherches en solo.

Brièvement, je dois présenter un tableau de suivi pour plusieurs équipes. J'alimente automatiquement dans un onglet masqué le volume de tickets traités par jour, dans un tableau allant du 04/01/2021 à la fin de l'année.

Or dans le premier onglet je voudrais n'afficher que les 21 derniers jours

L'idée serait que dans le tableau dans l'onglet "complet" (voir fichier exemple) on recherche de droite à gauche, la première colonne non vide, et qu'on la renvoie vers la colonne W du fichier d'exemple

La deuxième colonne en partant de la droite serait affichée dans la colonne V et ainsi de suite.

Cela permettrait, tout en continuant à alimenter le fichier au quotidien de n'afficher dans le premier onglet que les 21 derniers jours, et donc d'alimenter les graphiques en restant sur la même plage de cellules.

J'ai tenté avec Index/Equiv et des fonctions matricielles, mais j'avoue ne pas être parvenu à faire ce que je voudrais.

17exemple.xlsx (11.83 Ko)

D'avance merci pour votre aide.

Bonjour BotisJenkins,

Dans Reporting C3 la formule, qui détermine la dernière date :

=EQUIV(MAX.SI($Complet.4:4;$Complet.4:4;"<="&AUJOURDHUI());$Complet.4:4;0)

dans Reporting de D3 à W6 la formule qui renvoie les valeurs qui vous intéressent :

=INDIRECT(ADRESSE(LIGNE()+1;($C$3*1)+COLONNE()-23;4;1;"Complet");1)

Veillez à choisir le format de cellule "Nombre" dans les lignes 4 à 6 et "Date" pour la ligne 3.

Pour la cellule C3 vous pouvez choisir une couleur de police identique à la couleur d'arrière plan pour ne pas voir cette valeur.

Bonjour et bienvnue sur le forum

Bonjour à tous

Une variante macro.

16exemple-v1.xlsm (23.38 Ko)

Bye !

Bonjour!
Alors tout d'abord merci d'avoir pris le temps de répondre!
J'ai testée la solution fournie par njhub; la formule ne passe pas, serait-ce dû à un problème de version? En tout cas j'ai essayé d'adapter la formule, Excel n'en veut pas :-(

gmb, ce sera l'occasion pour moi de découvrir les macros je n'y connais rien, mais en tout cas je viens de voir dans le fichier que vous avez renvoyé que cela fonctionne exactement comme attendu.

Ne me reste qu'à adapter au vrai fichier mais en tout cas un grand merci et un bon dimanche

Alors :-)

c'est un échec cuisant ahah.

J'ai essayé de comprendre comment était construite la macro et il faut croire que ce n'est pas une réussite.

Il faut dire que le fichier exemple était "bidon" et simplifié à l'extrême.

Sur le vrai fichier, j'ai plus d'onglets (cela porte t'il à conséquence)?

Et surtout plus de lignes dans le tableau que je souhaite récupérer. (Je joins un nouvel exemple avec les tableaux aux bonnes dimensions et aux bonnes coordonnées)

J'ai rajouté les deux onglets que j'ai laissés vides mais pour être le plus "réaliste possible"

Question subsidiaire, la présence de cellules fusionnées (pas dans les tableaux concernés mais à d'autres endroits porte t'elle à conséquence?)

Ci dessous ce que donne ma tentative d'adaptation par rapport à ce que je croyais avoir compris de votre macro.

Option Explicit

Dim fr As Worksheet, fc As Worksheet
Dim derLn&, derCol&, i&

Private Sub Worksheet_Activate()

Set fc = Sheets("Settings")
Set fr = Sheets("Reporting")

derLn = fc.Range("J" & Rows.Count).End(xlUp).Row
derCol = 3
For i = 5 To derLn
derCol = Application.Max(derCol, fc.Cells(i, Columns.Count).End(xlToLeft).Column)
Next i
fc.Range(fc.Cells(10, derCol - 20), fc.Cells(derLn, derCol)).Copy fr.Range("D61")
End Sub

8exemple-v2.xlsm (29.45 Ko)

Bonjour à tous,

Je crois que njhub est surtout sur Calc ? Sur excel, il faut remplacer les "." par des "!" donc c'est juste une question de syntaxe :

=EQUIV(MAX.SI(Complet!4:4;Complet!4:4;"<="&AUJOURDHUI());Complet!4:4;0)

adaptée au cas sans la fonction MAX.SI :

=EQUIV(MAX(SI(Complet!4:4<=AUJOURDHUI();Complet!4:4));Complet!4:4;0)

en matriciel.

Cdlt,

Nouvel essai

9exemple-v2.xlsm (37.15 Ko)

Bye !

Hello 3GB merci à vous pour le retour.
En effet la première formule passe avec votre version matricielle (j'avais en effet déjà essayé de rajouter le ! pour la formule faisant appel à un autre onglet)
C'est la seconde partie de la formule que je ne parviens pas à adapter

J'ai =INDIRECT(ADRESSE(LIGNE()+1($C$61*1)+COLONNE()-23;4;1Complet!);1)
Et Excel me dit qu'il rencontre une erreur dans cette formule :-(

Rebonjour GMB,

en effet cela fonctionne!!!
Seul problème, sous ce tableau qui doit être retporté, j'avais d'autres tableaux, or avec cette macro il prend "toute la feuille jusqu'à la fin et écrase ce qu'il y avait.

j'ai trouvé une solution détournée en rajoutant un second onglet mais je suppose qu'il existe un moyen de limiter le nombre de lignes que la macro prend en compte?

C'est bien ici?

derLn = fc.Range("J" & Rows.Count).End(xlUp).Row 'dernière ligne du tableau de la feuille "Setting"

Quoi qu'il en soit merci à tous du temps consacré, je vais maintenant essayer de comprendre comme cela fonctionne :-)

Nouvelle version.

9exemple-v3.xlsm (37.36 Ko)

Bye !

C'est parfait cela fonctionne.

Merci énormément aux contributeurs

Re,

Tant mieux si votre problème est résolu !

La seconde formule de njhub me semble tout à fait utilisable sur excel et est correcte à condition de la saisir au bon endroit (probablement à l'endroit réservé à accueillir la formule sur votre fichier de départ, que d'ailleurs je n'ai pas ouvert). Voici un essai d'adaptation :

=INDIRECT("Complet!"&ADRESSE(LIGNE()+1;($C$3*1)+COLONNE()-23))

sachant qu'il faut que C3*1 + COLONNE() - 23 soit supérieur à 0 avec COLONNE() qui renvoie un nombre représentant le numéro de la colonne où est saisie cette formule.

Cdlt,

Rechercher des sujets similaires à "recuperation dernieres colonnes vides tableau"