problème de recherche de date avec méthode find

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

dmoluc

XLDnaute Occasionnel
Bonjour à tous,
Depuis une grosse semaine je bute sur un problème qui semble simple : j'ai un UserForm avec un DTPicker qui me permet de choisr une date de début ensuite j'ai un bouton qui permet de rechercher la date de début dans un calendrier afficher sur la ligne 5 et à partir de là selectionner et colorer les cellule qui corresponde à la durée récupérée en colonne E
Voici le code avec explication :
Code :Sélectionner tout - Visualiser dans une fenêtre à part
Code:
Private Sub CommandButton1_Click()
 
ActiveSheet.Unprotect
 
Dim W As String
Dim Début As Date
Dim J As Double
Dim F As Date
Dim Compteur As Double
Dim x As Range
Dim Ligne
Dim colonne
'la durée de la tâche est X 2 car je travail en demi journée
J = (Durée.Value * 2)
'la date de début du programme qui est imputée par la feuil1
Début = DTPicker1.Value
 
If Range("D7") = "" And Range("D6") <> "" Then
'Je recherche la date de début dans la ligne 5 ou j'ai un calendrier jour par jour, au début ça coincé parceque les colonnes étaient fusionnées par paires, maintenant ça fonctionne pour la première ligne
Set x = Range("E5:AL5").Find(What:=Début, SearchOrder:=xlByColumns)
Je récupère l'adresse de la cellule qui contient la date de début
Ligne = x.Row
colonne = x.Column
'Je me positionne dessus et j'inscrit 1 dans la cellule du dessous ; c'est grace à ça que je vais pouvoir sélectionner ma durée
ActiveSheet.Cells(Ligne, colonne).Offset(1, 0) = 1
Je fais une boucle et j'inscrit 1 dans toutes les cellules qui correspondent à ma première tâche
Compteur = 1
While Compteur < J
Compteur = Compteur + 1
'F = la date, ce qui va m'éviter de travailler les weekend
F = Range("ZZ6").End(xlToLeft).Offset(-1, 0)
Range("ZZ6").End(xlToLeft).Offset(0, 1) = 1
Je transforme la date en nom de jour (lundi, mardi etc...)
W = WeekdayName(Weekday(F))
If W = "samedi" Then
Lorsque je trouve samedi je sélectionne toute mes cellules ou il y a des 1 et je les colores avec ma palette de couleur(showcolor)
Range("zz6").End(xlToLeft).Select
Range(ActiveCell, ActiveCell.End(xlToLeft)).Select
Selection.Interior.Color = ShowColor
La boite de dialogue permet d'arrêter la boucle tant que je n'ai pas colorer la première partie de la tâche
MsgBox "La tâche n'est pas achevée !", vbOKOnly
'une fois terminer je continu ma sélection
Range("ZZ6").End(xlToLeft).Offset(0, 5) = 1
End If
Wend
'je selectionne et color la deuxième partie de la tâche
Range("zz6").End(xlToLeft).Select
Range(ActiveCell, ActiveCell.End(xlToLeft)).Select
Selection.Interior.Color = ShowColor
'par précausion je rénissialise W
W = 0
'j'essais de donner la date de dépard au  DTPicker mais c'est pas au point 
DTPicker1.Value = (DTPicker1.Value + (Durée.Value / 2) + 1)
End If
Bon jusque là le code fonctionne presque tout le temps mais lorsque je passe à la ligne 2 qui utilise exactement la même macro (seul les valeur de recherche des ligne changent) le code bloque 1 fois sur 2 à cette ligne :
Code :Sélectionner tout - Visualiser dans une fenêtre à part
Ligne = x.Row
varible non définie

parfois j'arrive jusqu'à la ligne 3 de mon planing mais à partir de la 4 plus rien ne fonctionne pourtant le code est toujours identique et je l'est recopier une bonne trentaine de fois pour avoir une trentaine de tâche
on doit pouvoir faire plus simple mais vu mes connaissances , c'est tout ce que j'ai trouver
Voilà le quatrième paragraphe :
Code :Sélectionner tout - Visualiser dans une fenêtre à part
Code:
If Range("D10") = "" And Range("D9") <> "" Then
Set x = Range("E5:AL5").Find(What:=Début, SearchOrder:=xlByColumns)
Ligne = x.Row
colonne = x.Column
ActiveSheet.Cells(Ligne, colonne).Offset(4, 0) = 1
Compteur = 1
While Compteur < J
Compteur = Compteur + 1
F = Range("ZZ9").End(xlToLeft).Offset(-4, 0)
Range("ZZ9").End(xlToLeft).Offset(0, 1) = 1
W = WeekdayName(Weekday(F))
If W = "samedi" Then
Range("zz9").End(xlToLeft).Select
Range(ActiveCell, ActiveCell.End(xlToLeft)).Select
Selection.Interior.Color = ShowColor
MsgBox "La tâche n'est pas achevée !", vbOKOnly
Range("ZZ9").End(xlToLeft).Offset(0, 5) = 1
End If
Wend
Range("zz9").End(xlToLeft).Select
Range(ActiveCell, ActiveCell.End(xlToLeft)).Select
Selection.Interior.Color = ShowColor
W = 0
DTPicker1.Value = (DTPicker1.Value + (Durée.Value / 2) + 1)
End If
je joint aussi le fichier qui sera peu être plus parlant
enfin merci d’avance car je suis vraiment coincé
J'allais oublier, mon but n'est pas d'obtenir un planning fonctionnel sous une autre forme, je fais surtout ce programme pour apprendre le VBA en espérant que j'arrive à faire quelque chose de sympa
j'ai déjà soumis mon problème sur différent forum et personne n'a su répondre ! un coup ma variable x est bien incrémentée de la date, un autre coup la méthode find ne trouve rien et x est Nul
un MsgBox pour éviter l'erreur c'est le serpent qui se mord la queue car de toute manière impossible de trouver la date de début et de colorer les cellules
Toutes les idées sont les bienvenues, merci d'avance
cordialement
Didier
 

Pièces jointes

Dernière édition:
Re : problème de recherche de date avec méthode find

Bonjour,

Tout d'abord, lorsque tu mets du code dans un message, pense à l'insérer entre les balises [Code ], la commande c'est le # dans le menu...

Ensuite, il n'est jamais simple de trouver une date par la méthode Find

Avec l'équivalent d'Equiv (Match), tu as plus de chances...

Exemple :

Code:
Dim X As Long
X = Application.Match(CLng(CDate(Me.DtPicker1)), Range("E5:AL5"), 0)

tu obtiens alors le numéro de la colonne de la plage de recherche.
Si tu veux le numéro de colonne, tu rajoutes 4

Peut-être?
 
Re : problème de recherche de date avec méthode find

merci pour cette info car jusqu'à maintenant je butais avec la méthode find ; je ne comprenais pas pourquoi cette méthode fonctionnée dans d'autres circonstances avec la même syntaxe et que la c'était presque toujours le bug.
je vais mettre ta méthode en application avec espoir 🙄
cordialement A+
 
Re : problème de recherche de date avec méthode find

Bonsoir
la plage de cellules où s'effectue la recherche doit obligatoirement être
du même format que la variable utiliée pour la recherche.
Si une plage de cellules où s'effectue la recherche n'a pas le format système
Dim UneDate As Variant
Si une plage de cellules où s'effectue la recherche a le format système
Dim UneDate As Date
Cordialement
Flyonets
 
Re : problème de recherche de date avec méthode find

Bonjour à tous,
je n'avais pas d'internet ce matin et j'ai appliqué tous vos conseils, hélas les 2 premières lignes du diagramme fonctionnent, mais dés la troisième ça bug 🙁 donc pas mieux qu'avant.
Décidément je commence à désespérer
merci pour votre aide
cordialement
Didier
 
Re : problème de recherche de date avec méthode find

comme la ligne du calendrier ne change pas, pas besoin de la chercher : Ligne = 5
ensuite il ne reste plus qu'à trouver la colonne qui contient la date : colonne = Application.Match(Me.DTPicker1 * 1, Rows(5))
c'était finalement pas bien difficile lorsque l'on a la solution mais cela m'a fait mariner pendant plus d'une semaine et bien des éceuil m'attendent avant d'avoir achevé mon petit programme
Merci encore pour 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

  • Question Question
Microsoft 365 worksheet_change
Réponses
29
Affichages
250
Réponses
4
Affichages
147
Réponses
4
Affichages
362
Réponses
16
Affichages
1 K
Retour