Macro VBA pour appli

C@thy

XLDnaute Barbatruc
Bonjour à toutes et à tous,

suite aux conseils de Gaël, que je salue au passage, je me suis rendue compte que mon appli avait besoin de macros.

En effet, jusqu'à présent je copie (à la mimine) les valeurs à partir d'un classeur données_dossiers dans lequel j'ai des colonnes calculées (rajoutées en vert) vers un classeur tableau de bord qui exploite ces données.

le nombre très important de lignes complique la chose, je dois empêcher le recalcul automatique sinon c'est la galère, quand je rajoute des lignes je dois recopier les formules vers le bas etc...

Gaël m'a indiqé qu'il serait plus rapide (en termes de temps d'exécution) que mes tableaux de bord soient faits par macro.

Je vous livre un extrait de mon tableau de bord pour voir si cela vous semble possible.
Cet extrait a été réalisé en fonction d'une période déterminée (j'ai fait un filtre).
Voici le bébé.

Merci de me dire ce que vous en pensez, et si on peut l'aider à grandir (en sagesse!!!).

Bisous et bonne journée

C@thy
 

Pièces jointes

  • tdb.zip
    131.2 KB · Affichages: 90
  • tdb.zip
    131.2 KB · Affichages: 77
  • tdb.zip
    131.2 KB · Affichages: 73

Gael

XLDnaute Barbatruc
Re : Macro VBA pour appli

Bonsoir Cathy, Bruno,

La procédure de Bruno est beaucoup plus rapide si l'on enlève la mise à jour écran et le calcul automatique.

Pour le problème des heures et dates, j'ai effectivement constaté cette erreur mais elle ne se produit pas si l'on enlève le formatage des données dans le fichier d'origine. Si on met la colonne AB en format nombre ou standard, il n'y aura pas d'erreur à l'arrivée.

espérant vous avoir aidés ;)

@+

Gael
 

C@thy

XLDnaute Barbatruc
Re : Macro VBA pour appli

Et comment que tu nous a aidés.

Effectivement j'avais rajouté
Application.ScreenUpdating = False (et True à la fin) pour que ça aille plus vite.

En principe je n'ai pas le droit de toucher au fichier d'origine, mais je vais le faire quand même!!!
(c'est mon côté rebelle qui reprend le dessus... chassez le touriste, il revient au bungalow!!!)

C'est bizarre tout de même, malgré le format [h]:mm:ss il met quand même une date quand c'est > à 24h!!!
grrrrr y m'énerve les nerfs!!!

Merci Gaël,
Bisous

C@thy
 
Dernière édition:

Gael

XLDnaute Barbatruc
Re : Macro VBA pour appli

Cathy,

Ce 'est pas la peine de modifier le fichier d'origine. une fois ouvert, tu sélectionnes tout et tu appliques le format standard (en VBA nien sûr) puis la macro s'exécute.

Comme le fichier d'arrivée est déjà formaté, les formats s'appliquent normalement, il n'y a plus de formatage à faire.

En fin de procédure on ferme le fichier origine sans sauvegarde.

@+

Gael
 

Gael

XLDnaute Barbatruc
Re : Macro VBA pour appli

Re,

Exemple dans la macro:

Code:
...
FicBdD = "donnees_dossiers.xls" ' Fichier contenant la BdD
  
  [COLOR=navy]Workbooks.Open VPath & "\" & FicBdD
  Sheets("Interactions").Cells.NumberFormat = "General"
  Sheets("Incidents").Cells.NumberFormat = "General"[/COLOR]
...
 
Err_Proc:
[COLOR=navy]Workbooks(FicBdD).Close SaveChanges:=False[/COLOR]
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
End Sub

Par ailleurs, si les colonnes des feuilles de destination sont bien formatées, le clearcontents n'efface pas les formats, et il n'est pas utile de prévoir de formatage particulier dans la macro, la copie de données ne supprime pas non plus les formats.

Je n'ai pas trouvé d'autre solution que d'ouvrir le fichier, mais peut-être Bruno proposera-t-il une solution plus élégante en se servant d'ADO.

@+

Gael
 
C

Compte Supprimé 979

Guest
Re : Macro VBA pour appli

Salut les Z'amis :D

C@thy, je suis vraiment navré, mais pas de soluce en ADO concernant le format, ce n'est pas possible :eek:

Dans ton cas le seul avantage de l'ADO est donc que tu peux filtrer plus "facilement" les enregistrements, quoique :rolleyes:

Pour info, j'ai essayé également via transaction OLEDB via le Provider Microsoft.Jet.OLEDB.4.0, mais même résultat :(

Pffft c pas possible ce Crosoft y fait jamais comme on voudrait que ça fonctionne :cool:

Peut-être un mix avec la solution de Gaël en enregistrant le classeur sous un autre nom, le fichier ne sera que temporaire pour l'import !?

Un mix, ça m'a l'air pas mal du tout :D
Quoi de mieux qu'un travail d'équipe
yaisse2.gif


Voir fichier joint avec tout le code + petit bonus :p

A+
 

Pièces jointes

  • indicateurs-tdb_V1.1.zip
    138.5 KB · Affichages: 19
Dernière modification par un modérateur:

Gael

XLDnaute Barbatruc
Re : Macro VBA pour appli

Bonsoir Bruno, Cathy,

Bruno, s'il n'y a pas de possibilité avec ADO, la solution que j'ai proposé marche très bien:

Une fois le fichier ouvert, on applique le format standard aux 2 feuilles et comme ADO travaille sur le fichier en mémoire, la copie se fait sans erreur.

A la fin on ferme le fichier sans enregistrer et le fichier original est conservé.

Sinon, j'avais aussi pensé à une solution avec une requête MSQuery, mais ADO fonctionne vraiment très bien.

@+

Gael
 
C

Compte Supprimé 979

Guest
Re : Macro VBA pour appli

Salut Gael,

Je ne mets pas en doute ta solution, bien loin de moi cette idée ;)

Bruno, s'il n'y a pas de possibilité avec ADO, la solution que j'ai proposé marche très bien: Une fois le fichier ouvert, on applique le format standard aux 2 feuilles et comme ADO travaille sur le fichier en mémoire, la copie se fait sans erreur.
C'est là que je ne comprends pas :confused:

Car normalement ADO sert à travailler sur des fichiers fermés.
Logiquement si tu ouvres le fichier, que tu appliques le format nombre 'Standard"
Le fichier ouvert n'est pas encore enregistré, donc les modifs ne devraient pas l'être non plus !?

Va falloir que je creuse :D

A+
 

Gael

XLDnaute Barbatruc
Re : Macro VBA pour appli

Re,

En fait, je me suis mal expliqué. J'ai repris ta dernière procédure et enlevé les instructions de création du fichier temporaire et tout fonctionne correctement. ADO utilise bien le fichier ouvert et modifié.

Seule chose, avec ta méthode Getobject..., je ne sais pas fermer le fichier sans sauvegarde Wbk.close savechanges:=false :confused: mais je retiens aussi cette méthode d'ouverture, décidemment, j'ai appris pas mal de choses dans ce Fil.:)

@+

Gael
 
C

Compte Supprimé 979

Guest
Re : Macro VBA pour appli

Re,

Peux-tu me dire le temps que ton code mets pour faire la mise à jour ?

Le miens 2 secondes top chrono :D

Avec la méthode GetObject, il suffit simplement de mettre False au bout
Code:
Wbk.Close False

A+
 

Gael

XLDnaute Barbatruc
Re : Macro VBA pour appli

Re,

Pour moi, cela ne me pose pas de problème métaphysique, c'est comme si tu modifies manuellement un fichier à l'écran, les modifs sont bien effectives même si le fichier n'est pas enregistré.

Je suppose que ADO doit récupérer le fichier pour travailler, mais que s'il est ouvert, il se connecte directement sur le fichier ouvert, comme une liaison ou une requête Query :confused:

@+

Gael
 
C

Compte Supprimé 979

Guest
Re : Macro VBA pour appli

Re,

Oui effectivement j'ai fait le test, ça marche nickel fichier ouvert
king.gif


Bon et bien notre chère C@thy n'aura que l'ambarra du choix :D

A tester sur de vrai gros fichier :p

Gael, je te souhaite une excellente fin de soirée
 

Gael

XLDnaute Barbatruc
Re : Macro VBA pour appli

Re,

1 seconde seulement, mais j'ai rajouté le calcul manuel en début de proc. ceci étant, la procédure est un petit peu plus simple.

Ci-joint ton exemple modifié.

@+

Gael
 

Pièces jointes

  • indicateurs-tdb_V1.2.xls
    144 KB · Affichages: 49

Discussions similaires