Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Codes VBA urgent

J

jocelyne

Guest
Bonjour à tous
Merci à Thierry, Dan et Jean-Marie qui ont déjà répondu à mes questions.

Grâce à vos réponses et à tous les fichiers que j'ai pu consulter et télécharger sur le site j'ai avancé un petit peu.

Mais j'ai encore besoin de vos services car je me casque la tête depuis plusieurs jours et nuits et je n'y arrive pas malgré certains exempes que j'aie trouvés mais qui, semble t-il, ne marchent pas.

Mon problème :

J'ai 3 feuilles
1 nommée listes dans laquelle j'ai des listes

1 nommée bdd dans laquelle je souhaiterai, à partir d'une userform et en cliquant sur une zone de liste remplir toutes les informations qui existent dans la 3ème feuille nommé etatcivil.

Dans cette troisième feuille état civil
1) je n'arrive pas à partir d'une userform obtenir une liste déroulante qui reprend les infos de la feuille nommée liste

2) je souhaiterai que dans la case suivi en mois s'inscrive la formule suivante :
si dâte de clôture du dossier est vide alors maintenant - date du contact sinon maintenant moins dâte de clôture.


Je joins un fichier qui je l'espère sera plus explicite.


Merci pour vos réponses.
 

Pièces jointes

  • essai3.zip
    24.3 KB · Affichages: 25
  • essai3.zip
    24.3 KB · Affichages: 21
  • essai3.zip
    24.3 KB · Affichages: 20
@

@+Thierry

Guest
Bonsoir Jocelyne, le Forum

Huum, c'est une erreur de demander "urgent", n'oublie pas, Jocelyne, que nous sommes ici tous et toutes des contributeurs et contributrices bénévols de ce Forum de partage de connaissance, nous intervenons sur notre temps libre.

Une règle ici est d'être patient et persévérant.

Bon ceci dit, je vois que tu as fait quelques progrès depuis ton premier Userform dans l'autre fil où je t'avais donné quelques conseils.

J'ai essayé de parfaire à ta demande, mais je n'ai pas très bien compris l'utilité de la feuille Bdd avec un UserForm2 en plus du premier... J'ai fait donc selon mon instinct, un Userform2 de report de données saisies grace au UserForm1... Tout ceci avec un UserForm d'accueil qui demande de spécifier le choix fait...

Tout irait impec si tu n'avais pas besoin de calculer le nombres de mois entre les deux dates "Date de Contact" et "Date de Clôture"...

Ici je m'adresse plus précisément à mes copains bidouilleurs VBA car je constate une différence de calcul entre :

1) DateDiff, fonction de VBA
2) DateDif, Formule d'Excel

En effet la fonction VBA semble retourner des valeurs un peu inexactes puisque basées strictement sur la différence de mois entre la première date et la seconde.... Exemple :

Date départ => 29/02/2004
Date Arrivée => 01/03/2003

Résulat DateDiff en VBA => 1
Résulat DateDif Formule => 0

On dirait que VBA compte que la date de départ est Février et celle d'arrivée est Mars, donc un Mois... Alors qu'il ne s'est écoulé qu'un seul jour... La Formule Excel DateDif, quant à elle, semble juste... (what is that mess !!!)

Je vous laisse voir, si vous avez des idées !

Ah oui au fait, vu tous ces UserForms, plus les explications etc, je dépasse les 50Ko tolérés, donc je mets le fichier sur mon serveur FTP, et je profite de l'occasion pour tester mon premier GIF en hommage au grand Vériland Maître en la matière !! Clicker sur le GIF pour téléchager la démo !


Ce lien n'existe plus

Bonne découverte
@+Thierry
 
Z

Zon

Guest
Salut,

VBA donne la différence entre 2 dates sans tenir compte du nb de jours . Par contre si je voudrais savoir si cela fait bien un mois effectif comme donne la formule, qqch du genre Int( DateDiff("d", DateDeb, DateFin)/30) si on considére qu'un mois c'est 30 jours...

A+++
 
J

jocelyne

Guest
Bonjour à tous et grand merci à Thierry

J'ai pu télécharger le fichier et ce que tu m'as envoyé va m'obliger à repenser mon projet. Mais pourquoi pas ? C(est peut-être pas mal non plus de le voir comme ça.

Le suivi en mois ne fonctionne pas très bien dans la mesure où la date de clôture n'est pas remplie systématiquement et là ça coince puisqu'il exige une date ici.

Mais bon je vais déjà ronger mon os avec ce nouveau formulaire et voir comment je vais m'adapter.

En tout cas merci encore. Il y a à peine 15 jours je n'étais jamais rentrée dans VBA.

C'est difficile et hier soir à minuit j'ai cru que j'allais en vomir tellement je n'en pouvais plus.
Tu me redonnes le moral et surtout l'envie de continuer.

Il me manque trop de bases et si l'un de vous connaît sur Nîmes, un organisme de formation ou une personne qui forme à VBA, je prends.
Quel livre (le plus simple possible pour débuter) car j'en ai acheté beaucoup et le réultat a été mon premier formulaire. Thierry, tu vois de quoi je parle...

Merci à tous, bonne continuation et sûrement à bientôt.

Au fait, Thierry, excuse-moi pour le urgent mais hier j'ai pété un plomb.
 
@

@+Thierry

Guest
Bonjour Jocelyne, Pat5, Zon et le Forum

Pour Pat5... héhéhé et oui on va finir par arriver à faire une page sur ce serveur, en plus je dois avoir plusieurs fois 50Mo sur plusieurs abonnements depuis le temps !)

Pour Zon oui bien sûr j'avais pensé à retourner le nombre de jours avec DateDiff, mais alors il faudrait retourner un calcul à travers un algo qui ferait l'évaluation du nombre de mois à 30 J / 31 J plus février à 28 J (voire 29!), entre les deux spécifiées........ Sacrée usine à gaz encore !

Je me suis aussi orienté pour abandonner le DateDiff VBA pour une WorksheetFunction
NombreMois = Application.WorksheetFunction.DateDif(TextBoxDateDeb, TextBoxDateFin, "m")
ou encore
NombreMois = Application.WorksheetFunction.DateDif(DateDeb, DateFin, "m")
Mais néni, çà passe pas !

Enfin finalement j'ai trouvé !! grace à Myrna Larson, donc voici la Version 01.00 qui indique bien le nombre de mois !!!

Ce lien n'existe plus

Pour Jocelyne L'éternelle difficulté est toujours cet énorme faussé entre les utilisateurs et les développeurs, VBA peut pratiquement tout faire, l'important est de savoir exactement ce que l'on veut obtenir et le synopsis du programme, avant de le développer !

L'idéal pour que tu partes sur de bonnes bases est de prendre une feuille de papier et de mettre noir sur blanc ton projet, car pour moi, calculer la différence de mois entre deux dates, impliquait irrémédiablement que nous avions bien ces deux dates dans le Userform ! Maintenant tu me dis que non ! lol

Bon c'est pas grave je suis encore, une fois de plus, parti dans les méandres des contours et autres portes dérobée de VBA pour arriver à saisir sans tout saisir et pouvoir sortir du UserForm... Je fais même écrire par VBA la formule dans les cellules "Nombre de Mois", "Nombre de Jours" en attente que la date de Cloture soit connue et saisie dans la feuille...

Ce qui est certain c'est que çà complique d'autant plus le code, et bien certainement si je connaissais le but réél de ce qui doit être saisi en premier temps puis ajouté en second temps, le UserForm serait bien plus simple (et fiable aussi).

Pour ce qui est des bouquins...

Je peux te conseiller "Programmation Excel 2000" chez Sybex / collection "Pour Les Nuls" du GRAND John WalkenBach... C'est très bien fait et contrairement à pas mal d'ouvrages qui sont à 75% Excel et le reste un peu VBA, celui-ci est 100% VBA (400 pages) tout en restant accessible aux débutants/débutantes.
Numéro d'édition : ISBN 2-7361-3416-8. version FR déposée en 2000 (environ 25 €)

Extrait "Pour les vrais programmeurs, une journée de huit heures n'est pas une journée..."
lol

Bon Courage, bonne programmation et Bon Dimanche !
@+Thierry
 
@

@+Thierry

Guest
Bonjour Zon, Pat5, Jocelyne, Le Forum

Tiens, comme c'est bizarre, dois-je définitivement interpréter que les Fils dont le sujet contient Urgent finissent en queue de poisson ? ou que simplement Jocelyne était tellement pressée/stressée qu'elle en a oublié de noter l'url du Forum...

Enfin ce n'est pas grave on sait maintenant comment compter le mois entre deux dates avec "DateDiff"


Bonne journée à tous et à toutes
@+Thierry
 
J

jocelyne

Guest
Bonjour Thierry et bonjour le forum !

Excusez-moi pour le silence radio.
La grippe m'a tenu au lit avec de la fièvre pendant 3 jours et après il a fallu retourner au boulot mettre à jour le retard.

Je viens vous faire un petit coucou !

Je vais récupérer vos données et je vous dirai si ça fonctionne.

Thierry ce que tu m'as envoyé est super.
J'ai commencé à l'adapter à mon projet mais ce qui me semble étonnant est que vba refuse de transférer les données au bout d'un certain nombre de colonnes (12 pour être exact).
Est-ce normal ?

A bientôt
jocelyne
 
@

@+Thierry

Guest
Bonjour Jocelyne, le Fil, le Forum

Entre deux nettoyages d'Outllook avec tous ces messages de "MyDoom", j'ai regardé un peu ta dernière question...

D'abord je suis heureux que tu soies revenue et que tu ailles mieux, car il est arrivé si souvent (trop) qu'après des heures d'effort le fil reste sans suite, sans plus aucune nouvelle de l'intervenant(e)...

Pour tes Douzes Colonnes... Je suppose que l'on parle du UserForm2 de ma démo pour faire un Report de Données vers la Feuille "Bdd" avec une sélection des Items de la ListBox1 laquelle est alimentée par la méthode RowSource sur la Feuille "etatcivil"... Cette ListBox étant inistialisée en multi-colonnes avec la Propriété "ColumnCount"...

Ma première réponse classique serait de te copier coller l'aide comme suit :
La définition de la propriété ColumnCount sur 0 affiche zéro colonne et la définition sur -1 affiche toutes les colonnes disponibles. Pour une source de données indépendante, il y a une limite de 10 colonnes (0 à 9).

Mais heureusement pour toi, car il y a un Mais justement cette Listbox est intialisée avec une source de donnée dépendante par la propriété "RowSource" donc tu es sauvée !

Ton problème vient probablement de la synchronisation des différentes instructions dans le Private Module de ce UserForm2...


Changemements impératifs pour augmenter le nombre de colonnes de plus 3

Exemple de 11 on passe à 14 colonnes : bien entendu, on a, auparavant, augmenté les données Sources sur la feuilles "etatcivil" de la Colonne "A" à la Colonne "O" inclusive (soit 3 colonnes de plus), puis on a rajouté trois Labels sur le "UserForm2", nommés respectivement "Lab10", "Lab11", "Lab12"


ANCIENNE INITIALISATION :
With Me.ListBox1
.ColumnCount = 11
.ColumnWidths = "30; 0;0;0;0;0;0;0;0;0;0".RowSource = "etatcivil!B8:L" & L
End With

NOUVELLE INITIALISATION :
With Me.ListBox1
.ColumnCount = 14 '<<<<<<<<<<< Nombre de Colonne dans la ListBox
.ColumnWidths = "30; 0;0;0;0;0;0;0;0;0;0;0;0;0" 'On ne montre que la première
.RowSource = "etatcivil!B8:O" & L 'Méthode RowSource avec plage dynamique
End With
End Sub

Il est très important de comprendre qu'une ListBox "Compte" les colonnes de 0 à 13, soit 14 colonnes Et NON : de 1 à 14.


Ensuite les modifications sont plus simples

ANCIENNE ACTION CLICK LISTBOX :
Private Sub ListBox1_Click() 'Mise à jour des labels à chaque click
With Me
.Lab01 = .ListBox1.Column(1)
.Lab02 = .ListBox1.Column(2)
.Lab03 = Format(.ListBox1.Column(3), "DD/MM/YYYY")
.Lab04 = .ListBox1.Column(4)
.Lab05 = .ListBox1.Column(6)
.Lab06 = Format(.ListBox1.Column(7), "DD/MM/YYYY")
.Lab07 = .ListBox1.Column(8)
.Lab08 = .ListBox1.Column(9)
.Lab09 = .ListBox1.Column(10)
End With
End Sub

NOUVELLE ACTION CLICK LISTBOX :
Private Sub ListBox1_Click()
With Me
.Lab01 = .ListBox1.Column(1)
.Lab02 = .ListBox1.Column(2)
.Lab03 = Format(.ListBox1.Column(3), "DD/MM/YYYY")
.Lab04 = .ListBox1.Column(4)
.Lab05 = .ListBox1.Column(6)
.Lab06 = Format(.ListBox1.Column(7), "DD/MM/YYYY")
.Lab07 = .ListBox1.Column(8)
.Lab08 = .ListBox1.Column(9)
.Lab09 = .ListBox1.Column(10)
.Lab10 = .ListBox1.Column(11) '<<<<< en PLus ;-)
.Lab11 = .ListBox1.Column(12)
.Lab12 = .ListBox1.Column(13)'<<<<< représente la 14em colonne
End With
End Sub


Et, bien ententu, Idem pour le CommandButton1 :

ANCIENNE ACTION CLICK COMMANDBUTTON :
With Sheets("Bdd")
.Range("A" & L).Value = ListBox1' <<<<c'est la colonne "Zéro"
.Range("B" & L).Value = Lab01
.Range("C" & L).Value = Lab02
.Range("D" & L).Value = CDate(Lab03)
.Range("E" & L).Value = Lab04
.Range("F" & L).Value = Lab05
.Range("G" & L).Value = CDate(Lab06)
.Range("H" & L).Value = Me.TextBoxPrenom
.Range("I" & L).Value = Lab07
.Range("J" & L).Value = Lab08
.Range("K" & L).Value = Lab09
End With


NOUVELLE ACTION CLICK COMMANDBUTTON :
With Sheets("Bdd")
.Range("A" & L).Value = ListBox1' <<<<c'est la colonne "Zéro"
.Range("B" & L).Value = Lab01
.Range("C" & L).Value = Lab02
.Range("D" & L).Value = CDate(Lab03)
.Range("E" & L).Value = Lab04
.Range("F" & L).Value = Lab05
.Range("G" & L).Value = CDate(Lab06)
.Range("H" & L).Value = Me.TextBoxPrenom
.Range("I" & L).Value = Lab07
.Range("J" & L).Value = Lab08
.Range("K" & L).Value = Lab09
.Range("L" & L).Value = Lab10'<<<<< en PLus ;-)
.Range("M" & L).Value = Lab11
.Range("N" & L).Value = Lab12
End With

Voilà, je pense que tu devrais y arriver.

Bon Week End à tous et toute
@+Thierry
 
J

jocelyne

Guest
Thierry t'es vraiment génial
Lorsque j'ai parcouru très vite tes nouvelles instructions, j'ai une bouffée de chaleur qui m'a envahie. Puis, calmement, dans un deuxième temps, j'ai essayé de comprendre et je crois que j'ai compris ce qu'il faut faire.

J'essaye et je te donne des nouvelles

A bientôt

Jocelyne
 
J

jocelyne

Guest
Encore moi !

Ca marche très bien. Toutes mes données de la feuille "etatcivil" sont bien récupérées dans la feuille "bdd".

Je rencontre un nouveau problème.

Mon 2ème formulaire est grand puisqu'après avoir récupére les infos de la feuille "etatcivil" dans bdd, je rajoute des données à saisir dans mon userform2. Seulement voilà, lorsque je l'active, il est trop grand pour ma feuille Excel et je n'ai pas accés à toutes les textbox.

Existe t-il un moyen pour le faire défiler dans Excel ?
Merci

@+

PS : je ne connais pas la signification des signes (vus souvent sur ce forum"(- "etc... ) car c'est la première fois que je vais sur un forum et j'avoue que je trouve ce partage de connaissances et de convivialité magnifique.
Donc si vous pouviez me dire à quoi ils correspondent. Ca aiderait à ma compréhension.
@+, c'est bon, ça j'ai compris, les autres pas vraiment.
 
@

@+Thierry

Guest
Salut Jocelyne, le Fil, le Forum

Pour ton problème de taille de UserForm, je pense tout simplement en ayant travaillé sur ton modèle, que tu es un peu atteinte de "Gigantisme" ;-)

En fait, tu sais les applis les plus sobres sont les meilleures, et en général une Police de Caractère en Tahoma ou Arial 8 ou 9, éventuellement en Italique ou Gras mais sans abuser... En appliquant le taille des Contrôles à ce format de Police on peut en mettre pas mal...

Maintenant tu as aussi depuis VBE la possibilité d'ajouter une barre d'outils "UserForm" (Depuis Menu / Affichage / Barre d'Outils) et tu as un moyen d'appliquer un Zoom à tous les Contrôles...

Enfin pour ta question de Barre de Défilement oui c'est tout à fait possible et je t'invite voir une démo dans un fil tout neuf afin d'en faire profiter un peu les copins car ce n'est plus le sujet de ce Fil.

=> Lien supprimé

Pour ta dernière question, je te conseille de regarder cette page "les codes Smiley"

Donc à bientôt dans l'autre l'autre fil ;-) oups.....

Bon Week End
@+Thierry
 
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…