Format de date incompatible Excel et Listbox
Bonjour a tous,
Voici mes explications pour plus de clarté.
Mon USF fonctionne chez moi.
Les 8 Listbox (choixlistbox) me servent a filtrer les résultats de la Listbox1.
Au niveau de La listbox8, j'ai integre deux colonnes et je souhaite aussi filtrer avec mais pour le moment je filtre rien, j'ai pas trouve le bon code.
Mes 10 combobox et 14 textbox, par un clic sur une ligne de résultat de la Listbox1 me servent afficher les valeurs des colonnes, pour plus de lisibilité mais aussi a pouvoir enregistrer, modifier ou supprimer une ligne.
Combo8/9/10: azimuts
A savoir que les combobox 3/4/5/6 sont alimentes par d'autres colonnes d'une autre feuille.
Les 14 textbox sont pour afficher les valeurs DMS (colonnes 8 a 13, 17 et 18), en DD (colonnes 18/19) et en DDM (colonnes 20/21).
Les résultats, après filtre des choixlistbox, seront projetés sur une mappemonde dans le meme formulaire (j'ai pas encore fait).
Désole pour la taille de l'USF, j'ai un double écran, écran grande taille, l'USF s'adapte a mes écrans.
Merci pour votre soutien,
Merci Galopin01, ne m'en veut ...
je vais regarder vos aides,
A+
Bonjour LouReed,
Merci pour ton aide.
Ce pas evident de faire comprendre un formulaire que l'on est senser anonymiser pour la confidentialité. C'est pour cela que je n'ai pas mis les references des labels, que les données sont incohérentes
A+
Bonjour Galopin01,
J'ai fait les combo, comme tu me l'as dit.
Je comprends pas les dates ..... elles ne correspondent pas.
Je te renvoie le fichier que tu m'as donne, ayant fait des modifications dessus afin que tu vois le cheminement.
J'ai rajoute une feuille Excel, "Tableau1"
Le tableau "TestD", je l'ai renomme "Tableau2"
J'ai laisse tes cbo01 a cbo10
Le RAZ, ne marchait pas, j'ai remplace par cela
Case "ComboBox", "ListBox"
ctl.ListIndex = -1
au lieu de ceci
Case "ComboBox", "ListBox"
ctrl.Clear
J'essaye de conserver une coherence par rapport a mes originaux
Par contre les dates ????
En te remerciant,
a+
Re,
J'ai cherche toute la journée sans trouver de solution, quelle prise de tete ces dates ... !
A+
Salut benji77, le fil,
Quand on travaille sur un tableau structuré, et que l'on doit éditer des lignes, on a plusieurs solutions. Tu en a pris une, et pas la plus simple, si tu ne veux pas te casser la tête utilises un Index de ligne :
Maintenant avant d'aller plus loin il faut plus de renseignements.
Je pense que :
- Les liste déroulantes vont te servir a filtrer le contenu de la liste "ListBox1"
- Une fois un item de la liste "ListBox1" sélectionné les informations de cette ligne se reportent sur l'ensemble des contrôles zone de textes du formulaire.
- Si tu cliques sur le bouton "Modify" la ligne correspondante sera modifier dans le tableau.
Maintenant :
- Pourquoi mettre des listes déroulantes qui reprennent les même valeurs ex: (ChoixListBox1 et ComboBox1) ? (Remplacement des Combo par des TextBox)
- A quoi doivent servir les boutons "Record" et "Reset" ?
- As-tu besoin d'un si grand formulaire ?
Pour la gestion de données provenant de plusieurs sources combobox 3/4/5/6, on a besoin de plus d'information. (Gestion de 1 ou plusieurs Tableau structuré)
J'attends d'avoir ces infos avant d'aller plus loin.
Bonne prog.
Bonjour Jean-Paul,
Pardonne moi de la réponse tardive, j'ai 3 heures de decalage par rapport a vous.
Mes explications pour que tu comprennes mon formulaire.
- Les 8 Listbox me serviront a filtrer la "listbox1"
- Une ligne sélectionnée dans la "Listbox1", les valeurs se reportent en effet sur mes combobox et textbox.
- L'autre fonction des combobox et textbox est de pouvoir rentrer des valeurs, présentent ou pas dans les listes déroulantes, pour les enregistrer, modifier, supprimer si besoin.
- Le ou les lignes dans la "listbox1" seront projetés sur une mappemonde.
- ChoixListbox1 pour filtrer par date et projeter ses données via Listbox1 sur mappemonde.
- Combobox1 afficher la date par selection d'une ligne dans listbox1 et surtout y intégrer plusieurs dates dans la BDD, memes dates avec horaires différentes ou dates différentes
- Bouton RECORD, enregistrer les valeurs inscrites dans les combobox ou textbox
- Bouton RESET, enlever les valeurs des combo et textbox ainsi que les critères sélectionnées dans choixlistbox
- Oui pour la taille du formulaire, il faut que j'y intègre une mappemonde pour projeter les données. Je ne le ferais que quand j'aurais réglé mes codes (date, paramètres DMS, DDM, DD) avant de passer a une étape Superieure. J'ai un autre formulaire qui s'affiche sur autre écran aussi.
- La gestion des données affichées sur combo3/4/5/6 provienne d'une seule et meme source, un tableau structure.
En espérant de t'avoir bien expliquer,
dans l'attente de vous lire,
A+
Le diable est dans Excel ! Le diable est dans ton classeur !
Ton classeur il est quand même bizarre : J'ai effectivement contrôlé ton observation comme quoi les données Dates en sortie de Cbo01 ne correspondent pas .
J'ai obtenu la même observation ! Il y a un écart de dates de ± 5 ans (1530 jours)
Voulant en avoir le cœur net j'ai voulu tester l'algo sur un classeur test avec juste une colonne de données dates et un usf qui ne fait que trier les données dates et expurger les doublons. Dans un premier temps j'ai cru qu'il se passait le même phénomène : Toutes les dates passaient en 2019 !
Mais pas du tout ! En regardant de plus près j'ai constaté que toutes les dates issues de ton classeur et que j'avais copié/collé étaient également décalées.
J'ai alors refait le test avec des dates à moi issues d'un de mes classeurs de données de W et le programme travaille alors normalement.
En résumé : Il va falloir étudier pourquoi ton classeur affiche des dates décalées parce que en fait c'est de cela dont il est question : Si l'on examine de près ton Tableau et la première date (03/09/2023) si on essaie de changer le format (ou qu'on lit en VBA) on lit 43710 alors que au vrai les dates de 2023 sont dans une fourchette de 45000 environ (45240 pour aujourd'hui !)
C'est donc qu'en fait ce sont tes dates, pour une raison que j'ignore encore qui sont mal interprétées par Excel (mais pas par VBA qui a débusqué le loup. Pardon le diable !)
Le classeur de contrôle :
A+
Je commence a trouver une coherence maintenant, une fois cela enlever ....
Cependant, inversion jj//mm Excel avec ma choixlistbox et ma listbox1.
Ton etude, m'a permis de verifier ce "use système 1904" .... Merci du soutien. le diable semble débusque
Reste a comprendre cette inversion maintenant ...
A+
Ca prend forme, maintenant, pourquoi le chiffre 0 des jour et mois n'est pas affiches dans choixlistbox et lignes listbox1 -> j'ai changer mon format de code cbo01 en m/d/yyyy. Je retrouve les memes valeurs maintenant.
Cependant quand j'enregistre une ligne via mon formulaire, cette date est inversée en jj//mm/yyyy dans mon classeur ?
Salut,
Je passe vite fait, pas trop de temps aujourd'hui.
Bouton RECORD, enregistrer les valeurs inscrites dans les ComboBox ou TextBox
OK, mais à quoi sert le bouton Modify ?
Bouton RESET, enlever les valeurs des combo et TextBox ainsi que les critères sélectionnées dans ChoixListBox
Bo ça je m'en doutais.
La gestion des données affichées sur combo3/4/5/6 provienne d'une seule et meme source, un tableau structure.
- OK, il nous faut le nom de la feuille et du tableau...
- Faut-il aussi qu'ils soient sauvegardé dans leur propres table ? sur l’appuie de Record ?
Voici un premier jet, je n'ai pas nettoyer le code, tu as beaucoup de variables publiques qui ne sont pas obligatoires je pense.
Je n'ai pas regarder pour le filtrage, avec les listes.
Pour que cela fonctionne j'ai ajouté une colonne index, il vaut mieux travailler avec un index, que se faire chi... avec des dates ou de longs textes.
J'ai aussi intégrer une fonction LoadUniqueValues qui te permet de charger les valeurs uniques en choisissant, si c'est une valeur date, de la formatée en date courte.
Si je ne rentre pas trop tard, je m'y pencherais un peu plus.
Désolé pour le dimensionnement je n'ai pas un écran géant.
Bonne programmation.
Bonjour Jean-Paul,
Merci pour ce retour.
OK, mais à quoi sert le bouton Modify ?si la ligne est enregistrée et que l'on s'apercoit d'une erreur de donnée, on la reprend ou sélectionne dans Listbox1, les valeurs s'affichent dans les combo et textobox afin de pouvoir modifier celles-ci et les valider avec le bouton "modify".
OK, il nous faut le nom de la feuille et du tableau...
Pour les tests, cette feuille s'appelle test1:
Faut-il aussi qu'ils soient sauvegardé dans leur propres table ? sur l’appuie de Record ?
Non, car il y a déjà un formulaire qui le fait sur un appui RECORD aussi.
D'autre part, Je n'arrive pas a ouvrir ton formulaire.
j'ai ce message:
Aussi, j'ai regarde tes codes, c'est trop stratosphériques en rapport avec mon niveau debutant ... chapeau bas quand meme!!!
Ca doit te démanger les phalanges, ne m'en veut pas, mais si tu peux rester a mon bas niveau de comprehension afin que je puisse m'y retrouver et surtout comprendre ce que je fait sinon je vais couler.
a+
Pour les dates mois/jour inversé c'est un problème de transmission au lieu d'envoyer des dates envoie des CLong(Dates(tavariable) et Excel ne peux plus se tromper. Si tu lui passes des longs il sait de quoi tu parles et si ton format de cellules est bien sur Date français il ne peut pas se tromper. Cest valable dans les deux sens : VBA > Excel et Excel > VBA pour les dates il vaut mieux transmettre des variables Long
Ok, je vais essayer de faire cela .... merci!
je suis en dates anglaises.
J'intègre cela dans le bouton RECORD?
Je dois créer une Sub CLong pour convertir la plage Excel en dates (mm/dd/yyyy) ?
Salut,
si la ligne est enregistrée et que l'on s'apercoit d'une erreur de donnée, on la reprend ou sélectionne dans Listbox1, les valeurs s'affichent dans les combo et textobox afin de pouvoir modifier celles-ci et les valider avec le bouton "modify".
Donc redondant avec le bouton SAVE... Tu sélectionnes une ligne avec la liste , tu modifie et tu sauvegarde non ?
D'autre part, Je n'arrive pas a ouvrir ton formulaire.
Bizarre, tu n'a rien toucher au niveau des noms de contrôles ? Voici quelques points à vérifier :
- ATTENTION : Tu dois absolument lancer le formulaire depuis le bouton de la feuille test, sinon rien n'est initialisé et c'est le plantage assuré.
- La feuille DataManager est-elle présente ?
- Le formulaire se nomme t-il bien UserForm1 ?
- J'ai supprimer le contrôle Modify sur mon test...
En dernier recours tu regardes dans la classe DataManager, la procédure updateUserForm
Tu ajoutes la ligne du Debug.Print, elle va afficher le nom du contrôle suivis de la valeur de la colonne. A mon avis c'est ici que cela plante.
Sub updateUserform()
Dim r As ListRow
Dim Counter As Long
Dim ControlName As String
Dim ColumnName As String
Set r = mTable.ListRows(mIndex)
For Counter = 1 To UBound(Map, 2)
Debug.Print "Control:="; Map(1, Counter); vbTab; "Range value:= "; r.Range(mTable.ListColumns(Map(2, Counter)).Index).Value
mUsf.Controls(Map(1, Counter)).Value = r.Range(mTable.ListColumns(Map(2, Counter)).Index).Value
Next
End SubEnsuite tu colles un point d'arrêt sur la ligne du Next (touche F9) et tu relances le formulaire. Une fois en mode arrêt, tu fait du pas à pas dans la boucle avec la touche F8
J'attends ton retour, et le nom du tableau pour les contrôle Combo de 3 à 6
Salut à tous,
Effectivement, je suis sous Office 365, et sur 2016, sûr ça ne marche pas puisque l'on utilise Unique et Sort.
Donc si cela fonctionne pas je dois changer les Evaluate par un appel de la fonction LoadUniqueValues.
Je regarde cela demain, dommage Evaluate("SORT(UNIQUE(vt_Datas[Column" & Index & "]))") simplifie vraiment le code...
Bah Benji à 2021! Si ça marche chez lui c'est peur-être pas la peine de remettre à plat...
Bonjour Jean-Paul,
La feuille DataManager est-elle présente ?
Oui elle est presente.
Le formulaire se nomme t-il bien UserForm1 ?
Oui, c'est bien UserForm1.
Donc redondant avec le bouton SAVE... Tu sélectionnes une ligne avec la liste , tu modifie et tu sauvegarde non ?Oui, vous avez entièrement raison, je supprime ce bouton.
C'est la feuille "test1", nom du tableau c'est "Tableau2".
A+



