[VBA] Besoin d'aide pour la création d'une macro [Résolu]

villette54

XLDnaute Junior
Bonjour,

Je suis débutant en VBA, et j'ai dans le cadre de mon travail, besoin d'utiliser VBA de façon un peu plus avancée que ce que je suis capable de faire.

Il s'agit d'un fichier pour lequel je dois extraire des infos d'une "base de données" si je puis dire, et en ajouter. J'ai pour ce faire créer 4 boutons, qui doivent chacun remplir une fonction. Seulement je suis incapable de transposer ce que je souhaite dans VBA. (Toutes les explications de mes besoins se trouve sur mon document)

Je cherche donc quelqu'un qui pourrait m'aider à créer ces macros, ou au moins me mettre sur la piste parce-que actuellement, malgré tous les tutos que je consulte je suis dans le flou total.

Merci d'avance pour votre aide.
 

Pièces jointes

  • Test Suivi Cotopo.xlsm
    113.7 KB · Affichages: 147
Dernière édition:

villette54

XLDnaute Junior
Re : [VBA] Besoin d'aide pour la création d'une macro

Huuum. Merci pour toutes ces infos

J'espère pouvoir progresser assez rapidement aussi, un an c'est "relativement" court.
Après en matière de programmation mes connaissances sont légères (de vieux reste de mes 3-4 mois de fac d'informatique il y a quelques années). Je ne devrais pas avoir de mal à trouver de gens pour m'expliquer un peu les bases, et puis les cours disponibles en ligne ce n'est pas ce qui manquent alors avec un peu de volonté...

Pour en revenir au fichier, c'est beaucoup plus lisible comme ça mais la recherche par date ne fonctionne plus du coup.

Peux-tu y jeter un oeil ? Merci d'avance.

Chalet, merci pour l'info!
 

Tirou

XLDnaute Occasionnel
Re : [VBA] Besoin d'aide pour la création d'une macro

Voilà, et dsl d'avoir fait le taf à moitié...

J'édit mes messages précédents pour retirer les pièces jointes inutiles et libérer l'espace du forum.

Edit : Je suis un boulet, j'ai viré la version avec le TCD, et plus aucune version chez moi ... >_<'
 

Pièces jointes

  • Test Suivi Cotopo v.2.xlsm
    125.4 KB · Affichages: 47
  • Test Suivi Cotopo v.2.xlsm
    125.4 KB · Affichages: 50
  • Test Suivi Cotopo v.2.xlsm
    125.4 KB · Affichages: 52
Dernière édition:

villette54

XLDnaute Junior
Re : [VBA] Besoin d'aide pour la création d'une macro

Salut Tirou,

Pas de soucis, c'est toi qui a tout fait de toute façon...

Puis-je te demander encore une petite amélioration ? Actuellement quand on sélectionne "Date" le userform affiche tous les sujets (ce qui en plus prend un certain temps...) n'est-il pas possible qu'il recherche uniquement lorsqu'une date est saisie ?

PS : Je t'ai remis en pièce jointe la version avec les TCD, si jamais tu veux garder une trace pour le réutiliser plus tard.
 

Pièces jointes

  • Suivi COTOPO - v.1 TCD.xlsm
    60.6 KB · Affichages: 43

Tirou

XLDnaute Occasionnel
Re : [VBA] Besoin d'aide pour la création d'une macro

Voilà 2 possibilités pour optimiser ton affaire :
1) on n'actualise le fichier que lorsque l'utilisateur le demande.Regarde la pièce jointe Test Suivi Cotopo v.2 - bouton déclencheur.xlsm
2) on charge toutes les données dans un tableau fictif pour éviter de trop faire d'accès à la feuille (c'est ça qui ralenti vachement en fait) (ma méthode préférée :) ) Regarde la pièce jointe Test Suivi Cotopo v.2 - Acces limités.xlsm

Dans tous les cas, j'ai rajouté la condition que si la textbox1 est vide, on ne charge rien.

Les deux méthodes proposées sont bien sûr combinables si tu as vraiment beaucoup de données, mais si tel est le cas, l'extraction complète des données prendra pas mal de place, et il vaudra mieux passer par d'autres méthodes, comme find (si besoin, je te retrouverai la syntaxe)

Pendant qu'on y est, il faudrait voir la gestion des doublons dans les entrées utilisateurs. Comment veux-tu les gérer? On les acceptes? (auquel cas j'ai presque fini) si oui, on affiche plusieurs fois le sujet dans la liste ou on laisse les entrées multiples? ou on les vire? On trie les entrées par ordre chronologique?
 

Pièces jointes

  • Test Suivi Cotopo v.2 - Acces limités.xlsm
    123.1 KB · Affichages: 64
  • Test Suivi Cotopo v.2 - Acces limités.xlsm
    123.1 KB · Affichages: 67
Dernière édition:

villette54

XLDnaute Junior
Re : [VBA] Besoin d'aide pour la création d'une macro

Huum, je spécule peut-être vu que je n'y connais pas grand chose mais... N'est-il pas possible de lancer la recherche uniquement quand la textbox atteint un certain nombre de caractère ? (A déterminer puisque j'ai constater que certaine date s'écrivait 8/8/2013 et non pas 08/08/2013 mais peut-importe)

De même en parlant des dates, est-il possible de forcer le format JJ/MM/AAAA ? Actuellement les dates se mettent parfois au format américain ce qui est dérangeant.

Au niveau de la quantité de données, tu as vu le tableau toi même. Dis toi qu'en moyenne il y a 7-8 points par date et 4-5 dates pour un même point (c'est une moyenne assez haute mais je préfère être prudent).
J'ai mis 500 points pour voir large encore une fois, je ne sais même si on les atteindra un jour.
Du coup à toi de voir quelle méthode est la plus appropriée, je n'ai pas vraiment de préférence.
 

Tirou

XLDnaute Occasionnel
Re : [VBA] Besoin d'aide pour la création d'une macro

J'ai rajouté ton critère de longueur de chaine (ça m'évite le coup problématique de l'expression régulière trouvée avec des caractères en surplus)

Par contre, je n'ai pas constaté de date qui se rajoute en 8/8/2013 ni de format à l'américaine. Peux-tu m'indique la marche que tu as suivie pour arriver à ces bugs ?

En terme de "beaucoup de données", je pensais à beaucoup plus, du type devoir faire un tableau 500 colonnes par 50 000 lignes ... ça devrait aller pour ton cas ^^

A demain ^^
 

Pièces jointes

  • Test Suivi Cotopo v.2 - Acces limités.xlsm
    127.2 KB · Affichages: 38
  • Test Suivi Cotopo v.2 - Acces limités.xlsm
    127.2 KB · Affichages: 40
  • Test Suivi Cotopo v.2 - Acces limités.xlsm
    127.2 KB · Affichages: 35
Dernière édition:

villette54

XLDnaute Junior
Re : [VBA] Besoin d'aide pour la création d'une macro

Salut Tirou,

Effectivement en termes de quantité de données j'ai de la marge!

Pour ce qui est du "bug" d'affichage des dates, cela est peut-être du au fait que je bosse dans une boite américaine (donc Excel en anglais), et que ce format de date est celui par défaut sur nos PC. En revanche étant donné que personne n'utilise ce format, je met toujours un format plus adapté sur mes dates (c'est pour cela que sur mon fichier le mois est écris en lettre).

Je n'ai donc pas fais de manœuvre particulière pour arriver à ce problème, une simple recherche.
Date format américain.jpg
 

Tirou

XLDnaute Occasionnel
Re : [VBA] Besoin d'aide pour la création d'une macro

Voilà, j'ai forcé l'affichage selon le format de ton premier message.

Par contre, du coup, est-ce qu'il faut faire de même dans la base de données? dans les champs de saisie? (du type saisir la date par 3 minies listes)
 

Pièces jointes

  • Test Suivi Cotopo v.2 - Acces limités.xlsm
    130.8 KB · Affichages: 38
  • Test Suivi Cotopo v.2 - Acces limités.xlsm
    130.8 KB · Affichages: 34
  • Test Suivi Cotopo v.2 - Acces limités.xlsm
    130.8 KB · Affichages: 41

villette54

XLDnaute Junior
Re : [VBA] Besoin d'aide pour la création d'une macro

Ahh, merci beaucoup c'est bien plus lisible :)

Euh non ce n'est pas la peine de conditionner la base de données, le but de l'Userform est vraiment de ne plus avoir à consulter l'onglet "date" !

Par contre, sur cette version (je n'avais pas testé sur celle d'avant) le bouton "faire un ajout" ne fonctionne plus.
J'ai cette ligne qui se met en erreur
Code:
If RegExDate.Test(TextBox1) And Len(TextBox1) = 10 Then
Peut importe que je tape une date avec le bon, ou le mauvais nombre de caractère, même si je pars d'un sujet j'ai la même erreur.

Une idée ?
 

Tirou

XLDnaute Occasionnel
Re : [VBA] Besoin d'aide pour la création d'une macro

Rectifié : Je n'avais pas pensé que lorsque l'on récupère les données de l'userform2 dans les textbox de l'userform1, cela déclenchait les macros valables à la modification desdites textbox. Du coup, les expressions régulières n'étaient pas encore déclarée.

J'ai rajouté quelques commentaires pour t'aider à t'y plonger. N'hésites pas à me dire si des passages te sont obscures.
 

Pièces jointes

  • Test Suivi Cotopo v.2 - Acces limités.xlsm
    128.7 KB · Affichages: 35
  • Test Suivi Cotopo v.2 - Acces limités.xlsm
    128.7 KB · Affichages: 34
  • Test Suivi Cotopo v.2 - Acces limités.xlsm
    128.7 KB · Affichages: 33

villette54

XLDnaute Junior
Re : [VBA] Besoin d'aide pour la création d'une macro

Merci beaucoup.

Effectivement les commentaires m'aident à me repérer.
Quand je lis le code en soit, je ne trouve rien de sorcier
hormis, quelques syntaxes du genre :
Code:
If SujetCherche = Sujet Then 
                .Cells(.Cells(1048000, col).End(xlUp).Row + 1, col).Value = TextBox1
qui relève plus de chinois qu'autre chose pour moi, du moins pour le moment.

Mais je ne suis pas encore habitué à utiliser tel ou tel expression pour tel ou tel besoin.

Pour en revenir au fichier, il y quelque chose de bizarre. Lors de l'ajout d'une nouvelle date pour un sujet, après avoir cliqué sur "Valider" l'USF ne se ferme pas mais rappel l'autre (hors je ne vois pas ça dans le code).

Est-il possible de rajouter quelques msgbox ?
Du genre : la date "xx/xx/xxxx" à été correctement ajouté au sujet "xx-xxx"
Voir même : Erreur, cette date existe déjà pour ce N° de sujet
Ou encore, vu que la macro ajoute le N° de sujet lorsque celui-ci n'existe pas (ce qui est très bien) une msgbox "le sujet n° xx-xxx a été créé"

Qu'en penses-tu ?
 

Tirou

XLDnaute Occasionnel
Re : [VBA] Besoin d'aide pour la création d'une macro

Code:
If SujetCherche = Sujet Then 
                .Cells(.Cells(1048000, col).End(xlUp).Row + 1, col).Value = TextBox1
qui relève plus de chinois qu'autre chose pour moi, du moins pour le moment.

Alors en fait, pour comprendre, il faut aller chercher la ligne un peu plus haut, celle avec le With thisworkbook.sheets("jenesaisplus")
La synthaxe with permet 2 choses :
1) de simplifier l'écriture, car à chaque fois que l'on va écrire .cells ou .range ou .quelquechose, c'est comme si tu avais déjà d'écrit ce que tu as spécifié dans le with.
2) il optimise, car au lieu de repartir de l'objet workbook, d'y prendre la feuille désignée pour enfin prendre la cellule, il va garder "sous la main" ce que tu as spécifié dans le with, et ainsi accéder plus rapidement à ce que tu cherches.

Une autre possibilité est de faire set variableFeuille = thisworkbook.sheets("jenesaisplus") et après de faire variableFeuille.cells(1,3), mais je crois que ça prend plus de mémoire vive, car cela déclare une variable où toutes les propriétés vont être stockées (à confirmer)



Le coup du Cellule.end(xlup).row permet de "se placer" à la cellule désignée (ici la dernière de la feuille à la colonne col) et de remonter (xlup) jusqu'à la première ligne non vide et d'enfin en prendre le numéro de ligne(row).
C'est un aspect du langage objet : tu prend un objet, et tu lui applique une méthode ou tu va accéder à une de ses propriétés (par le . entre les instructions)

Pour bien voir comment marche le end, tu peux le faire au clavier dans ta feuille excel, avec les flèches et en maintenant la touche control.


Pour en revenir au fichier, il y quelque chose de bizarre. Lors de l'ajout d'une nouvelle date pour un sujet, après avoir cliqué sur "Valider" l'USF ne se ferme pas mais rappel l'autre (hors je ne vois pas ça dans le code).
Mmm, pour moi l'userform1 se ferme, ce qui re-sélectionne l'userform2. C'est fait par la commande Unload Me. (Me renvoi à l'userform dans lequel est écrit cette commande)

Est-il possible de rajouter quelques msgbox ?
Du genre : la date "xx/xx/xxxx" à été correctement ajouté au sujet "xx-xxx"
Voir même : Erreur, cette date existe déjà pour ce N° de sujet
Ou encore, vu que la macro ajoute le N° de sujet lorsque celui-ci n'existe pas (ce qui est très bien) une msgbox "le sujet n° xx-xxx a été créé"

A tes désirs :)
 

Pièces jointes

  • Test Suivi Cotopo v.2 - Acces limités.xlsm
    134.4 KB · Affichages: 39
  • Test Suivi Cotopo v.2 - Acces limités.xlsm
    134.4 KB · Affichages: 39
  • Test Suivi Cotopo v.2 - Acces limités.xlsm
    134.4 KB · Affichages: 42
Dernière édition:

villette54

XLDnaute Junior
Re : [VBA] Besoin d'aide pour la création d'une macro

Huuum ok, je vois merci.
Mais alors le 1048000 représente quoi au juste ? Un genre d'identifiant pour la cellule ?
Et si c'est ça comment l'obtient-on ?

Ouais c'est bien ce que j'avais vu dans le code, la commande "Unload me" est censée fermer l'USF.
Hors moi lorsque je valide, l'USF1 est simplement relégué au second plan.
Validation date.jpg
(Voilà ce que j'ai à l'écran après avoir validé l'ajout d'une nouvelle date)

Pour les msgbox en les voyant je me dis que j'aurais été capable de le faire moi-même, mais probablement pas de les placer.
 

Tirou

XLDnaute Occasionnel
Re : [VBA] Besoin d'aide pour la création d'une macro

Bon, normalement, il s'agit d'un bug...

Je te propose de jouer un peu : Voici une commande qui devrait pouvoir y remédier
Code:
Me.Hide

Essayes de l'implémenter, je te donne ma version avec demain :)

Le 1048000 correspond à la dernière ligne (à quelques milliers près) qu'excel est capable de gérer. Pour les versions 2007 et antérieures, c'était 65500.
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
314 628
Messages
2 111 337
Membres
111 105
dernier inscrit
Joffrette