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

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

  • exemple.xlsm
    259.2 KB · Affichages: 59
  • exemple.xlsm
    259.2 KB · Affichages: 65
  • exemple.xlsm
    259.2 KB · Affichages: 67
Dernière édition:

Cousinhub

XLDnaute Barbatruc
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?
 

dmoluc

XLDnaute Occasionnel
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 :rolleyes:
cordialement A+
 

flyonets44

XLDnaute Occasionnel
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
 

dmoluc

XLDnaute Occasionnel
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
 

dmoluc

XLDnaute Occasionnel
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
 

Discussions similaires

Réponses
6
Affichages
240

Statistiques des forums

Discussions
312 206
Messages
2 086 220
Membres
103 158
dernier inscrit
laufin