Fonction recherche ne fonctionne pas

alex67800

XLDnaute Impliqué
Bonsoir le Forum,
Cela faisait longtemps que je ne vous ai pas soliciter, mais je but sur un problème.:eek:
J'ai un usf avec lequel je veus effectuer une recherche dans un tableau en fonction d'une date et un texte pour alimenter les controles de mon usf. Ceci afin de pouvoir modifier la ligne concernée.
Malheureusement il ne me trouve jamais ma recherche.
Je vous met ci-dessous mon code:
Code:
Sub recherche()
Dim Plage As Range, Cellule As Range
Dim wsbd As Worksheet

    Set wsbd = Sheets("Pointage")
    Set Plage = wsbd.Range("A2:K" & wsbd.Range("A65536").End(xlUp).Row)
    For Each Cellule In Plage
        If ((Cellule.Value = CDate(UserForm1.DTPicker1.Value)) And (Cellule.Offset(0, 3).Value = UserForm1.ComboBox2.Value)) Then
        With UserForm1
        .ComboBox1.Value = Cellule.Offset(0, 2).Value
        .ComboBox7.Value = Cellule.Offset(0, 4).Value
        .ComboBox3.Value = Cellule.Offset(0, 5).Value
        .ComboBox4.Value = Cellule.Offset(0, 6).Value
        .ComboBox5.Value = Cellule.Offset(0, 7).Value
        .ComboBox6.Value = Cellule.Offset(0, 8).Value
        .ComboBox8.Value = Cellule.Offset(0, 9).Value
        .TextBox1.Value = Cellule.Offset(0, 10).Value
        End With
       Else: MsgBox "Aucun éléments trouvés pour cette période!", vbInformation: Exit Sub
        End If
    Next Cellule

End Sub


Petite précision (je pense que cela pourrais venir de là, mais suis pas sûr), ma combobox2 est alimenté par 2 colonnes comme ceci:
Code:
     Me.ComboBox2.Clear
  For Each d In Range(Sheets("Item").[A2], Sheets("Item").[A65000].End(xlUp))
     j = 0
     Me.ComboBox2.AddItem
     Me.ComboBox2.List(j, 0) = d & " " & d.Offset(0, 1)
     Me.ComboBox2.List(j, 1) = d.Row
     j = j + 1
   Next d

Pourriez-vous me dire d'ou viens le problème?
Merci d'avance pour votre aide.
 

JNP

XLDnaute Barbatruc
Re : Fonction recherche ne fonctionne pas

Bonjour le forum :),
Je ne sais pas si ça t'aidera, mais 2 remarques :
Tu analyses toute la plage A:K alors que d'après le remplissage de ton combobox, la colonne A devrait suffire.
Tu fait des comparaisons de dates, or suivant le format, tu peux avoir des surprises (les heures comprises par exemple)... Essaie peut-être
Code:
If ([B][COLOR=red]CDate[/COLOR][/B](Cellule.Value = CDate(UserForm1.DTPicker1.Value)) And (Cellule.Offset(0, 3).Value = UserForm1.ComboBox2.Value)) Then
ou pour être sûr de ton test, certe un peu plus lourd mais fiable, tu peux comparer Day, Month et Year.
Bonne journée :cool:
 

alex67800

XLDnaute Impliqué
Re : Fonction recherche ne fonctionne pas

Bonjour GIBI,JNP

Petite précision mon code ne bug pas, il me trouve pas la ligne avec les deux conditions et me met donc le msgbox.

JNP j'ai tester avec ton code cela ne change rien, arffff....

Les formats dates sont les même apparement.

Je vous joint le fichier pour visualiser. Il n'est pas terminer, car je bloque pour l'instant sur ce problème.

Le fichier est trop lourd même ziper je le met en lien ici:
http://cjoint.com/?ccnCEtJ8MC

Merci encore de votre aide.


Edit: modification du lien, il restait quelques infos personnelles (oupsss) ;)
 
Dernière édition:

alex67800

XLDnaute Impliqué
Re : Fonction recherche ne fonctionne pas

Re tout le monde,
en cherchant un peu effectivement le format du dtpicker est dd/mm/yy hh:mm:ss, alors que le format date de ma colonne A est dd/mm/yyy.

J'ai changé le CustomFormat dans les propriétés du dtpicker en dd/mm/yyyy, mais cela ne change rien. Pour m'en rendre compte j'ai modifié mon msgbox comme ceci:
Code:
MsgBox "Aucun éléments trouvés pour la date du!" & " " & UserForm1.DTPicker1.Value & Chr(10) & "concernant" & " " & UserForm1.ComboBox2.Value, vbInformation: Exit Sub

Dans celui-ci cela me renvoi toujours la date et l'heure.

Je ne me rappel plus comment imbriqué (forcer) le format date avec dtpicker1.value!
C'est simple je sais mais là j'ai un bug du cerveau lol.


Edit: j'ai réussis à mettre le format du dtpicker en dd/mm/yyyy, cela par le biais de l'initialize, en mettant DtPicker1.value= Date, alors que j'avais mis Now!!

Mais ça marche toujours pas snifff.
 
Dernière édition:

alex67800

XLDnaute Impliqué
Re : Fonction recherche ne fonctionne pas

Bonjour moi même, GIBI, JNP,

alors après ananlyse de ton fichier ton format date en colonne A était jj/mm/yy hh:mm:ss, il suffisait de le constater dans la barre de formule,donc logique que cela ne trouve pas de concordance (quel âne ce cheval!). En ayant biensût également mis le format dtpicker1.value= Date.

Maintenant que tu as rétablit cette erreur, ça marche tout seul!!!!:D

Tiens voilà que je me parle tout seul!!!!!


Bon je me met mon code ici, si jamais j'ai d'autres questions à me poser :p:cool::rolleyes::D

Code:
Sub recherche()
Dim Plage As Range, Cellule As Range
Dim wsbd As Worksheet

    Set wsbd = Sheets("Pointage")
    Set Plage = wsbd.Range("A2:D" & wsbd.Range("A65536").End(xlUp).Row)
    For Each Cellule In Plage
        If ((Cellule.Value = CDate(Format(UserForm1.DTPicker1, "dd/mm/yyyy"))) And (Cellule.Offset(0, 3).Value = UserForm1.ComboBox2.Value)) Then
        With UserForm1
        .ComboBox1.Value = Cellule.Offset(0, 2).Value
        .ComboBox7.Value = Cellule.Offset(0, 4).Value
        .ComboBox3.Value = Cellule.Offset(0, 5).Value
        .ComboBox4.Value = Cellule.Offset(0, 6).Value
        .ComboBox5.Value = Cellule.Offset(0, 7).Value
        .ComboBox6.Value = Cellule.Offset(0, 8).Value
        .ComboBox8.Value = Cellule.Offset(0, 9).Value
        .TextBox1.Value = Cellule.Offset(0, 10).Value
        End With
             If Not ((Cellule.Value = CDate(Format(UserForm1.DTPicker1, "dd/mm/yyyy"))) And (Cellule.Offset(0, 3).Value = UserForm1.ComboBox2.Value)) Then
       MsgBox "Aucun éléments trouvés pour la date du" & " " & UserForm1.DTPicker1.Value & Chr(10) & "concernant" & " " & UserForm1.ComboBox2.Value, vbInformation: Exit Sub
               End If
     End If
    Next Cellule

End Sub

Soyons sérieux, merci GIBI et JNP, vous étiez sur la bonne piste, alors que je cherchais l'erreur ailleurs! Bon wek-end.
 

skoobi

XLDnaute Barbatruc
Re : Fonction recherche ne fonctionne pas

Bonjour alex (on est voisin dis-moi!),

pour ce qui est du format, à l'initialisation de l'usf, remplace

Code:
DTPicker1.Value = Now
par
Code:
DTPicker1.Value = Date
Autre soucis, dans cette boucle:
Code:
    For Each Cellule In Plage
        If (CDate(Cellule.Value = CDate(UserForm1.DTPicker1.Value)) And (Cellule.Offset(0, 3).Value = UserForm1.ComboBox2.Value)) Then
        With UserForm1
        .ComboBox1.Value = Cellule.Offset(0, 2).Value
        .ComboBox7.Value = Cellule.Offset(0, 4).Value
        .ComboBox3.Value = Cellule.Offset(0, 5).Value
        .ComboBox4.Value = Cellule.Offset(0, 6).Value
        .ComboBox5.Value = Cellule.Offset(0, 7).Value
        .ComboBox6.Value = Cellule.Offset(0, 8).Value
        .ComboBox8.Value = Cellule.Offset(0, 9).Value
        .TextBox1.Value = Cellule.Offset(0, 10).Value
        End With
       Else: MsgBox "Aucun éléments trouvés pour cette période!", vbInformation: Exit Sub
        End If
    Next Cellule
tu demandes à en sortir dès que l'information n'est pas trouvé, ce qui fait que la plage ne sera jamais analysée en totalité.
Par contre, quand la condition est remplie, là il faut quitter la boucle. J'ai également ajouter une variable booléenne lorsque la recherche n'aboutis pas. En bleu les modifications/ajouts afin (je l'espère) que tu comprennes.
Code:
Sub recherche()
  Dim Plage As Range, Cellule As Range
  Dim wsbd As Worksheet[B][COLOR=Blue], Trouve As Boolean[/COLOR][/B]

  Set wsbd = Sheets("Pointage")
  Set Plage = wsbd.Range("A2:[B][COLOR=Blue]A[/COLOR][/B]" & wsbd.Range("A65536").End(xlUp).Row)
[B][COLOR=Blue]  Trouve = False[/COLOR][/B]
  For Each Cellule In Plage
    If (CDate(Cellule.Value = CDate(UserForm1.DTPicker1.Value)) And (Cellule.Offset(0, 3).Value = UserForm1.ComboBox2.Value)) Then
      With UserForm1
        .ComboBox1.Value = Cellule.Offset(0, 2).Value
        .ComboBox7.Value = Cellule.Offset(0, 4).Value
        .ComboBox3.Value = Cellule.Offset(0, 5).Value
        .ComboBox4.Value = Cellule.Offset(0, 6).Value
        .ComboBox5.Value = Cellule.Offset(0, 7).Value
        .ComboBox6.Value = Cellule.Offset(0, 8).Value
        .ComboBox8.Value = Cellule.Offset(0, 9).Value
        .TextBox1.Value = Cellule.Offset(0, 10).Value
      End With
[B][COLOR=Blue]      Trouve = True
      Exit For[/COLOR][/B]
    End If
  Next Cellule

[COLOR=Blue][B]  If Not Trouve Then MsgBox "Aucun éléments trouvés pour cette période!", vbInformation[/B][/COLOR]
End Sub
Edit: j'oubliai: Tu n'as pas besoin de faire la recherche dans toutes le colonnes, la colonne A suffit:
Code:
Set Plage = wsbd.Range("A2:A" & wsbd.Range("A65536").End(xlUp).Row)
 
Dernière édition:

alex67800

XLDnaute Impliqué
Re : Fonction recherche ne fonctionne pas

Bonjour Skoobi,
Heureux de te croiser sur mon fil.

Tu as bien raison, je m'en étais rendut compte. J'avais contourner le problème avec cette méthode:
Code:
    For Each Cellule In Plage
        If ((Cellule.Value = CDate(Format(UserForm1.DTPicker1, "dd/mm/yyyy"))) And (Cellule.Offset(0, 3).Value = UserForm1.ComboBox2.Value)) Then
        With UserForm1
        .ComboBox1.Value = Cellule.Offset(0, 2).Value
        .ComboBox7.Value = Cellule.Offset(0, 4).Value
        .ComboBox3.Value = Cellule.Offset(0, 5).Value
        .ComboBox4.Value = Cellule.Offset(0, 6).Value
        .ComboBox5.Value = Cellule.Offset(0, 7).Value
        .ComboBox6.Value = Cellule.Offset(0, 8).Value
        .ComboBox8.Value = Cellule.Offset(0, 9).Value
        .TextBox1.Value = Cellule.Offset(0, 10).Value
        End With
        Cellule.Select 'ceci pour coder mon bouton modifier

            Exit Sub
            End If
                 Next Cellule
        For Each Cellule In Selection
        If ((Cellule.Value <> CDate(Format(UserForm1.DTPicker1, "dd/mm/yyyy"))) And (Cellule.Offset(0, 3).Value <> UserForm1.ComboBox2.Value)) Then MsgBox "Aucun éléments trouvés pour la date du" & " " & UserForm1.DTPicker1.Value & Chr(10) & "concernant" & " " & UserForm1.ComboBox2.Value, vbInformation: Exit For: Exit Sub
             Next Cellule
Mais ta méthode est bien plus propre, je vais donc m'en servir de ce pas!!!:p
Merci, preuve que l'on apprende tous les jours.


Autre casse tête, dans mon USF j'ai la frame1 avec plusieurs checkbox correspondant au jour de la semaine L= Lundin M=Mardi, etc...

J'ai réussit à cocher automatiquement le bon chekbox en fonction du jour 'avec weekday dans un textbox comme référence).
Egalement un checkbox L->V qui coche de L à V, et L->D qui coche L à D.
Jusque là pas de problème.

Ce que je souhaite c'est de pouvoir créer autant de lignes que de checkbox cochez.

Je m'explique aujourd'hui nous sommes Samedi donc checkbox S est coché.
Je coche en plus checkbox V donc dans avec mon bouton valider je voudrais un ligne
avec en col A la valeur DTPicker1.value -1, colB la valeur "Vendredi", puis le reste des valeur de mes contrôles
ligne suivante col A la valeur Dtpicker1.value, colB la valeur "Samedi", puis le reste des valeurs de mes contrôles.

Donc dans le même raisonnement si j'utilise checkbox L->V cela me coche 5 checkbox, donc 5 lignes, checkbox L->D cela me coche 7 checkbox, donc 7 lignes.


J'avoue je n'ai encore rien codé, j'en suis encore à me triturer le cerveau avec la méthode à utiliser.:confused:
Count, Array (car le count n'est jamais le même, si aujourd'hui Samedi et je coche "L", comment récupérer DtPicker1.value -6, etc....) c'est donc une variable qui change en fonction du jour ou l'on saisie.

Je ne sais pas si je suis clair ou obscure. Si c'est simple je me suicide avec une feuille excel!!:D

Je remet le fichier avec les modifs proposé par skoobi:
http://cjoint.com/?ccqYEoi42c
 

skoobi

XLDnaute Barbatruc
Re : Fonction recherche ne fonctionne pas

Re voisin ;),
Heureux de te croiser sur mon fil.
Sympa merci!
Je pense avoir saisie le besoin à condition que les dates seront toujours créées en fonction de la semaine en cours.
Ex: si jour actuel = Samedi et si Lundi coché cela va créée la date J-5 et non J+2.
En bleu mes ajouts/modifs comme d'hab:

Code:
Private Sub CommandButton1_Click()
[B][COLOR=Blue]  Dim MaDate As Date
  For i = 1 To 7
    If Me.Controls("checkbox" & i).Value Then
      MaDate = DTPicker1.Value + i - Weekday(DTPicker1, vbMonday)[/COLOR][/B]
      With Sheets("Pointage")
        Nl = .Range("A65536").End(xlUp).Row + 1    'Dans quelle ligne je vais écrire
        .Range("A" & Nl).Value = [COLOR=Blue][B]MaDate[/B][/COLOR]           'Date
        .Range("C" & Nl).Value = ComboBox1.Value  'Chef d'atelier
        .Range("D" & Nl).Value = ComboBox2.Value  'Opérateur
        .Range("E" & Nl).Value = ComboBox7.Value  'Ligne
        .Range("F" & Nl).Value = ComboBox3.Value  'Tâches
        .Range("G" & Nl).Value = ComboBox4.Value  'Heures
        .Range("H" & Nl).Value = ComboBox5.Value  'Absences
        .Range("I" & Nl).Value = ComboBox6.Value  'Heures
        .Range("J" & Nl).Value = ComboBox8.Value  'Prime
        .Range("K" & Nl).Value = TextBox1.Value  'Commentaires
      End With
[COLOR=Blue][B]    End If
  Next[/B][/COLOR]
  If Not TextBox1.Value = "" Then
    a = MsgBox("Voulez-vous une alerte pour cet évènement?", vbYesNo)
    If a = 7 Then Exit Sub
    If a = 6 Then
      Alerte
    End If
  End If
  For i = 1 To 8
    Me.Controls("Combobox" & i).Value = ""
  Next i
  For j = 1 To 9
    Me.Controls("CheckBox" & j).Value = False
  Next j
  TextBox1.Value = ""
End Sub

Si c'est simple je me suicide avec une feuille excel!!:D
Bon....bin t'étouffe pas quand même :D:p.
 

alex67800

XLDnaute Impliqué
Re : Fonction recherche ne fonctionne pas

Bonjour skoobi,

Je profite que tu sois encore connecté pour intervenir.
Je n'ai pas encore testé ton code, mais à la lecture, si je comprend bien, mon commandbuton1 va appliquer madate en fonction de mon chexkbox, pour cela ok c'est pas mal je pensais à quelque chose du genre.
La où cela se complique est si je garde samedi coché + lundi, est-ce que cela va me créer 2 lignes distinct en un clic, malgré ma référence cellule + N1? Une pour lundi, l'autre pour samedi?

Edit: Arfffffff, ça marchhhhhhhe. C'était avec une simple boucle for!:(:eek::rolleyes:
J'en étais sûr, mais cela me parraissait trop simple pour fonctionner, j'étais partie avec si checkbox1 coché, faire une boucle sur label1, etc..... Une usine à gaz en somme.

File moi ta feuille excel que je me trucide:p;):D

A chercher le compliquer, on passe à côté du simple, suis humain quoi!! lol

Me suffit de remplir la colB avec la formule suivante:
Code:
    .Range("B" & Nl).Value = CDate(Format(DTPicker1.Value, dddd)) 'Date
et voilà.

Merci encore skoobi!!
 
Dernière édition:

alex67800

XLDnaute Impliqué
Re : Fonction recherche ne fonctionne pas

Re,
Merci encore.

pour la peine j'ai franchit le pas et suis devenus supporter! ;)

Vala c'est fait. Surtout plus pratique pour poster des fichiers.


Edit: pour ceux que cela interresse je met mon fichier sur le fil.
Je vous ai laissé les images dans l'usf, à vous de mettre les vôtre, en vous inspirants du code dans l'initialize.
 

Pièces jointes

  • projet pointage vessai3.xls
    190 KB · Affichages: 89
Dernière édition:

Excel-lent

XLDnaute Barbatruc
Re : Fonction recherche ne fonctionne pas

Bonsoir le fil,

Alex67800, j'ai bien aimé ton monologue :)

En tout cas, c'est très pédagogique! Apprenant actuellement les UserForm, je me suis permis de jeter un œil à ton fichier pour te piquer des astuces :D

Merci à toi.

Pour te remercier, je t'en donne une à mon tour. Dans ton code tu as la ligne ci-dessous :
Code:
        .Range("C" & Nl).Value = ComboBox1.Value  [COLOR="Green"]'Chef d'atelier[/COLOR]

Pour éviter le 'Chef d'atelier tout en restant clair dans ton code :
-> sélectionner ton UserForm1
-> sélectionner ta ComboBox1 (un seul clic)
-> dans la fenêtre Propriétés, ligne (Name)
-> remplacer par exemple ComboBox1 par ComboBoxChefAtelier

Ainsi ton code sera :
Code:
        .Range("C" & Nl).Value = ComboBoxChefAtelier.Value

Rendant ton commentaire inutile ;)

Idem pour ton UserForm1 tu peux remplacer ce nom par "Pointage"

Ainsi, au lieu d'écrire :
Code:
UserForm1.Show

tu écriras :
Code:
Pointage.Show

Ce qui peut être pratique quand il y a bcp de ComboBox, UserForm, ...

Bon courage pour ton fichier et bon dimanche.
 

alex67800

XLDnaute Impliqué
Re : Fonction recherche ne fonctionne pas

Bonjour Excel-Lent,
Pas de soucis tu peus te servir lol, nous le faisons tous cela nous permet de progresser.

Pour le fait de ne pas avoir nommer mes combo, c'est uniquement pour pouvoir faire des boucles dans d'autres codes du style:
For i = 1 To 8
Me.Controls("Combobox" & i).Value = ""
Next i
For j = 1 To 9
Me.Controls("CheckBox" & j).Value = False
Next j

Ce que je ne pourrais pas faire si chaque combos avait un nom spécifique ;)
Car dans certain cas je ne veus agir que sûr un certain nombre de combos et non tous (ex: combos 3 à 7).
Donc s'ils sont numérotés cela facilte les choses. A moins biensûr de finir chaque nom avec un numéro ex: cbxchefatelier1, delà récupérer le N° avec Right quelquechose.

Pour l'usf par contre tu as bien raison rien ne m'aurait empêché de le faire suis bête lol.

A+
 

Discussions similaires

Réponses
12
Affichages
694
Réponses
4
Affichages
213