Besoin d'aide pour création d'une macro

daemonofcf

XLDnaute Nouveau
Bonjour au forum,

J'ai besoin d'aide pour la création d'une macro. Je vais essayer de détailler un maximum.
J'ai créé un document qui rassemble des données. Mais celui ci servant également au suivi des CP, il fonctionne du 1ier mai N au 31 avril N+1.

Sur le document (en pj), je travaille sur une année civile.

Sur l'onglet "par activité", quand j'appuie sur le bouton de commande de la cellule C4 (récup 1ier semestre), je souhaiterai qu'une fenêtre d'explorateur s'ouvre pour pouvoir choisir un fichier (car un par personne) sur lequel il faudra copier les cellules C8:BB8 de l'onglet "total par activité" de ce fichier en E11:BD11 de l'onglet "par activité" de mon fichier joint.

Sur l'onglet "par activité", quand j'appuie sur le bouton de commande de la cellule D4 (récup 2ième semestre), je souhaiterai qu'une fenêtre d'explorateur s'ouvre pour pouvoir choisir un fichier (car un par personne) sur lequel il faudra copier les cellules C4:BB4 de l'onglet "total par activité" de ce fichier en E12:BD12 de l'onglet "par activité" de mon fichier joint.

etc.. mais si vous m'aidez sur cette première partie, je serai en mesure de me débrouiller pour le reste.

Merci d'avance
 

Pièces jointes

  • total par année.zip
    30.7 KB · Affichages: 25

daemonofcf

XLDnaute Nouveau
Re : Besoin d'aide pour création d'une macro

Bonjour fhoest, le forum,

merci pour cette réponse.

En attendant et en cherchant sur le forum, j'ai réussi à faire un bout macro qui fonctionne. (fichier joint)

Mais quelques problèmes :
après ouverture de la boite de dialogue, si je la ferme avec la croix avant de choisir un fichier, ça crée une erreur et m'ouvre une fenêtre de débogage.

Après avoir sélectionner le fichier, celui-ci reste ouvert. Mais je souhaiterai qu'il se ferme.

Enfin, en terme d'amélioration :
Tous les boutons de commande qui sont dans la colonne C iront copier les cellules C4:BB4 du fichier que j'ouvre et les recopieront ensuite dans mon fichier de départ dans les cellules Exx:BDxx
Les noms de fichier seront tous construits de manière identiques, sous la forme "suivi hebdo d'activité NOM" et situés dans le même répertoire (à définir). Vu que NOM figure en colonne B et que xx sera toujours égal au numéro de la ligne du NOM + une constante, est il possible d'automatiser par macro la récupération des valeurs de tous les fichiers ?

j'espère avoir été clair dans mes explications !
 

Pièces jointes

  • total par année V2.zip
    33.9 KB · Affichages: 19
  • total par année V2.zip
    33.9 KB · Affichages: 20
  • total par année V2.zip
    33.9 KB · Affichages: 21

daemonofcf

XLDnaute Nouveau
Re : Besoin d'aide pour création d'une macro

Bon. j'avance petit à petit.

Mais maintenant je sèche sur des erreurs

En fait voilà au final la macro que je souhaiterai faire, après appui sur le premier bouton de commande de la colonne

Depuis mon fichier cible "total par année" j'ouvre ma boite de dialogue
je choisis un fichier qui se situe dans le répertoire qui contient tous mes fichiers sources
sois "R" le répertoire du fichier que je viens de choisir
Sois "L" la ligne sur laquelle je dois coller les données
Sois "N", le nom de la personne qui figure dans la cellule B"L"

L=4

Dans R, ouvrir le fichier "suivi heures N.xls"
dans la feuille "total par activité", copier C4:BB4
Dans mon fichier cible, coller sur E"L+7"BD"L+7"
fermer "suivi heures N.xls"

L=5
Dans R, ouvrir le fichier "suivi heures N.xls"
dans la feuille "total par activité", copier C4:BB4
Dans mon fichier cible, coller sur E"L+7"BD"L+7"
fermer "suivi heures N.xls"

Dans la macro que j'ai bidouillé, je n'ai pas encore géré la notion de répertoire. j'ai directement affecté un chemin. si vous avez une idée
De plus et sans savoir pourquoi, ça ne va pas chercher les données du 3ième fichier (nom de la ligne 6 donc quand i=2, ni du 5ième (nom de la ligne 8 donc quand i=4).

Se pose aussi le problème de la boucle que j'ai arrêté à 35 mais qui devrait plutôt s'arrêter seule quand il n'y a plus de nom dans la colonne B.

je vous ai placé l'ensemble des fichiers dans un dossier essai qui est à placer à la racine de C:\

Cijoint.fr - Service gratuit de dépôt de fichiers

Merci de votre aide
 
Dernière édition:

fhoest

XLDnaute Accro
Re : Besoin d'aide pour création d'une macro

Re
voila le fichier:
le 3ème fichier ne va pas s'ouvrir car il s'appelle Suivi heures_Clouc et non pas Suivi heures_C
et pour le reste tout est dans le fichier
A+ et bravo pour le travail perso et la recherche 'beau travail
 

Pièces jointes

  • total par année V2.zip
    34.9 KB · Affichages: 18
  • total par année V2.zip
    34.9 KB · Affichages: 19
  • total par année V2.zip
    34.9 KB · Affichages: 20

daemonofcf

XLDnaute Nouveau
Re : Besoin d'aide pour création d'une macro

fhoest, le forum,

merci pour le compliment:eek:

Même si j'ai bien conscience que ce codage doit paraître horrible pour les puristes...

Je remets l'ensemble des fichiers avec quelques explications sur la page de total par année V2.xls

Cijoint.fr - Service gratuit de dépôt de fichiers

Les problèmes
Après avoir lancé la macro :
ça va chercher 2 fois les données de suivi heures_A puis se crée un décalage que je ne comprends pas.

Et puis ça ne va toujours pas chercher les donner des fichiers suivi heures_Clouc et suivi heures_E.

Merci de l'aide
 

daemonofcf

XLDnaute Nouveau
Re : Besoin d'aide pour création d'une macro

"ça va chercher 2 fois les données de suivi heures_A puis se crée un décalage que je ne comprends pas."

ça s'est réglé

"Et puis ça ne va toujours pas chercher les donner des fichiers suivi heures_Clouc et suivi heures_E."

ça.... je n'y arrive pas
 

fhoest

XLDnaute Accro
Re : Besoin d'aide pour création d'une macro

Bonjour,
voici le code que tu as besoins en fait c'est le ligne = ligne +1 et non pas ligne + i car i s'incrémente a chaque passge de la boucle ce qui te fait sauter des lignes
Code:
Private Sub CommandButton1_Click()

wbcible = ActiveWorkbook.Name
Dim ligne As Integer
ligne = 4


Application.Dialogs(xlDialogOpen).Show
wbnam = ActiveWorkbook.Name
Path = ActiveWorkbook.Path
If wbnam = wbcible Then Exit Sub
Workbooks(wbnam).Sheets("total par activité").Range("C4:BB4").Copy
Windows("total par année V2.xls").Activate
Sheets("par activité").Range("E" & ligne + 7).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Windows(wbnam).Close False


Dim i As Currency
For i = 1 To 35 Step 1
Dim Nom As String
Nom = Cells(ligne, 2).Value
Dim NOM1 As String
NOM1 = "Suivi Heures_" & Nom & ".xls"

If Nom = "" Then Exit Sub
Workbooks.Open Filename:=ActiveWorkbook.Path & "\" & NOM1 & ""
wb = ActiveWorkbook.Name
Workbooks(wb).Sheets("total par activité").Range("C4:BB4").Copy
Windows("total par année V2.xls").Activate
Sheets("par activité").Range("E" & ligne + 7).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
ligne = ligne + 1
Windows(wb).Close False

Next

Exit Sub

End Sub
Voila je pense que c'est ok.
A bientôt. :)
 

daemonofcf

XLDnaute Nouveau
Re : Besoin d'aide pour création d'une macro

Super. MERCI

Allez j'abuse...

Tu m'as fait comprendre mon erreur, du coup voilà ce que j'ai fait (sachant qu'aller jusqu'à 41 me convient finalement) :

Dim i As Currency
For i = 1 To 41 Step 1
Nligne = ligne + i
Dim Nom As String
Nom = Cells(Nligne, 2).Value
Dim NOM1 As String
NOM1 = "Suivi Heures_" & Nom & ".xls"
Workbooks.Open Filename:=ActiveWorkbook.Path & "\" & NOM1 & ""
wb = ActiveWorkbook.Name
Workbooks(wb).Sheets("total par activité").Range("C4:BB4").Copy
Windows("total par année V2.xls").Activate
Sheets("par activité").Range("E" & Nligne + 7).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Windows(wb).Close False


Si le fichier en question n'existe pas, quel code après (Workbooks.Open Filename:=ActiveWorkbook.Path & "\" & NOM1 & "") pour ne pas tenir compte de l'erreur et reprendre la boucle (Nligne = ligne + i) pour chercher sur la ligne suivante ?

merci
 

fhoest

XLDnaute Accro
Re : Besoin d'aide pour création d'une macro

Super. MERCI

Allez j'abuse...

Tu m'as fait comprendre mon erreur, du coup voilà ce que j'ai fait (sachant qu'aller jusqu'à 41 me convient finalement) :

Dim i As Currency
For i = 1 To 41 Step 1
Nligne = ligne + i
Dim Nom As String
Nom = Cells(Nligne, 2).Value
Dim NOM1 As String
NOM1 = "Suivi Heures_" & Nom & ".xls"
Workbooks.Open Filename:=ActiveWorkbook.Path & "\" & NOM1 & ""
on error goto ici '+ mettre ici: avant la ligne next
wb = ActiveWorkbook.Name
Workbooks(wb).Sheets("total par activité").Range("C4:BB4").Copy
Windows("total par année V2.xls").Activate
Sheets("par activité").Range("E" & Nligne + 7).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Windows(wb).Close False


Si le fichier en question n'existe pas, quel code après (Workbooks.Open Filename:=ActiveWorkbook.Path & "\" & NOM1 & "") pour ne pas tenir compte de l'erreur et reprendre la boucle (Nligne = ligne + i) pour chercher sur la ligne suivante ?

merci

pas tester
 

fhoest

XLDnaute Accro
Re : Besoin d'aide pour création d'une macro

Voila le code:
Code:
Private Sub CommandButton1_Click()

wbcible = ActiveWorkbook.Name
Dim ligne As Integer
ligne = 4


Application.Dialogs(xlDialogOpen).Show
wbnam = ActiveWorkbook.Name
Path = ActiveWorkbook.Path
If wbnam = wbcible Then Exit Sub
Workbooks(wbnam).Sheets("total par activité").Range("C4:BB4").Copy
Windows("total par année V2.xls").Activate
Sheets("par activité").Range("E" & ligne + 7).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Windows(wbnam).Close False


Dim i As Currency
For i = 1 To 41 Step 1
Nligne = ligne + i
Dim Nom As String
Nom = Cells(Nligne, 2).Value
Dim NOM1 As String
NOM1 = "Suivi heures_" & Nom & ".xls"
On Error Resume Next
Workbooks.Open Filename:=ActiveWorkbook.Path & "\" & NOM1 & ""
If ActiveWorkbook.Name <> NOM1 Then GoTo ici
wb = ActiveWorkbook.Name
Workbooks(wb).Sheets("total par activité").Range("C4:BB4").Copy
Windows("total par année V2.xls").Activate
Sheets("par activité").Range("E" & Nligne + 7).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Windows(wb).Close False
ici:
Next
'Exit Sub
'le exit sub ne sert a rien juste devant le end sub
End Sub
J'espère que c'est ok.
A+
 

daemonofcf

XLDnaute Nouveau
Re : Besoin d'aide pour création d'une macro

fhoest,

ce n'était pas ok. Mais en me servant des fonctions que tu m'as donné j'ai réussi en faisant if Nom="" then goto ici

En résumé, tu m'as aidé bien plus que tu ne le penses car tu m'as fait cherché par moi même, ce qui m'a permis de développer (un peu) la logique du vb.

Merci bcp
 

Discussions similaires

Réponses
7
Affichages
533

Statistiques des forums

Discussions
312 228
Messages
2 086 417
Membres
103 204
dernier inscrit
alaa20dine01