Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

afficher une ligne donnée

RichardS

XLDnaute Junior
Bonjour,

J'ai besoin de votre aide car je vois le bout du tunnel mais je n'arrive plus à avancer, c'est rageant.

Dans un classeur, une feuille contenant en première colonne, une série de dates. Je souhaite afficher en première ligne la 5ième ligne contenant la date du jour. Par exemple si nous sommes le 12 septembre, cela donne :
8/09/18
9/09/18
10/09/18
11/09/18
12/09/18
13/09/18
etc.
Ma solution est la suivante à positionner dans Thisworkbook :
Private Sub Workbook_Open()
ActiveWindow.ScrollRow = Application.Match(Cells(1, 11), Columns(1), 0)
End Sub

Mon problème est double :
1) la date du jour est positionné dans la cellule 1,11 de la feuille. J'aurais apprécié une solution plus élégante mais je me heurte à une incompatibilité de type si je remplace cells((1,11) par Date dans la formule.
2) je souhaite que la date du jour soit la 5ième de la feuille et non la première.

Si vous pouviez me sortir de l'impasse ce serait top.
Merci d'avance.
RichardS
 

Citronflexe

XLDnaute Junior
Bonjour,

Je n'ai pas bien compris le problème, ci-joint un fichier qui place à l'ouverture la date d'aujourd'hui en 5è ligne et les dates précédentes et suivantes en fonction, puis qui scroll jusqu'à la 5e ligne pour l'afficher en haut du classeur...

Est-ce que c'est ce dont vous aviez besoin?
 

Pièces jointes

  • Classeur1.xlsm
    15.8 KB · Affichages: 20

Jacky67

XLDnaute Barbatruc
Bonjour,
Essaye ceci
VB:
Private Sub Workbook_Open()
Dim Lig&
With Feuil1 'Code name de la feuille
  If IsNumeric(Application.Match(Date * 1, .[a:a], 0)) Then
    Lig = Application.Match(Date * 1, [a:a], 0)
    If Lig > 5 Then Lig = Lig - 4 Else Lig = 1
    Application.Goto .Range("a" & Lig), True
  End If
End With
End Sub
 
Dernière édition:

RichardS

XLDnaute Junior
ça marche. c'est super, merci, mais je ne comprend pas !
Le lig>5 OK autant pour moi, j'aurais dû le prévoir !
Mais Date*1 le rend il numérique ? il n'y a plus d'incompatibilité, pourquoi ?
le fait de poser la question isnumeric n'est plus indispensable si je comprend bien, ce n'est qu'une précaution.

S'il te plait explique moi, je suis un peu perdu.
En tout cas, déjà merci pour la solution ça fonctionne.
 

RichardS

XLDnaute Junior
Non, en fait en colonne 1 j'ai une liste de date disons du 1ier janvier 2018 au 31 décembre 2018.
Je voulais grace à la fonction match avec pour "valeur cherchée" aujourdhui() trouver le n° de ligne de la date d'aujourd'hui.
Mon soucis c'est qu'il y avait dans ma formulation une incompatibilité de type.
ActiveWindow.ScrollRow = Application.Match(Date, Columns(1), 0)
j'ai résolu le problème en mettant =aujourdhui() dans la cellule 1,11 et avec la formulation suivante cela fonctionne mais c'est dangereux et peu élégant.
ActiveWindow.ScrollRow = Application.Match(Cells(1, 11), Columns(1), 0)

Jacky67 me donne la formulation suivante :
With Feuil1 'Code name de la feuille
If IsNumeric(Application.Match(Date * 1, [a:a], 0)) Then
Lig = Application.Match(Date * 1, [a:a], 0)
If Lig > 5 Then Lig = Lig - 4 Else Lig = 1
Application.Goto .Range("a" & Lig), True
End If
End
With

ça fonctionne mais je ne comprend pas pourquoi il n'y a plus d'incompatibilité de type ? est ce le fait de multiplier Date par 1 ?
 

Jacky67

XLDnaute Barbatruc
Re…
Dans le cas concerné
If IsNumeric(Application.Match(Date * 1, .[a:a], 0)) Then
Contrôle si la date du jour est présente dans la colonne 1
Sinon on ne fait rien…
L'équivalent sur une feuille serait
=ESTNUM(EQUIV(AUJOURDHUI();A:A;0))
Pour Date*1
Tester ceci pour comprendre
VB:
Sub testDate()
MsgBox IsNumeric(Date)
MsgBox IsNumeric(Date * 1)
MsgBox IsNumeric(CLng(Date))
End Sub

*Oupssss!
Il manque un point devant [a:a]
[a:a]==>>.[a:a]
 
Dernière édition:

RichardS

XLDnaute Junior
Bonjour et merci à vous deux,
Réponse rapide et épine sortie du pied. En définitive, je vais écrire la solution suivante qui fonctionne :

Private Sub Workbook_Open()
L = Application.Match(Date * 1, Columns(1), 0)
If L > 4 Then L = L - 4 Else L = 1
ActiveWindow.ScrollRow = L
End Sub

Même si je ne comprend toujours pas pourquoi il faut multiplier Date par 1 ?

Encore merci et à bientôt.
RichardS
 

Jacky67

XLDnaute Barbatruc
Re…
Fonctionne oui,.....sauf si la date du jour est absente de la colonne 1
Si dans une cellule une date est numérique, ce n'est pas le cas de l'instruction "date" en vba qui est de type "Variant"
Une petit coup de F1 sur "Date" donne plus d'information
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…