VBA, création d'une macro de mise à jour

Fermé
Utilisateur anonyme - Modifié par popeyeM le 21/04/2010 à 17:05
 Utilisateur anonyme - 27 avril 2010 à 11:11
Bonjour à tous, au forum,

Alors voila, ça fait pas mal de temps que je suis les forums pour trouver des solutions à de menus problèmes sous excel ou autre. Cela à tout le temps été efficace, en cherchant on trouve quasiment tout le temps ce que l'on veut et même plus quelques fois.

Outil pratique, ce partage de connaissances est bénéfique pour tous! Merci à ceux qui le font vivre.

Mais là.. j'en appelle aux connaissances des chevronnés (ou pas) du VBA pour la construction d'une macro somme toute assez simpliste dans l'idée mais qui me pose des problèmes quant à sa programmation. Je suis débutant et je précise que j'ai envie d'apprendre et de comprendre surtout.

Donc, pour résumer:
- un erp me produit 10 rapports à la demande, sous format excel, correspondant à 10 pays différents pour les chiffres d'un mois.
- J'ai besoin de prendre les données de ces rapports (sans les ouvrir si possible) pour les coller dans un classeur Analysis contenant 11 onglets, dont 10 contiennent chacun les chiffres d'un pays. La structure de destination est la même que celle du fichier source pour eviter un trop gros travail.
- Je dois coller des plages discontinues (Une date, soit une cellule, le nom du pays soit une autre cellule et enfin la plage de valeurs)
- Le but etant que chaque mois, je n'ai qu'a appuyer sur un bouton MAJ que je vais parametrer pou r que les chiffres arrivent.

J'aimerais donc trouver un code pour
1. Si le mois choisi est celui voulu (=si le mois du fichier source est le mois choisi dans le rapport Analysis en onglet 11, alors colle-moi les valeurs, sinon mets moi un message d'erreur parametrable)

Ci-dessous un bout de code pour 1 pays seulement:

Sub MiseAJour() 
'la macro MiseAJour permettra de mettre à jour, en fonction du mois, les données extraites du systeme dans un rapport excel. 
'Le but etant d'eviter le copier/coller manuel de tableaux (structure fixe dans le fichier de destination) 

     
     
'Copie de la date de mise à jour LAM 
     
    Workbooks.Open("\\Fr\...\SourcePays1.xls").Sheets("Sheet1").Range("$A$25").Copy 
    Workbooks("Analysis.xls").Sheets("Pays1").Activate 
    ActiveSheet.Paste Destination:=Range("$B$5") 
     
    With Range("$B$5") 
    .Font.ColorIndex = 3 
    .Font.Size = 8 
    .HorizontalAlignment = xlLeft 
     
    End With 

'Copie du nom du pays 

    Workbooks("SourcePays1.xls").Sheets("Sheet1").Range("$B$10").Copy 
    Workbooks("Analysis.xls").Sheets("Pays1").Activate 
    ActiveSheet.Paste Destination:=Range("$B$8") 

'Copie/collage (spécial) depuis SourcePays1 des valeurs du tableau pour Analysis, feuille Pays1. 
     
    Workbooks("SourcePays1.xls").Sheets("Sheet1").Range("$B$12:$H$24").Copy 
    Workbooks("Analysis.xls").Sheets("Pays1").Activate 
    ActiveSheet.Paste Destination:=Range("$B$10:$H$22") 
     
End Sub



Pour l'instant les 2 premiers pb sont:
- au niveau de la copie du nom pays, ce sont des cellules fusionnées tant dans la source que dans la destination. Donc erreur
- Je vais avoir plusieurs plages de cellules, du genre B12:H24, J12:P24, R12:X24 à copier coller. Utilisation de Union(Range("..."), Range("...")) ?

Enfin, je dois faire ça pour 10 rapports differents donc pour les 10 onglets de mon fichier Analysis.....

J'ai peur que ce soit lourd à traiter et finalement un peu compliqué à faire..
Toute critique et proposition sont les bienvenues. Et J'espere avoir été clair..

Merci bien! (surtout d'avoir été jusqu'au bout!)

Nicolas
A voir également:

4 réponses

michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 304
21 avril 2010 à 17:41
Bonjour,

petites questions préalables:

1/ le classeur analysis est il dans le m^me dossier que les classeurs "pays" ?

2/ sinon, pourrais tu me donner le chemin sous la forme classique X:/.... et non sous la forme UNC

3/ une définition précise des tableaux à copier et non "du genre"...

enfin, pourrais tu mettre 1 fichier pays "anonymisé" et une feuille du classeur analysis au format XL 97-2003 sur
https://www.cjoint.com/
et coller le lien dans ton message

pour conserver les fichiers fermés, les tableaux source doivent répondre à des bases de données
de toutes façons, il ne sera copié que les données


0
Utilisateur anonyme
22 avril 2010 à 11:15
Bonjour Michel_M,

Oui tout est dans le même dossier situé sur un serveur, cela change-t-il des choses?

Dans les liens, les fichiers que j'ai simplifié. J'ai egalement précisé les plages que je souhaitais mettre à jour.


fichier analysis: https://www.cjoint.com/?ewlk0GHkpW
fichier SourcePays1: https://www.cjoint.com/?ewk1wnUlzc

Merci de vous pencher sur mon cas!
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 304
22 avril 2010 à 12:18
Bonjour,
OK, c'est clair, merci

dernières questions:
nombre maxi de régions dans un pays ?
Si le mois ne correspond pas,:0K message style "le pays 1n'est pas..." mais on saute le pays ou on arr^te la mise à jour ?

pour les classeurs "pays", tu tiens à sourcepaysX ? ca simplifierait si ils s'appelaient "paysX" (égalité entre le nom du classeur et le nom de l'onglet
...


tout est dans le même dossier situé sur un serveur, cela change-t-il des choses?

Oh oui, ca les simplifie beaucoup!!!

Après tes réponses, j'attaquerai demain à la fraiche: solution en gardant les fichiers fermés
0
Utilisateur anonyme
22 avril 2010 à 12:30
Le nombre de régions est variable mais peut aller jusqu'a 9.
oui pour le message d'alerte on saute le pays (données non rentrées) pour continuer sur ceux qui peuvent être mis à jour.

Effectivement, plus les noms sont simples mieux c'est. Donc pas de souci pour le renommer.

Nickel! Quoi dire de plus?!
..
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 304
22 avril 2010 à 14:09
merci,
je considère donc que tu renommes les classeurs source de "source_paysX" en "paysX" et que dans "analysis" chaque pays a les N tableaux de N régions de préparés (?)
0
Utilisateur anonyme
22 avril 2010 à 14:38
oui exactement. Il n'y a en théorie, et c'est aussi mon souhait, qu'un copier/coller de valeurs à faire.
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 304
23 avril 2010 à 10:21
Bonjour,

Gros problèmes avec tes classeurs où à ma grande surprise j'ai eu un sous-dossier avec du xml !!!
j'ai des refus de macros de lecture de fichiers fermés... j'ai m^me eu dans "fichiers-propriétés une annonce de blocage...
Quelle version XL as tu (2007)?

actuellement, je ne peux rien faire...
0
Utilisateur anonyme
23 avril 2010 à 10:52
Bonjour,

Ah bon? Pourtant ces fichiers étaient "neufs" (copier/coller des tableaux slt et non des onglets..)Excel 2002 pou rla version
0
Utilisateur anonyme
23 avril 2010 à 10:57
Sinon de mon côté, j'ai pu avancer un peu.
Je peux refaire les fichiers en y intégrant mon bout de code pour te montrer..

Par contre il parait assez compliqué de recupérer des données depuis un fichier fermé, donc je fais du ouvrir/fermer, ce qui pourra etre lourd avec mes 10 fichiers sources !

Actuellement je bloque egalement sur une MesBox, j'aimerais qu'en cliquant sur Ok, mon curseur me ramène sur un classeur/onglet/cellule determinée
0
Utilisateur anonyme
26 avril 2010 à 19:09
Bonjour,

Bon j'ai testé et retesté sans arriver à faire marcher votre macro, quelquechose m'échappe et vu mon niveau ça ne m'etonne pas!
Donc j'ai essayé d'autres choses à partir de votre macro et j'en suis venu à repenser un peu la structure et la faire à ma sauce pour essayer de bien tout saisir; Dsl si j'ai pu la massacrer, c'est dans un but pédagogique!

- pour chaque feuille "pays" je ne laisse qu'une macro (MAJ1, MAJ2,..) qui s'occupe juste de coller les valeurs dont j'ai besoin entre le fichier source et mon fichier "analysis".

- J'appelle ces macros (MAJ1, MAJ2) donc depuis la feuille 1 de mon classeur analysis en mettant des conditions (idéalement j'aimerais reproduire votre boucle, mais c'est là que je bloque).


Je vous ai mis en lien mon fichier type parce que j'avoue pour aujourd'hui avec mon taf, je sature un peu du VBA!

https://www.cjoint.com/?eAthfRGseA

En tout cas, merci pour le code, ça m'a permit de mieux comprendre, de façon générale, l'architecture de la macro not avec une boucle.
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 304
27 avril 2010 à 08:47
Bonjour,

J'ai écris N fois de transformer source_paysX en paysX pour que le nom de l'onglet soit le même que le nom du classeur...
S'il était obligatoire pour toi de garder "source_paysX.xls" tu aurais pu avoir la décence de me le dire...

ça m'a permit de mieux comprendre, de façon générale, l'architecture de la macro not avec une boucle.
Hélas! pas du tout

Donc, je désactive définitivement le suivi de ce post
0
Utilisateur anonyme
27 avril 2010 à 11:11
Bonjour,
Desolé& je voulais pas que ça apparaisse comme un manque de respect.

J'ai conservé votre code et j'ai essayé de le faire marcher un certain nbre de fois, sans réussir et en gardant le meme nom pays et onglet, à savoir "paysx". (le dernier fichier en lien était issu de mon autre travail dans lequel je garde le nom "source_pays"). Donc l'erreur ne vient pas de la.

J'essaye avant tout de comprendre, je sais que vous faites ça sur votre temps libre, c'est très sympa mais je suis loin d'être un pro un langage VBA.. et je n'arrive encore moins à faire marcher votre macro, meme apres avoir corrigé le Dim paysx au début, apres avoir également corrigé la cellule B8 dans le fichier "pays1".

En fait pour etre constructif, rien ne se passe, aucun fichier ne s'ouvre. Je pense donc que cela vient du début, avec les commandes chdir et compagnie.

Maintenant à vous de voir si vous voulez bien continuer à m'aider en re-testant votre macro.
Merci et peut-être à bientôt alors.
0