Ou est mon erreur sur la varible DateDebut ??

GFABasic

XLDnaute Nouveau
Bonjours,
J'ai une varible "DateDebut" que je rentre par une Inputbox sur la quelle je fait des calcul et évoluée par une boucle.
jusqu’à la pas de problème mais quand je fait une recherche avec la il y a problème exemple:

Dim Message, Title, Default, DateDebut
Message = "Entrez la date du début de mise à jour a faire"
Title = "Mise à Jour date de début"
Default = "17/05/12"
DateDebut = InputBox(Message, Title, Default)

...etc....puis je dois faire

Selection.Find(What:=DateDebut, After:=ActiveCell, LookIn:=xlValues, _
LookAt:=xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False).Activate

et là erreur "Variable objet ou variable bloc With non définie (erreur 91)" :mad:

Alors que si ma recherche est sur la date du jour exemple avec:

Selection.Find(What:=Date, After:=ActiveCell, LookIn:=xlValues, _
LookAt:=xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False).Activate

Alors là pas de problème :)

Comment je doit déclarer ma variable DateDebut ou où est mon erreur ??? :confused:
Merci de votre aide
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Re : Ou est mon erreur sur la varible DateDebut ??

Bonsoir GFABasic ,

Il y a une grande chance que DateDebut soit de type string et non de type date. Ceci explique d'ailleurs que l'utilisation de What:=Date fonctionne car la fonction "Date"retourne bien sûr une date et non une chaine de caractères.

Essayer avec cette ce code?:
Code:
What:=CDate(DateDebut)

ou bien déclarer votre variable comme: Dim DateDebut as Date
 
Dernière édition:

Bebere

XLDnaute Barbatruc
Re : Ou est mon erreur sur la varible DateDebut ??

Gtabasic
2 codes de JB
tu adaptes [L:L] et/ou [N:N]
Le format de la date cherchée est le même que le format des dates du champ de recherche

Sub RechercheDateFind()
d = InputBox("Date? jj/mm/aa")
If d <> "" Then
On Error Resume Next
[L:L].Find(What:=CDate(d), LookIn:=xlValues).Select
If Err <> 0 Then MsgBox "Inconnu"
End If
End Sub

On adapte le format de la date recherchée au format des dates du champ de recherche

Sub RechercheDateFind2()
d = InputBox("Date? jj/mm/aa")
If d <> "" Then
On Error Resume Next
[N:N].Find(What:=Format(CDate(d), "dddd d mmmm yyyy"), LookIn:=xlValues).Select
If Err <> 0 Then MsgBox "Inconnu"
End If
End Sub
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : Ou est mon erreur sur la varible DateDebut ??

Bonsoir le fil, bonsoir le forum,

Je ne pense pas que le problème vienne du type de variable mais plutôt du fait qu'il n'y a pas toujours une occurrence trouvée.Dans ce cas la sélection (Activate) plante. Dans le code ci-desous j'ai déclarée la variable DateDebut comme Variant, Date ou String et je n'avais pas de message d'erreur. Toutefois venant d'une InputBox je pense que la déclaration en tant que String est la plus appropriée.
Essaie comme ça :
Code:
Dim Message As String, Title As String, Default As String, DateDebut As String
Dim r As Range

Message = "Entrez la date du début de mise à jour a faire"
Title = "Mise à Jour date de début"
Default = "17/05/12"
DateDebut = InputBox(Message, Title, Default)
'...etc....puis je dois faire
Set r = Selection.Find(What:=DateDebut, After:=ActiveCell, LookIn:=xlValues, LookAt:=xlWhole)
If Not r Is Nothing Then r.Select
 

GFABasic

XLDnaute Nouveau
Re : Ou est mon erreur sur la varible DateDebut ??

Oui c'est bien ça mais je comprend pas comment elle est du type String.
Car dans la partie calcule (etc de mon exemple) j'ai DateDebut = DateDebut + 1 et là Date de début évolue bien d'un jour et non pas String+1
Donc elle doit repasser en String plus loin.
En tout cas merci. mais mon code doit vraiment pas être dans les norme.
Merci
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Re : Ou est mon erreur sur la varible DateDebut ??

(re) Bonsoir,

InputBox (dixit la touche F1) retourne une valeur de type string. Si DateDebut n'est pas typée au départ, elle sera considérée comme du texte après le input.

Mais si une variable est typée de type date et qu'on lui affecte le contenu d'une variable string, VBA essaira de la convertir en date.

Code:
Sub test()
Dim S As String, N As Long, D As Date
   D = "01/05/2011"
   D = "jj/mm/aaaa"
End Sub

D = "01/05/2011" ne provoque pas d'erreur
D = "jj/mm/aaaa" provoque une erreur (tout comme D = "99/05/2011")
 
Dernière édition:

Robert

XLDnaute Barbatruc
Repose en paix
Re : Ou est mon erreur sur la varible DateDebut ??

Bonsoir le fil, bonsoir le forum,

Je me répète mais la ligne de code :
Code:
Selection.Find(What:=DateDebut, After:=ActiveCell, LookIn:=xlValues, _
LookAt:=xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False).Activate
Renverra toujours le message d'erreur : "Variable objet ou variable bloc With non définie (erreur 91)" , à cause du Activate, si la date éditée dans l'inputbox n'existe pas. Et cela quelle que soit le type de variable utilisée...
 
Dernière édition:

mapomme

XLDnaute Barbatruc
Supporter XLD
Re : Ou est mon erreur sur la varible DateDebut ??

Bonsoir le fil, Robert,

Robert ! Je sens poindre une pointe d'agacement dans ton message :mad:.. Je n'ai jamais dit le contraire.

Je cherchais juste à répondre à GFABasic qui s'étonnait qu'une date issue de Input ne pouvait pas être trouvée alors qu'une date issue de la fonction Date pouvait être trouvée.

Mais, il me semble (et je peux me tromper), que si DateDebut est de type string (issue du inputbox) et contient "17/05/2012" alors même si cette date figure dans la sélection, l'instruction selection.find...select échouera. Si DateDebut est de type date, alors la recherche aboutira.

La suite donnée en fonction de la présence ou non dans la sélection relève de ce que veut faire le programmeur.
 
Dernière édition:

Robert

XLDnaute Barbatruc
Repose en paix
Re : Ou est mon erreur sur la varible DateDebut ??

Bonsoir le fil, bonsoir le forum,

En fait ça serait plutôt le contraire. Après test il s'avère que si DateDebut est déclarée comme String et si elle se trouve dans la selection alors le code ci-dessous va la détecter et la sélectionner :
Code:
Dim Message As String, Title As String, Default As String, DateDebut As String
Dim r As RangeMessage = "Entrez la date du début de mise à jour a faire"
Title = "Mise à Jour date de début"
Default = "17/05/12"
DateDebut = InputBox(Message, Title, Default)
'...etc....puis je dois faire
Set r = Selection.Find(What:=DateDebut, After:=ActiveCell, LookIn:=xlValues, LookAt:=xlWhole)
If Not r Is Nothing Then r.Select
Mais si DateDebut est déclarée comme Date et si elle se trouve dans la selection alors le code ci-dessous va la détecter et la sélectionner :
Code:
Dim Message As String, Title As String, Default As String, a As String, DateDebut As Date
Dim r As Range
Message = "Entrez la date du début de mise à jour a faire"
Title = "Mise à Jour date de début"
Default = "17/05/12"
a = InputBox(Message, Title, Default)
DateDebut = CDate(a)
'...etc....puis je dois faire
Set r = Selection.Find(What:=DateDebut, After:=ActiveCell, LookIn:=xlFormulas, LookAt:=xlWhole)
If Not r Is Nothing Then r.Select
La difference est dans le LookIn qui est xlValues pour la String et xlFormulas pour la Date. Mais les deux fonctionnent.
Et pour finir je dirais que je suis pas agacé du tout mais je voulais juste tirer les choses au clerc comme disait France Gall...
 

Bebere

XLDnaute Barbatruc
Re : Ou est mon erreur sur la varible DateDebut ??

bonjour Gfabasic,Robert,MaPomme
je pense qu'il est important de bien déclaré les variables
pour inputbox c'est le type qui défini ce qu'elle renvoye
ce fil est aussi intéressant
https://www.excel-downloads.com/threads/rechercher-une-date-precise-dans-une-liste.184566/
Code:
Sub FindDate()
Dim strdate As String
Dim rCell As Range
Dim lReply As Long

    strdate = Application.InputBox(Prompt:="Enter a Date to Locate on This Worksheet", _
                Title:="DATE FIND", Default:=Format(Date, "Short Date"), Type:=1)

    'Cancelled
    If strdate = "False" Then Exit Sub

    strdate = Format(strdate, "Short Date")

    On Error Resume Next
        Set rCell = Cells.Find(What:=CDate(strdate), After:=Range("A1"), LookIn:=xlFormulas _
            , LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False)
    On Error GoTo 0

    If rCell Is Nothing Then
        lReply = MsgBox("Date cannot be found. Try Again", vbYesNo)
        If lReply = vbYes Then Run "FindDate":
    End If
End Sub
 
Dernière édition:

GFABasic

XLDnaute Nouveau
Re : Ou est mon erreur sur la varible DateDebut ??

Merci Robert et Bebere
Oui c’était bien un problème de déclaration.
J’ai donc déclaré ma variable DateDebut en « As Date » et tout va bien.
Mais j’ai quand même fait une variable DD$ provisoire pour le InputBox pour avoir mon propre contrôle sur la saisie. Car dans la conversion automatique de InputBox en date si l’on fait une erreur sur le mois ex : 05/13/2012 cela donne 13/05/2012.donc j’ai fait mon propre contrôle puis fait DateDebut = DD$ et c’est tout bien.
Bref Merci a tous.
 

Discussions similaires

Réponses
12
Affichages
541
Réponses
2
Affichages
727

Statistiques des forums

Discussions
311 725
Messages
2 081 941
Membres
101 847
dernier inscrit
Djigbenou