Fonction Find et Date
Bonjour, je souhaiterais définir un range variable qui sera par la suite copié/collé, et variant selon la date du jour. Voilà ce que j'ai écrit pour le moment:
Private Sub JoursGlissants()
Dim Today As Date
Dim Cible As Range
Dim Plage As Range
Today = Date
Set Cible = Sheets("Detail").Cells.Find(What:=Today, LookAt:=xlWhole)
MsgBox Cible.Value
End Sub
Je n'arrive même pas à afficher la valeur de ma variable Cible. De plus la date d'aujourd'hui n'existe même pas dans ma feuille et pour l'instant l'erreur n'apparait qu'au niveau du MsgBox.
Pour le reste du code, j'aimerais utiliser les fonctions column pour extraire la colonne de ma cible et ensuite rows.count.end pour atteindre la dernière ligne de mon tableau. Seule le deuxième membre de mon Range devra varier, la première cellule en haut à gauche sera fixée.
Merci d'avance pour votre aide.
Yvan
Bonsoir,
ben find renvoi nothing si la date n'existe pas ... il faut tester cela et agir en conséquence pour le cas où la date n'existe pas :
(...)
Set Cible = Sheets("Detail").Cells.Find(What:=Today, LookAt:=xlWhole)
If Not Cible Is Nothing Then
MsgBox Cible.Value
Else
MsgBox "date : " & Date & " introuvable"
End If
(..)Bonsoir,
xlWhole ne présente d'intérêt que dans le cas de chaînes.
lookin:= xlValues est un peu plus adéquat pour chercher une date.
Normal que l'erreur n'apparaisse qu'au niveau MsgBox, Find ne déclenchant pas d'erreur, tester est quasi toujours indispensable, comme l'a dit Pierre.jy.
j'aimerais utiliser les fonctions column
Column est une Propriété, pas une Fonction. Savoir qui est quoi évite beaucoup d'erreurs.
Et pour ce qui suit, apprendre un peu de syntaxe n'est pas un luxe.
Et l'indentation, connais pas non plus !
Bon courage tout de même, t'es pas au bout...
Bonjour, merci pour vos réponses. En testant la fonction find avec la date d'aujourd'hui présente dans la feuille, elle fonctionnait correctement. Voilà le code que j'ai réussi à écrire et qui fonctionne pour le moment:
Private Sub Workbook_Open()
Dim Today As Date
Dim Cible As Range
Dim OffSet As Integer
Dim Plage As Range
Dim DernLigne As Long
'Désactive le rafraichissement de l'écran
Application.ScreenUpdating = False
'Active la Feuille Détail
Sheets("Détail").Activate
'Défini la date du Jour
Today = Date
'Trouve la cellule contenant la date du jour
Set Cible = Sheets("Détail").Cells.Find(What:=Today, LookAt:=xlValue)
'Défini la dernière ligne non vide de la colonne "E"
DernLigne = Range("E" & Rows.Count).End(xlUp).Row
'Décale cette colonne du chiffre indiquée
OffSet = Cible.Column - 3
'Défini la plage de données variable en fonction de la cellule cible
Set Plage = Range(Cells(4, 5), Cells(DernLigne, OffSet))
'Copie la plage de données et colle uniquement les valeurs
Plage.Copy
Plage.PasteSpecial xlPasteValues
'Active la cellule A1 et déselectionne la plage de données
Range("A1").Select
Application.CutCopyMode = False
'Active la Feuille "Registre du Personnel" et réactive le rafraichissement de l'écran
Sheets("Registre du Personnel").Activate
Application.ScreenUpdating = True
End SubBonne journée.