Proposer une valeur approchante après une recherche infructueuse
Fedaykin7
Messages postés
4
Date d'inscription
Statut
Membre
Dernière intervention
-
Fedaykin7 Messages postés 4 Date d'inscription Statut Membre Dernière intervention -
Fedaykin7 Messages postés 4 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Je souhaite réaliser des statistiques sur un tableau excel
Pour cela j'ai créé une macro dans laquelle je propose à l'utilisateur une plage de dates (je fournis à l'utilisateur la date de début et de fin de la plage mais pas les intermédiaires) à partir de laquelle commencer les stats
L'utilisateur saisit la date de début désirée et la macro vérifie si la date appartient à la plage. Si elle n'appartient pas à la plage, la macro calcule des valeurs inférieures et supérieures à la date demandée, teste si ces valeurs font partie de la plage et les propose comme nouvelle saisie à l'utilisateur.
Mon problème est le suivant :
Une des dates supérieures ou inférieures proposées par la macro n'est pas la date immédiatement inférieure/supérieure mais pas les 2.
ex
en A1 j'ai 8/12/11
en A2 j'ai 9/12/11
en A3 j'ai 12/12/11
en A4 j'ai 13/12/11
Si l'utilisateur choisit le 10/12/11 (absent du tableau), la macro lui proposera de choisir soit le 8/12/11 soit le 12/12/11 alors que je voudrais que la macro propose le 9/12/11
Si au contraire l'utilisateur choisit le 11/12/11 (absent du tableau également), la macro lui proposera de choisir soit le 9/12/11 soit le 13/12/11 alors que je voudrais que la macro propose le 12/12/11
Mon code :
Je ne comprends pas où est l'erreur dans mon code
Merci de votre aide
Je souhaite réaliser des statistiques sur un tableau excel
Pour cela j'ai créé une macro dans laquelle je propose à l'utilisateur une plage de dates (je fournis à l'utilisateur la date de début et de fin de la plage mais pas les intermédiaires) à partir de laquelle commencer les stats
L'utilisateur saisit la date de début désirée et la macro vérifie si la date appartient à la plage. Si elle n'appartient pas à la plage, la macro calcule des valeurs inférieures et supérieures à la date demandée, teste si ces valeurs font partie de la plage et les propose comme nouvelle saisie à l'utilisateur.
Mon problème est le suivant :
Une des dates supérieures ou inférieures proposées par la macro n'est pas la date immédiatement inférieure/supérieure mais pas les 2.
ex
en A1 j'ai 8/12/11
en A2 j'ai 9/12/11
en A3 j'ai 12/12/11
en A4 j'ai 13/12/11
Si l'utilisateur choisit le 10/12/11 (absent du tableau), la macro lui proposera de choisir soit le 8/12/11 soit le 12/12/11 alors que je voudrais que la macro propose le 9/12/11
Si au contraire l'utilisateur choisit le 11/12/11 (absent du tableau également), la macro lui proposera de choisir soit le 9/12/11 soit le 13/12/11 alors que je voudrais que la macro propose le 12/12/11
Mon code :
DateDebut = InputBox("Quelle date de début de calcul des statistiques désirez-vous?")
For Each e In [A1:A4]
If e Like DateDebut Then
e.Select
Excel.Run ("Autre Macro")
Else
ValSup = DateDebut + 1
ValInf = DateDebut - 1
End If
If Not e Like ValSup Then
ValSup = ValSup + 1
End If
If Not e Like ValInf Then
ValInf = ValInf - 1
End If
Next
TexteAfficher2 = "Veuillez choisir une autre date de début" & vbCr & "Les dates les plus proches de la date désirées sont " & ValInf & "et " & ValSup & "."
DateDebut = InputBox(TexteAfficher2)
Je ne comprends pas où est l'erreur dans mon code
Merci de votre aide
6 réponses
-
Bonsoir Fedaykin7,
Ne serait-il pas plus judicieux de ne faire choisir par l'utilisateur qu'une date existante ?
Plus simple et sans surprise. -
Merci de votre réponse
Le problème étant qu'actuellement ma plage fait déjà plus de 500 lignes
De plus j'aimerai que les utilisateurs n'aient pas accès à la plage de données mais juste aux statistiques qu'ils désirent analyser -
Bonsoir Fedaykin7,
Scénario:
- Les données (dates et autres) se trouve sur l'onglet "FeuilleCachee" qui est .. cachée,
- L'utilisateur ouvre le fichier Excel, sur l'onglet "Feuil2",
- A l'activation de cette feuille, un formulaire s'ouvre,
- Sur ce formulaire se trouve une ListBox qui reprend toutes les dates se trouvant sur la feuille cachée.
- L'utilisateur choisi la date, clique sur le bouton "ok" et la suite comme vous l'entendez.
Ceci en VBA (Visual Basic pour Application).
Qu'en pensez-vous? -
Bonjour
Cette solution me parait moins ergonomique mais surtout j'aimerais comprendre ce qui cloche dans mon code sinon je ne progresserai pas :)
Merci pour le temps que vous prenez à me répondre
Cordialement -
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
Bonjour Fedaykin7,
Comme je n'ai pas le fichier ..
Les dates dans le fichier, sont-elles considérées comme Date ou comme String ?
Car dans ce code : DateDebut = InputBox("Quelle date de début de calcul des statistiques désirez-vous?") , la valeur retournée par Input est de type String ! -
Les dates sont considérées en Date
Finalement j'ai trouvé comment faire, c'est un peu tarabiscoté mais ça fonctionne :
D'abord je crée 2 mini macro qui vont tester chacune la présence de la valeur inférieure et supérieure dans la plage de donnéesSub ValeurInferieure() CptLigne = 4 SJour = Worksheets("Annuel").Cells(CptLigne, 1).Value Do Until CptLigne = CptLignePleine 'ValInf2 est définie comme égale à 0 dans la macro principale, elle change de valeur si la valeur inférieure de la fourchette existe dans la plage de données If ValInf = SJour Then ValInf2 = ValInf CptLigne = CptLigne + 1 SJour = Worksheets("Annuel").Cells(CptLigne, 1).Value Loop End SubSub ValeurSuperieure() CptLigne = 4 SJour = Worksheets("Annuel").Cells(CptLigne, 1).Value Do Until CptLigne = CptLignePleine 'ValSup2 est définie comme égale à 0 dans la macro principale, elle change de valeur si la valeur supérieure de la fourchette existe dans la plage de données If ValSup = SJour Then ValSup2 = ValSup CptLigne = CptLigne + 1 SJour = Worksheets("Annuel").Cells(CptLigne, 1).Value Loop End Sub
Ensuite la macro complète qui va tester la présence de la date désirée dans la plage de données. Si la date désirée est présente, la macro continue son exécution normale, si elle est absente j'aurai tout ce qu'il faut en variables pour lancer mes deux minimacro pour qu'elle trouve une fourchette de dates qui existent dans la plage de données
La macro principale :
Sub Debut() ValInf2 = 0 ValSup2 = 0 'trouve la première ligne vide CptLigne = 4 SJour = Worksheets("Annuel").Cells(CptLigne, 1).Value Do Until SJour = "" CptLigne = CptLigne + 1 SJour = Worksheets("Annuel").Cells(CptLigne, 1).Value Loop CptligneVide = CptLigne CptLignePleine = CptLigne - 1 'CptLignePleine est donc la dernière ligne pleine Adresse = "A" & CptLignePleine Set Plage = Range("A4:" & Adresse) 'Enoncé de la fourchette de dates disponibles et récupération de la date de début de calcul des stats TexteAfficher1 = "Les stats peuvent être calculées à partir du 05/12/2011 jusqu'au " & Worksheets("Annuel").Cells(CptLignePleine, 1).Value & "." & vbCr & "Quelle date de début de calcul des statistiques désirez-vous?" DateDebut = InputBox(TexteAfficher1) 'teste si la valeur de DateDebut dans la plage des dates For Each e In [Plage] If e Like DateDebut Then e.Select 'si oui ça lance la macro qui demande la date de fin de calcul des stats Excel.Run ("Fin") 'si non délimite une fourchette de date encadrant la date désirée Else ValSup = DateDebut + 1 ValInf = DateDebut - 1 End If Next 'teste si la fourchette inférieure existe dans la plage de données Excel.Run ("ValeurInferieure") 'si elle existe pas on élargit la fourchette et on reteste sa présence dans la plage de données (et ce 5 fois car jamais 5 jours d'affilé sans stats) If ValInf2 = 0 Then ValInf = ValInf - 1 Excel.Run ("ValeurInferieure") If ValInf2 = 0 Then ValInf = ValInf - 1 Excel.Run ("ValeurInferieure") If ValInf2 = 0 Then ValInf = ValInf - 1 Excel.Run ("ValeurInferieure") If ValInf2 = 0 Then ValInf = ValInf - 1 Excel.Run ("ValeurInferieure") 'teste si la fourchette inférieure existe dans la plage de données Excel.Run ("ValeurSuperieure") 'si elle existe pas on élargit la fourchette et on reteste sa présence dans la plage de données (et ce 5 fois car jamais 5 jours d'affilé sans stats) If ValSup2 = 0 Then ValSup = ValSup + 1 Excel.Run ("ValeurSuperieure") If ValSup2 = 0 Then ValSup = ValSup + 1 Excel.Run ("ValeurSuperieure") If ValSup2 = 0 Then ValSup = ValSup + 1 Excel.Run ("ValeurSuperieure") If ValSup2 = 0 Then ValSup = ValSup + 1 Excel.Run ("ValeurSuperieure") TexteAfficher2 = "Veuillez choisir une autre date de début" & vbCr & "Les dates les plus proches de la date désirées sont " & ValInf2 & "et " & ValSup2 & "." DateDebut = InputBox(TexteAfficher2) End Sub
Après il reste plein de petites choses à régler, mais ça, ça marche
Merci