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

Ou est mon erreur sur la varible DateDebut ??

  • Initiateur de la discussion Initiateur de la discussion GFABasic
  • 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 !

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)" 😡

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 ??? 😕
Merci de votre aide
 
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:
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
 
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
 
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
 
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:
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:
Re : Ou est mon erreur sur la varible DateDebut ??

Bonsoir le fil, Robert,

Robert ! Je sens poindre une pointe d'agacement dans ton message 😡.. 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:
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...
 
Re : Ou est mon erreur sur la varible DateDebut ??

Bonsoir le fil & le forum,

En fait je suis un peu perdu présentement. Je me suis appuyé sur le code du fichier joint (toutes les recherches sont en valeurs)
 

Pièces jointes

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:
Re : Ou est mon erreur sur la varible DateDebut ??

Bonjour le fil, bonjour le forum,

Dans ce cas, Bebere, tu parles de la Méthode InputBox et pas de la Fonction Inputbox...
 
Re : Ou est mon erreur sur la varible DateDebut ??

Bonjour Robert
oui inputbox,méthode
ayant consulté diverses sources et étant la plus employée, j'ai supposé qu'elle était mieux adaptée
 
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.
 
- 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
2
Affichages
474
Réponses
3
Affichages
544
Réponses
12
Affichages
866
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…