Afficher données d'un tableau dans Userform
Bonsoir à tous,
A cause de retards quotidiens dans les trains (juste après une grosse semaine de grêve...), je découvre seulement vos messages.
Je testerai demain au travail et tâcherai de lire le tuto que vba-new m'indique.
Bonne soirée à tous.
Fabrice,
salut galopin, forum,
Je suis tout à fait d'accord avec toi! C'est pourquoi on est obligé de "forcer" le format Date!galopin01 a écrit :Cette routine assure un premier contrôle de saisie valide. Mais ça donne en aucun cas un format Date.
Encore d'accord avec toi! Mais bon, comme tu l'as dit, il faudrait se fatiguer très beaucoup pour arriver à quelque chose de parfait! Et encoregalopin01 a écrit :Ce bout de code est un peu court : il faut encore analyser la structure de ton String pour bétonner la saisie :
Oui ça me l'a fait au débutgalopin01 a écrit :De plus l'insertion automatique de la barre "/" peut dérouter l'opérateur... mébon...
Bonjour à tous,
Après une réunion un peu "houleuse" avec les personnes qui m'avaient commandé le projet, j'ai réussi à simplifier quelque peu.
Je suis bien d'accord avec toi galopin01 d'où la petite réunion de ce matin... Le problème avec la hièrarchie c'est qu'ils en veulent toujours plus sans avoir conscience qu'à un moment, ce n'est peut-être plus EXCEL le bon outil mais un Gestionnaire de base de données...Si tu doit poser plus de code à régler ton contrôle de saisie que le reste du USF, c'est que la méthode est mauvaise. Inutile de réinventer la roue !
FAUX !!! On fait aussi comme on nous l'impose même si ce n'est pas forcément comme ça que l'on aurait aimé procéder...On fait comme on aime !
Bref, le projet a pris une autre tournure. J'ai simplifié, notamment au niveau des dates, et le USF de départ (Création) ne va plus vraiment être le même. Je ne devrais plus avoir de problème de saisie de date car je vais récupérer la donnée dans un autre onglet pour la faire apparaitre ensuite comme les données "Agence"...
Je garde cependant le code de Silkyroad pour d'autres USF ainsi que le bout de code de BOB71AU (sans .Value...).
Par contre, j'aimerai bien que tu me montres galopin01 comment on fait...je préférait force l'utilisateur à rentrer les dates sous la forme JJMMAA
Un grand merci d'ors et déjà à vous tous pour votre aide.
Ps : j'ai lu avec beaucoup d'attention le tuto que tu m'as proposé vba-new mais certaines choses restent encore obscures pour moi... Mais je tâcherai de m'y référer lors de la construction de prochains USF.
Bonne journée.
Amicalement.
Fabrice,
bonjour,
Bon je te l'ai fait un peu à la tronçonneuse sans déclaration de variable ni chichis...
Nota : c'est un peu plus dur avec JJMMAA que avec JJMMAAAA car il faut interprêter le AA;
On peut aussi nuancer le contrôle de saisie selon la date attendue. Si ce sont des dates de prises de Rendez Vous on peut éliminer toute date antérieure ou toute date postérieure à J + 5 ans... mais dans mon exemple on peut saisir toute date entre 1930 et 2030...
Il est fait un contrôle de cohérence simple mais on pourrait faire un truc encore plus chiadé en motivant certaines erreurs, année bissextile, mois d'avril avec 31 jours... etc.
Ici mes messages se limitent à souligner qu'il n'y a que 31 jours dans un mois et 12 mois dans l'année, mais toute saisie invalide est refusée.
A+
Bonjour à tous,
Merci pour le code galopin01... C'est pile-poil ce qu'il me fallait... Je peux te dire que je vais tenter de le mettre en application dans nombre de fichiers chez nous...
La saisie est très simple et on la récupère au bon format. C'est super.
Je vais avancer un peu sur le (nouveau) projet et vous tiendrai au courant.
Merci encore et bonne journée.
Amicalement.
Fabrice,
Hum... j'ai aussi d'autres gateries dans mes cartons !
Regarde voir du coté de la boite d'outil des USF VBA fait un clic droit sur les outils existants et coisi outils complémentaires puis coche le
[b]Microsoft Date ant Time Picker[/:b]...
On arrive aussi à des trucs cools pour le nourrissage de nombreux champs dates (car on peut optimiser la Value par défaut des contrôles suivants en fonction de la saisie du premier.
Par exemple on peut optimiser la date du second à 30 jours ou à deux ans... ainsi on a un rafraichissement du DataFicker pour chaque contrôle.
La limite de ce contrôle est la saisie pour de nombreuses dates imprévisibles : si on veut saisir des dates de naissance par exemple il faut d'abord saisir la date dans l'année en cours puis modifier le millésime...
Il existe d'autres astuces pour ce contrôle.
Mais dans l'ensemble je le trouve assez cool pour des utilisateurs familiarisés avec l'informatique.
Et un usage pas trop intensif quand même !
A+
Bonjour à tous, Forum,
Merci pour tout galopin01. Je vais tester tout ça...
Bon week-end.
Fabrice,
Bonjour à tous, Forum,
Mon projet est pratiquement terminé après de nombreuses "prises de têtes" et changements de dernières minutes. Mais je pense que vous devez connaitre ça, vous qui développez pour d'autres...
Bref, nous sommes arrivés (enfin) à un terrain d'entente et il me manque une seule petite chose sur laquelle je bute depuis pas mal de temp. Dans ce code :
Sub Maj()
Dim Rech_Num As String
Dim Num_Doss As String
Sheets("Détail dossiers").Select
Rech_Num = InputBox("Veuillez saisir le numéro de dossier recherché")
If Rech_Num = "" Then
MsgBox "Vous n'avez pas saisi de NUMERO !!!"
Exit Sub
End If
For Each cell In Range("D4:D5000")
If WorksheetFunction.CountIf(cell, Rech_Num) Then
cell.Activate
End If
Next cell
UsfMaj.Show
Num_Doss = ActiveCell.Value
End Subquand la macro trouve le numéro, elle positionne le curseur dessus (cell.Activate). Je souhaite que, quand la macro ne trouve pas le numéro, elle affiche un "MsgBox" du type "Numéro non trouvé".
J'ai testé beaucoup de choses avec le "Else" mais je n'y suis pas arrivé...
Voilà, promis, juré, craché... Après, je ne vous embête plus avec ce projet...
Merci d'avance et bonne fin de journée.
Fabrice,
ps : j'ai également testé le "Microsoft Date ant Time Picker" de galopin01 et je trouve cela absolument génial... Je vais m'en servir dans mes prochains Usf...
Bonjour fabrice, ça fait longtemps
Pour ton problème, je te conseille d'utiliser la fonction Find (qui correspond à la fonction recherche d'excel) plutôt que de boucler sur un peu moins de 5000 lignes (et ce, même si la valeur est trouvée !).
Je pense que tu aurais presque pu trouvé une solution tout seul en utilisant l'enregistreur de macro.
En effet, tu aurais lancé une recherche de ton numéro de dossier en passant par la fonction recherche d'excel, puis adapté le code généré
Mais bon, on ne t'en veux pas
Sinon voici une solution :
Sub Maj()
Dim Rech_Num As String
Dim Num_Doss As String
Dim trouve As Range
Sheets("Détail dossiers").Select
Rech_Num = InputBox("Veuillez saisir le numéro de dossier recherché")
If Rech_Num = "" Then
MsgBox "Vous n'avez pas saisi de NUMERO !!!"
Exit Sub
End If
Set trouve = Range("D4:D5000").Find(Rech_Num, , xlValues, xlWhole)
If trouve Is Nothing Then MsgBox "Numéro non trouvé", vbInformation: Exit Sub
'For Each cell In Range("D4:D5000")
' If WorksheetFunction.CountIf(cell, Rech_Num) Then
' cell.Activate
' End If
'Next cell
UsfMaj.Show
Num_Doss = trouve.Value
End SubBonjour à tous, forum,
Content de te relire, vba-new...
Je me suis "empêtré" dans cette boucle for each car je n'ai pas voulu changé un code qui fonctionnait bien. J'étais quand même arrivé à lui mettre le message d'erreur quand le n° de dossier n'existait pas mais la macro bouclait sur chaque ligne...
Je suis un fervent adepte des solutions les plus simples et j'ai tout de suite recopié ton code avec la fonction "find". Cependant, j'ai une erreur quand le n° de dossier existe du type : Erreur d'exécution 1004 - Erreur définie par l'application ou par l'objet...
Puis, en cliquant sur débogage, le curseur affiche en surbrillance la ligne "UsfMaj.Show". Je ne sais pas pourquoi. D'autre part, il est important pour moi que, si le n° de dossier existe dans l'onglet "Détail dossiers", le curseur aille se positionner dessus. En effet, je pars de cette position pour copier toutes les infos à la suite...
Voilà, merci en tout cas de ne pas m'en vouloir
Amicalement.
Fabrice,
Re,
Sans fichier, il m'est également difficile de savoirFabrice69 a écrit :Cependant, j'ai une erreur quand le n° de dossier existe du type : Erreur d'exécution 1004 - Erreur définie par l'application ou par l'objet...
Puis, en cliquant sur débogage, le curseur affiche en surbrillance la ligne "UsfMaj.Show". Je ne sais pas pourquoi.
Tu peux par exemple mettre un trouve.Select avant le UsfMaj.Show. Peut-être que c'est de là que vient l'erreur que tu rencontres ? Teste en intégrant le trouve.SelectFabrice69 a écrit :D'autre part, il est important pour moi que, si le n° de dossier existe dans l'onglet "Détail dossiers", le curseur aille se positionner dessus.
A+
Re-,
Effectivement, l'erreur n'apparait plus en rajoutant la ligne trouve.Select.
C'est vraiment super sympa à toi de m'aider...
Si j'abusais
Si oui, où faut-il rajouter cette commande ? J'ai essayé à la suite mais cela ne fonctionne pas.
Merci encore à toi.
Amicalement.
Fabrice,
Salut fabrice,
Si le numéro de dossier n'est pas trouvé, tu ne peux pas mettre le "Sheets("Accueil").Select" après l'Exit Sub étant donné qu'il va quitter la macro avant d'atteindre le "Sheets("Accueil").Select".Fabrice69 a écrit :Si oui, où faut-il rajouter cette commande ? J'ai essayé à la suite mais cela ne fonctionne pas.
Pour écrire sur la même ligne, sépare tes instructions par :
Donc fais plutôt comme ceci :
Sub Maj()
.
.
.
If trouve Is Nothing Then MsgBox "Numéro non trouvé", vbInformation: Sheets("Accueil").Select: Exit Sub
.
.
.
End SubRe-,
Je suis vraiment trop c... J'avais essayé de séparer avec la virgule mais pas avec le "deux points"...
Je teste ça demain matin à la première heure.
Merci beaucoup vba-new.
Amicalement.
Fabrice,
-- Jeu Fév 04, 2010 8:33 am --
Bonjour à tous, Forum,
Ca fonctionne ! Merci à toi, vba-new...
Et merci aussi à tous ceux qui m'ont assisté dans ce projet sur ce fil.
Vraiment super génial ce forum !
Encore merci pour tout.
Amicalement.
Fabrice,
-- Jeu Fév 04, 2010 8:39 am --
Merci !