Comparaison date combobox à une cellule
Re-Bonjour le forum,
Une fois de plus j'ai un soucis que je ne comprend pas car je n'ai même pas de message d'erreur.
Le principe est simple, j'ai une feuille de données datées et via une combobox dans une UF je veux récupérer les données d'une date choisie dans la combobox1. Voici le code:
Dim i, j As Long
Dim a, b As Integer
If Me.CheckBox1.Value = True And Me.ComboBox1.Value <> "" Then
Worksheets("Bilan de production").Cells(4, 2) = Me.ComboBox1.Value
With Worksheets("Archivage Production").Activate
For i = 4 To 1000
If Cells(i, 1) = "" Or Cells(i, 5).Value < Worksheets("Bilan de production").Cells(4, 2) Then
a = 7
For j = 4 To i - 1
If Cells(j, 5).Value = Worksheets("Bilan de production").Cells(4, 2) Then
MsgBox ("date reconnue")
If Cells(j, 3).Value = Me.ComboBox4.Value Then '### Cas où une équipe de sélectionnée ###
MsgBox ("equipe trouvée")
a = a + 1
Worksheets("Bilan de production").Cells(a, 1) = Cells(j, 1)
End If
End If
Next j
Exit For
End If
Next i
End With
End IfDans un premier temps je comparais la combobox1 à mes cellules directement mais sachant que mes cellules sont au format "date" je me suis dis que le format de la combobox1 ne correspondait pas donc j'ai contourné le problème en copiant au préalable la valeur de la combobox1 dans une cellule à part (que j'ai mis aussi au format date), puis je compare donc cette cellule aux autres..... Mais rien y fait le programme ne passe pas cette condition " If Cells(j, 5).Value = Worksheets("Bilan de production").Cells(4, 2) Then".
Que faire ?
Merci d'avance
Bonsoir,
Sans regarder ta procédure, il faut d'abord apprendre que les données insérées dans des contrôles de Userform (TextBox, ComboBox, ListBox) sont par définition des données texte (type String).
Or les donnnées de type Date dans Excel ne sont pas du texte mais sont mémorisées sous forme de nombres (appelés numéros de série). Lorsqu'un texte est identifié comme Date dans Excel, ce dernier le transforme en nombre auquel il affecte un format de cellule date par défaut.
Pour effectuer des comparaisons, il est logique que la comparaison directe avec la valeur de la cellule ne donne pas de résultat, car celle-ci contient un nombre de type Long.
Plusieurs solutions peuvent être essayées (en utilisant des variables éventuellement et non une cellule tierce, dans la mesure où tu n'es jamais assuré de maîtriser préalablement l'affectation à une cellule...) :
- utiliser la propriété .Text de la cellule au lieu de sa propriété par défaut .Value (la propriété .Text renvoyant la valeur formatée)
- convertir la donnée Combo en date (variable Date) pour la comparer à la valeur de la cellule
- convertir la date en type Long et la comparer à la valeur de la cellule également convertie en type Long.
Si aucune ne fonctionne (avec les dates il y a toujours une incertitude), il faut reprendre à la source... mais il y a toujours une solution à la fin !
Cordialement.
Bonjour,
Merci pour ces précisions, c'est vrai que je n'avais jamais eu ce genre de problème à gérer auparavant donc je ne faisais pas attention.
J'ai donc remplacer le .value par .text pour les cellules et ça fonctionne bien.
Merci
A bientot
Merci du retour ! Et à noter, car c'est une solution à laquelle on pense le moins souvent... !
Cordialement.