Simplifier un code VBA

Fermé
Nastia88 Messages postés 9 Date d'inscription vendredi 18 avril 2014 Statut Membre Dernière intervention 22 mai 2014 - 21 mai 2014 à 11:00
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 - 22 mai 2014 à 15:42
Bonjour,
Je cherche une solution pour simplifier mon code VBA (je suis novice en la matière). Vous trouverez un bout de mon code ci dessous qui se repete de la même manière. Les lignes soulignés c'est ce qui se repete à chaque copier coller (le classeur et la feuille ou je copie les info) et ce qui est en italique c'est la répetition de la même action copier/coller mais pas le mêmes données.
Deplus j'ai également une autre problématique par rapport au copier coller des plages de cellules qui peuvent subir des modifications. J'aimairais savoir comment rendre ces plages de cellules "mobiles" aux variations (par exemple supression d'une ligne ou rajout de colonne).

Merci par avance d'un coup de main.

Sub creationsynthese()
'On ouvre le classeur BDD_mjc_damidot.xlsm
Workbooks.Open "Q:\ACTIVITES\GESTION EXTERNE\Outil de suivi\Diag 2012\BDD_mjc_damidot.xlsm"
'On selectionne la feuille Identification
Sheets("Identification").Select
'Nom officiel -> On copie la cellule B6 du classeur BDD_mjc_damidot.xlsm dans la cellule B3 de le feuille NS du classeur Fiche_SyntheseV1

Range("B6").Select
Application.CutCopyMode = False
Selection.Copy
Windows("fichesynthese.xlsm").Activate
Range("B3").Select
ActiveSheet.Paste

'Detail de l'activite -> On copie la cellule B11 du classeur BDD_mjc_damidot.xlsm dans la cellule B4 de le feuille NS du classeur Fiche_SyntheseV1
Workbooks.Open "Q:\ACTIVITES\GESTION EXTERNE\Outil de suivi\Diag 2012\BDD_mjc_damidot.xlsm"
'On selectionne la feuille Identification
Sheets("Identification").Select
Range("B11").Select
Application.CutCopyMode = False
Selection.Copy
Windows("fichesynthese.xlsm").Activate
Range("B4:H4").Select
ActiveSheet.Paste
'Elus membres du CA -> On copie la cellule B33 du classeur BDD_mjc_damidot.xlsm dans la cellule B5 de le feuille NS du classeur Fiche_SyntheseV1
Workbooks.Open "Q:\ACTIVITES\GESTION EXTERNE\Outil de suivi\Diag 2012\BDD_mjc_damidot.xlsm"
'On selectionne la feuille Identification
Sheets("Identification").Select
Range("B33").Select
Application.CutCopyMode = False
Selection.Copy
Windows("fichesynthese.xlsm").Activate
Range("B5:H5").Select
ActiveSheet.Paste
'Elus representants de la ville dans le CA -> On copie la cellule B34 du classeur BDD_mjc_damidot.xlsm dans la cellule B6 de le feuille NS du classeur Fiche_SyntheseV1
Workbooks.Open "Q:\ACTIVITES\GESTION EXTERNE\Outil de suivi\Diag 2012\BDD_mjc_damidot.xlsm"
'On selectionne la feuille Identification
Sheets("Identification").Select
Range("B34").Select
Application.CutCopyMode = False
Selection.Copy
Windows("fichesynthese.xlsm").Activate
Range("B6:H6").Select
ActiveSheet.Paste
'Dernier exercice suivi -> On copie la cellule B35 du classeur BDD_mjc_damidot.xlsm dans la cellule B7 de le feuille NS du classeur Fiche_SyntheseV1
Workbooks.Open "Q:\ACTIVITES\GESTION EXTERNE\Outil de suivi\Diag 2012\BDD_mjc_damidot.xlsm"
'On selectionne la feuille Identification
Sheets("Identification").Select
Range("B35").Select
Application.CutCopyMode = False
Selection.Copy
Windows("fichesynthese.xlsm").Activate
Range("B7:C7").Select
ActiveSheet.Paste
'Date de clôture -> On copie la cellule B37 du classeur BDD_mjc_damidot.xlsm dans la cellule E7 de le feuille NS du classeur Fiche_SyntheseV1
Workbooks.Open "Q:\ACTIVITES\GESTION EXTERNE\Outil de suivi\Diag 2012\BDD_mjc_damidot.xlsm"
'On selectionne la feuille Identification
Sheets("Identification").Select
Range("B37").Select
Application.CutCopyMode = False
Selection.Copy
Windows("fichesynthese.xlsm").Activate
Range("e7:f7").Select
ActiveSheet.Paste


A voir également:

15 réponses

f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
21 mai 2014 à 15:58
Bonjour,

Deux facons de faire (a tester):

Sub creationsynthese_1()
Dim TCopie(5)
'On ouvre le classeur BDD_mjc_damidot.xlsm
Workbooks.Open "Q:\ACTIVITES\GESTION EXTERNE\Outil de suivi\Diag 2012\BDD_mjc_damidot.xlsm"
'On selectionne la feuille Identification
Sheets("Identification").Select
'Nom officiel -> On copie la cellule B6 du classeur BDD_mjc_damidot.xlsm dans la cellule B3 de le feuille NS du classeur Fiche_SyntheseV1
'mise en memoire des infos
TCopie(0) = Range("B6").Select '1
TCopie(1) = Range("B11").Select '2
TCopie(2) = Range("B33").Select '3
TCopie(3) = Range("B34").Select '4
TCopie(4) = Range("B35").Select '5
TCopie(5) = Range("B37").Select '6
'fermeture du classeur BDD
Workbooks("BDD_mjc_damidot.xlsm").Close False
'recuperation des infos
Range("B3") = TCopie(0)
Range("B4") = TCopie(1)
Range("B5") = TCopie(2)
Range("B6") = TCopie(3)
Range("B7") = TCopie(4)
Range("E7") = TCopie(5)
End Sub


'Voir pour le nom du fichier synthese et le nom de la feuille
Sub creationsynthese_2()
'On ouvre le classeur BDD_mjc_damidot.xlsm
Workbooks.Open "Q:\ACTIVITES\GESTION EXTERNE\Outil de suivi\Diag 2012\BDD_mjc_damidot.xlsm"
'On selectionne la feuille Identification
With Sheets("Identification")
.Range("B6").Copy Workbooks("fichesynthese.xlsm").Sheets("feuil1").Range("B3")
.Range("B11").Copy Workbooks("fichesynthese.xlsm").Sheets("feuil1").Range("B4")
.Range("B33").Copy Workbooks("fichesynthese.xlsm").Sheets("feuil1").Range("B5")
.Range("B34").Copy Workbooks("fichesynthese.xlsm").Sheets("feuil1").Range("B6")
.Range("B35").Copy Workbooks("fichesynthese.xlsm").Sheets("feuil1").Range("B7")
.Range("B37").Copy Workbooks("fichesynthese.xlsm").Sheets("feuil1").Range("E7")
End With
End Sub

A+
0
Nastia88 Messages postés 9 Date d'inscription vendredi 18 avril 2014 Statut Membre Dernière intervention 22 mai 2014
22 mai 2014 à 09:32
Merci de votre réponse.
Consernant la premiere solution qui m'arrange le plus car le nom du fichier "Q:\ACTIVITES\GESTION EXTERNE\Outil de suivi\Diag 2012\BDD_mjc_damidot.xlsm" est une donnée variable c'est à dire que je vais devoir ouvrir un autre fichier qui a la même forme mais des données differentes et faire les mêmes copier/coller.
Par contre lorsque j'execute la solution n°1 il ne fait pas le copier coller mais indique vrai dans les cellules "B3";"B4";"B5";"B6";"B7";"E7".
Je sais pas trop comment resoudre ce souci.
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
22 mai 2014 à 11:25
Bonjour,

ai oublie d'en enlever

remplacez ces lignes

'mise en memoire des infos
TCopie(0) = Range("B6").Select '1
TCopie(1) = Range("B11").Select '2
TCopie(2) = Range("B33").Select '3
TCopie(3) = Range("B34").Select '4
TCopie(4) = Range("B35").Select '5
TCopie(5) = Range("B37").Select '6

par

'mise en memoire des infos
TCopie(0) = Range("B6") '1
TCopie(1) = Range("B11") '2
TCopie(2) = Range("B33") '3
TCopie(3) = Range("B34") '4
TCopie(4) = Range("B35") '5
TCopie(5) = Range("B37") '6
0
Nastia88 Messages postés 9 Date d'inscription vendredi 18 avril 2014 Statut Membre Dernière intervention 22 mai 2014
22 mai 2014 à 13:43
Alors ça marche parfaitement sauf quand j'ajoute les nom de plage de cellules par exemple :
Sub creationsynthese_1()
Dim TCopie(5)
'On ouvre le classeur BDD_mjc_damidot.xlsm
Workbooks.Open "Q:\ACTIVITES\GESTION EXTERNE\Outil de suivi\Diag 2012\BDD_mjc_damidot.xlsm"
'On selectionne la feuille Identification
Sheets("Identification").Select
'Nom officiel -> On copie la cellule B6 du classeur BDD_mjc_damidot.xlsm dans la cellule B3 de le feuille NS du classeur Fiche_SyntheseV1
'mise en memoire des infos
TCopie(0) = Range("B6") '1
TCopie(1) = Range("B11") '2
TCopie(2) = Range("B33") '3
TCopie(3) = Range("B34") '4
TCopie(4) = Range("B35") '5
TCopie(5) = Range("B37") '6
TCopie(6) = Range("EFFECTIF_MOYEN") '7
TCopie(7) = Range("EFFECTIF_Mis_à_Disposition_par_ville") '8
TCopie(8) = Range("Apports_ville") '9
'fermeture du classeur BDD
Workbooks("BDD_mjc_damidot.xlsm").Close False
'recuperation des infos
Range("B3") = TCopie(0)
Range("B4") = TCopie(1)
Range("B5") = TCopie(2)
Range("B6") = TCopie(3)
Range("B7") = TCopie(4)
Range("E7") = TCopie(5)
Range("A13") = TCopie(6)
Range("A32") = TCopie(7)
Range("A45") = TCopie(8)

End Sub
Cela me pose un probleme si je ne peux pas utiliser ces nom de plage car mon tableau par exemple EFFECTIF_MOYEN peut subir des modification.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
22 mai 2014 à 14:03
Re,

il faut modifier la declaration de la variable TCopie(5) en TCopie(8)

EFFECTIF_MOYEN peut subir des modification Vois pas le rapport !!!!!
0
Nastia88 Messages postés 9 Date d'inscription vendredi 18 avril 2014 Statut Membre Dernière intervention 22 mai 2014
22 mai 2014 à 14:13
Merci encore, je viens de faire la modification pour la declaration de la variable ça beug apartir de la ligne
TCopie(6) = Range("EFFECTIF_MOYEN") '7
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
Modifié par f894009 le 22/05/2014 à 14:20
Re,

variable ça beug Veut rien dire, quel message d'erreur ?????


TCopie(6) = Range("EFFECTIF_MOYEN") '7

EFFECTIF_MOYEN est bien un nom de cellule ????
0
Nastia88 Messages postés 9 Date d'inscription vendredi 18 avril 2014 Statut Membre Dernière intervention 22 mai 2014
22 mai 2014 à 14:23
Le message d'erreur est le suivant : Erreur d'execution '1004' : La méthode 'Range' de l'objet '_Global' à echoué
Et le debogage commence à partir de la ligne : TCopie(6) = Range("EFFECTIF_MOYEN") '7
Voilà
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
22 mai 2014 à 14:27
Re,

je repete la question: "EFFECTIF_MOYEN" est bien un nom de cellule ou ...... ????
0
Nastia88 Messages postés 9 Date d'inscription vendredi 18 avril 2014 Statut Membre Dernière intervention 22 mai 2014
22 mai 2014 à 14:33
Desolé, c'est le nom d'une plage de cellules (un tableau).
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
22 mai 2014 à 14:38
Re,

Comme quoi. Que voulez vous avoir dans TCopie(6), TCopie(7), TCopie(8) ???
0
Nastia88 Messages postés 9 Date d'inscription vendredi 18 avril 2014 Statut Membre Dernière intervention 22 mai 2014
22 mai 2014 à 14:47
Si j'ai bien compris la question, j'aimerai coller dans ma feuille de synthese les tableaux :
EFFECTIF_MOYEN dans la cellule A13
EFFECTIF_Mis_à_Disposition_par_ville dans la cellule A32
Apports_ville dans la cellule A45
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
22 mai 2014 à 14:51
Re,

EFFECTIF_MOYEN dans la cellule A13 tout un tableau dans une cellule !!
Le tableau EFFECTIF_MOYEN contient quoi ???
0
Nastia88 Messages postés 9 Date d'inscription vendredi 18 avril 2014 Statut Membre Dernière intervention 22 mai 2014
22 mai 2014 à 15:16
Non je ne veux pas coller un tableau dans une cellule mais comme j'ai fait dans mon premier code donner une cellule de réference à partir de laquelle le collage commence. Cette méthode marche avec l'ancien code.
Le tableau fait 6 colonnes et 18 lignes.
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
22 mai 2014 à 15:42
Re,

Ok pour effectif_moyen, et pour les deux autres ????
0