Le génie c'est des petites choses toute simple auquel les autres n'ont pas pensés
Version imprimable
Le génie c'est des petites choses toute simple auquel les autres n'ont pas pensés
Cdate ne fonctionne pas.
Il faut CDbl ou CStr avec le format yyyy-mm-dd.
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 Sub CommandButton1_Click() dateDeb = CStr(Format(TextBox1.Value, "yyyy-mm-dd")) datFin = CStr(Format(TextBox2.Value, "yyyy-mm-dd")) Feuil2.ListObjects("Tableau1").Range.AutoFilter Field:=1, Criteria1:= _ ">=" & dateDeb, Operator:=xlAnd, Criteria2:="<=" & datFin Stop dateDeb = CDbl(CDate(Format(TextBox1.Value, "yyyy-mm-dd"))) datFin = CDbl(CDate(Format(TextBox2.Value, "yyyy-mm-dd"))) Feuil2.ListObjects("Tableau1").Range.AutoFilter Field:=1, Criteria1:= _ ">=" & dateDeb, Operator:=xlAnd, Criteria2:="<=" & datFin Stop End Sub
Sur tous mes tests cela fonctionne, après que c'est vrai je n'y connais pas grand chose (du tout) mais pour moi ça a l'air de fonctionner
Merci bcp pour ton aide rdurupt :)
Sur ma version de Excel 2007, la ligne suivante produit l'erreur "Sub ou Fonction non définie" sur TrouveType(TextBox1)
Pourtant le code suivant ne produit pas d'erreur :Code:
1
2 Feuil2.ListObjects("Tableau1").Range.AutoFilter Field:=1, Criteria1:= ">=" & TrouveType(TextBox1), Operator:=xlAnd, Criteria2:="<=" & TouveType(TextBox2)
Code:
1
2 Criteria1 = TrouveType(TextBox1) Criteria2 = TrouveType(TextBox2)
Bonjour,
Tu auras ce message d'erreur sur toutes les versions d'Excel car c'est une fonction perso donnée par Robert au post #10 :Citation:
Sur ma version de Excel 2007, la ligne suivante produit l'erreur "Sub ou Fonction non définie" sur TrouveType(TextBox1)
Hervé.Code:
1
2
3
4
5
6
7 Function TrouveType(V) TrouveType = V If IsDate(TrouveType) = True And InStr(TrouveType, "/") <> 0 And InStr(TrouveType, ":") <> 0 Then TrouveType = Format(TrouveType, "yyyy-mm-dd hh:mm"): Exit Function If IsDate(TrouveType) = True And InStr(TrouveType, "/") <> 0 Then TrouveType = Format(TrouveType, "yyyy-mm-dd"): Exit Function If IsNumeric(Replace(TrouveType, ".", ",")) = True Then TrouveType = Replace(TrouveType, ",", "."): Exit Function End Function
Bonjour,
Je pense que Docmarti a bien compris qu'il s'agit d'une fonction personnalisé!
Mais quelle retourne une erreur quand il l'utilise dans le filtre et pas quand il transite par une variable!
Si c'est le cas, ça me rend perplexe!
Bonjour,
Oups, autant pour moi ! Milles excuses Docmarti :?
Hervé.
Autant pour moi, Hervé. C'était une erreur typographique dans ce code et je ne l'ai jamais vue : TouveType
Code:
1
2 Feuil2.ListObjects("Tableau1").Range.AutoFilter Field:=1, Criteria1:= _ ">=" & TrouveType(textbox1), Operator:=xlAnd, Criteria2:="<=" & TouveType(textbox2)
Bonjour,
Je suis à l'origine de cette erreur! Je suis comme tous les vieux dont la Vue baisse!
Excusable et j'en profite
Bonjour,
- j'aurais aimé améliorer la saisie dans des textbox qui renvoient à du numérique. En effet, j'aimerais limiter la saisie à des nombres entre 0 (compris) à 20 (compris aussi). il faudrait que ce soit limité à deux décimales. Toutefois je ne voudrais pas être obligé de saisir 8.00 mais seulement 8 par exemple. Dans d'autres cas je voudrais aussi pouvoir saisir 8.62 par exemple.
- enfin, est ce qu'il est possible dans une textbox de limiter le choix de saisie possible ? vous allez probablement me dire qu'il fallait que je choisisse une combobox mais maintenant que c'est fait.... est ce que je peux limiter la saisie à certains caractères qui serait ici (1 ou 2 ou 3 ou 4)
Merci.
Bonsoir,
Code:
1
2
3
4
5
6 Function TrouveType(V) TrouveType = V If IsDate(TrouveType) = True And InStr(TrouveType, "/") <> 0 And InStr(TrouveType, ":") <> 0 Then TrouveType = Format(TrouveType, "yyyy-mm-dd hh:mm"): Exit Function If IsDate(TrouveType) = True And InStr(TrouveType, "/") <> 0 Then TrouveType = Format(TrouveType, "yyyy-mm-dd"): Exit Function If IsNumeric(Replace(TrouveType, ".", ",")) = True Then TrouveType =round(cdbl(Replace(TrouveType, ".", ",")),2):TrouveType = Replace(TrouveType, ",", "."): Exit Function End Function
Bonsoir rdurupt.
Merci pour ton intervention.
C'est cdbl avec le 2 qui définit deux décimales?
Pour le 1 à 4 je crois que je vais les changer par des combobox. Il n'y aura pas de problème de format et cela sera bien pris pour des chiffres grâce à ton code non?
Pour limiter la saisie entre 1 et 20 dans les textbox c'est possible ou tu penses que je doive les changer là aussi par des combobox? En effet je n'ai pas envie que qqun mette par erreur de saisie 198 alors que c'est limité à 20.....
Merci
J'ai essayé de trouver une solution. Cela est-il correct? cela fonctionne mais je me méfie tellement avec les formats de données....
Code:
1
2
3
4
5
6 Private Sub TextBox3_Change() If Val(TextBox3.Value) > 20 Then MsgBox "la note ne peut excéder 20. Merci de faire les modifications nécessaires" End If End Sub
Val attend des valeurs de type 10.5 alors que cdbl attend des 10,5 il faut choisir!
Excel te retourne des valeur avec virgule et VB attend un séparateur par un point
En forçant le point tu t'évites des ennuis!
If Val(trouvetype(TextBox3.Value)) > 20 ThenTrouvType n'a pas pour objet de convertir les date en date et le numérique en numérique mais de fournir un format VB compréhensible par Excel
cela fonctionnait super avec ta première fonction. Je saisissais au pavé numérique et les nombres étaient bien pris dans les moyennes donc je ne vais pas changer du coup. Moi ça m'allait très bien.
Je mets ce code. Cela fait du son :mrgreen: et vu le nombre de fois que je l'entends par jour depuis qque temps, y a pas de raison que d'autres n'en profitent pas :mrgreen:
je vais peut être même le mettre deux fois :mouarf:
Code:
1
2
3
4
5
6 Private Sub TextBox3_change() If Val(trouvetype(TextBox3.Value)) > 20 Then Beep MsgBox "la note ne peut excéder 20. Merci de faire les modifications nécessaires" End If End Sub
Et pour la textbox = 1 ou 2 ou 3 ou 4
Code:
1
2
3
4
5
6
7
8 Private Sub TextBox63_Change() If Not (Val(TrouveType(TextBox63.Value)) = 1 Or Val(TrouveType(TextBox63.Value)) = 2 Or Val(TrouveType(TextBox63.Value)) = 3 Or Val(TrouveType(TextBox63.Value)) = 4) Then Beep MsgBox "le coefficient peut seulement être 1, 2, 3 ou 4. Merci de faire les modifications nécessaires" TextBox63.SetFocus End If End Sub
Code:
1
2
3
4
5
6 trouve=false For i = 0 To UBound(Array(1, 2, 3, 4)) If Val(TrouveType(TextBox63.Value)) = Array(1, 2, 3, 4)(i) Then trouve = True: Exit For Next If trouve = False Then MsgBox "Pas trouvé"
Merci Rdurupt pour ton code.
Tu me l'as corrigé car le mien est faux et risque de provoquer des erreurs ou il peut marcher mais ce n'est pas super bien écrit ?
Bonne journée.
Bonsoir,
chose étrange pour moi.. mais peut être pas pour vous.....
Lorsque je saisis mes dates dans mon formulaire, cela fonctionne très bien grâce au code de rdurupt. Il n'y a aucun souci, je peux faire des filtres par date. C'est impeccable. On va appeler ce fichier le fichier A
Ensuite, je souhaite parfois copier les lignes Excel saisies avec le formulaire dans un autre fichier excel avec le même tableau. on va appeler ce fichier B
Donc je copie sélectionne les lignes du Fichier A, je les copie, je vais sur mon fichier B et je les colle. Et là je vérifie les données et je me rends compte qu'il a transformé 24/06/2015 par 24/06/2019. Je regarde des lignes que j'avais précédemment copier coller et idem. Dans le fichier B il a transformé 2015 par 2019.
Qqun sait pourquoi? merci
Edit pour être plus précis, il a même transformé une ligne 24/06/2015 dans le fichier A par 25/06/2019 dans le fichier B
Bonsoir,
dans les options, un classeur doit avoir le calendrier activé à partir de 1904, juste décocher cette case …
_____________________________________________________________________________________________________
Je suis Charlie - Je suis Bardo
Bonjour Marc-L et merci.
Franchement à vous tous, il n'y a pas grand chose qui vous échappe..... C'est impressionnant !!!
J'aurais aimé savoir deux choses svp :
- Par défaut sur un classeur excel cette case est cochée ou décochée? Je crois que c'est 1900 par défaut mais ça me rassurerait d'avoir votre avis.
- Est ce que vous arrivez à imaginer une voire plusieurs possibilités pour que ce soit arrivé ? Si vous pouviez exclure le fait que je perde la boule et que j'ai coché moi même cette case.:mrgreen:. Est il possible qu'une macro déclenche cela? ..... J'aimerais évaluer le risque que cela se reproduise à nouveau.
Merci en tout cas.
N'ayant ni la science infuse ni de pouvoir divinatoire (juste les quatre années d'écart pile caractéristiques),
peut-être un classeur provient-il d'un MAC car, si je ne m'abuse,
l'option a été créée sur les versions PC pour compatibilité avec le MAC.
Un code peut aussi modifier cette option via la propriété Date1904 du classeur …
_____________________________________________________________________________________________________
Merci de cliquer sur :plusser: pour chaque message ayant aidé puis sur :resolu: pour clore cette discussion …