Macro d'import de données dans d'autres fichiers excels selon la semaine
Bonjour à tous,
Dans le cadre de mon travail je souhaiterais créer une macro VBA afin de me faciliter la tâche dans de la récupération de donnée. Problème, je suis un pur novice en la matière, et j'ai déjà perdu beaucoup de temps à chercher des tutos afin de réaliser la macro souhaitée, sans réel succès .. je fais donc appel à vous pour m'aider à réaliser et comprendre comment écrire cette macro.
Ce que je cherche à réaliser :
J'ai des fichiers excels nommés "S50 ; S51; S52" selon le numéro de semaine de l'année. Ces derniers sont rangés dans des fichiers selon le mois "Décembre" pour les semaines citées plus haut. Donc en général j'ai 4 fichiers excel par dossier "mois".
J'aimerais que la macro me permette d'importer des références de cellules de ces fichiers excels dans un fichier excel nommé "Bilan hebdo NRJ" selon la semaine en cours.
J'ai essayé d'utiliser la fonction "enregistrer une macro" en allant chercher les références de cellules dans l'un des fichiers excel, et je me suis dit qu'en demandant à la macro de réaliser une boucle cela pourrait fonctionner. Sauf que je n'y arrive pas, je n'y connais rien en macro et j'ai besoin d'aide si je veux mettre cet outil en place ..(qui me ferait gagner un temps fou).
Je vous remercie de m'avoir lu bonne journée à vous !
Salut, un premier jet de code à adapter selon tas situation.
Si tu as des questions j'y répondrai avec plaisir.
A+
Public Sub Traitement_Données()
Dim Semaine As String, Excel_Bilan As String, Chemin As String, Excel_Semaine As String
Application.ScreenUpdating = False
Semaine = InputBox("Numéro de la semaine ?")
Semaine = "S" & Semaine
Dim T(10) As String 'Attention, vérifier que les mois sont correctement écrit (Majuscule, accents etc)
T(0) = Janvier
T(1) = Février
T(2) = Mars
T(3) = Avril
T(4) = Mai
T(5) = Juin
T(6) = Juillet
T(7) = Août
T(8) = Septembre
T(9) = Novembre
T(10) = Décembre
Excel_Bilan = ActiveWorkbook.Name
Chemin = "C:\Users\Public\Documents\truc_bidule\" & valeur & "\"
For Each valeur In T
If (Chemin & Semaine & ".xlsx") <> "" And Len(Dir(Chemin & Semaine & ".xlsx")) > 0 Then
Workbooks.Open Filename:=Chemin & Dir(Chemin & Semaine & ".xlsx")
Excel_Semaine = ActiveWorkbook.Name
Exit For
End If
Next valeur
'================================================
Workbooks(Excel_Semaine).Activate 'Ici tu peux jongler entre tes deux excels pour faire des copier coller et traiter les valeurs comme il te souhaite
Workbooks(Excel_Bilan).Activate
'================================================
Workbooks(Excel_Bilan).Close savechanges = False
Workbooks(Excel_Semaine).Activate
Application.ScreenUpdating = True
End SubTout d'abord merci pour ta réponse !
Sur cette ligne Chemin = "C:\Users\Public\Documents\truc_bidule\" & valeur & "\" est ce que entre les seconds guillemets je dois remplir quelque chose ?
Workbooks(Excel_Semaine).Activate
On est d'accord que je dois annoncer le chemin avant d'activer le fichier excel semaine ?
Worksheets("TCD").Range("C11").Copy la je demande de copier la cellule C11 à chaque fois que la macro ouvre un excel semaine
Workbooks(Excel_Bilan).Activate
Et comment je lui demande de coller la valeur sur la ligne correspondant au numéro de semaine ?
Salut, je vais essayer de t'apporter des réponses claires:
Sur cette ligne Chemin = "C:\Users\Public\Documents\truc_bidule\" & valeur & "\" est ce que entre les seconds guillemets je dois remplir quelque chose ?
valeur est une variable du code, tu n'as rien a remplir, tu dois juste remplacer "C:\Users\Public\Documents\truc_bidule" par ton chemin d'accès au dossier qui contiens les différents mois de l'année.
EDIT: Je pense que j'ai mal compris ce que tu voulais dire. Entre les seconds guillemets tu n'as rien à remplir non c'est normal que ca finisse par "\"
Workbooks(Excel_Semaine).Activate
On est d'accord que je dois annoncer le chemin avant d'activer le fichier excel semaine ?
Si tout se passe bien, arrivé à ce stade du code, tu auras deux classeur excel d'ouvert, Workbooks(Excel_Semaine).Activate et Workbooks(Excel_Bilan).Activate te permet de jongler entre ces deux classeurs pour y éxécuter les commandes que tu souhaites.
Workbooks(Excel_Semaine).Activate
Worksheets("TCD").Range("C11").Copy la je demande de copier la cellule C11 à chaque fois que la macro ouvre un excel semaine
Workbooks(Excel_Bilan).Activate
Worksheets("Feuil1").Range("A1").PasteIci le code doit répondre à tes besoin, si tu veux que je t'aide faudrai que tu m'expliques clairement quelles données copier coller. Si tu pouvais m'envoyer un exemple de classeur semaine et de classeur bilan ce serait top.
En effet ça sera plus simple ! J'ai renommé la "S53" en S53V2 dans laquelle j'ai enlevé quelques données confidentielles. L'idée c'est de copier les données des colonnes C à J de la ligne 11 de la feuille TCD dans S53V2 dans mon fichier bilan hebdo feuille "consommation hebdo" sur la ligne de la semaine correspondante.
Alors juste un détail c'est que les colonnes ne sont pas dans le même ordre sur les deux fichiers, je ne peux pas copier ma ligne du fichier S53V2 directement dans mon fichier bilan hebdo, je dois copier chaque cellule à part :
S53V2 Bilan hebdo
Colonne C N
Colonne D C
Colonne F H
Ect.. Si c'est possible montre moi le code pour une colonne et je ferai le reste !
•Est ce que le classeur "Bilan Hebdo" sera TOUJOURS dans le dossier contenant les mois de l'année (comme sur tas photo) ? Si oui ca m'arrangerai beaucoup car un code permet de recupérer le chemin du classeur ouvert !
• Le programme ne fonctionne que avec des classeurs nommé "SXXX" avec XXX un nombre. Au lieu de faire S53V2 c'est mieux de faire S123456
• Enfin tes fichiers sont bien tous nommés S1, S2, S3.... S53, S54 ? c'est "s" ou "S" ?
à tester chez moi ca fonctionne:
J'ai annoté le code, le programme ne colle que 3 cellules mais tu devrais réussir a compléter.
Si t'as des questions je pourrais pas répondre avant 15h/16h
•Est ce que le classeur "Bilan Hebdo" sera TOUJOURS dans le dossier contenant les mois de l'année (comme sur tas photo) ? Si oui ca m'arrangerai beaucoup car un code permet de recupérer le chemin du classeur ouvert !
Oui
• Le programme ne fonctionne que avec des classeurs nommé "SXXX" avec XXX un nombre. Au lieu de faire S53V2 c'est mieux de faire S123456
Ok, est-il possible que le programme fonctionne sur des fichiers nommés " Fonderie SXX" ? car j'ai pris des SXX comme exemple mais à mon entreprise les fichiers sont nommés "Fonderie SXX" . Après si le programme ne peut marcher que sur des SXX je peux voir pour changer ça.
Si je change Semaine = "S" & Semaine par Semaine = "Fonderie S" & Semaine ça marcherait ?
• Enfin tes fichiers sont bien tous nommés S1, S2, S3.... S53, S54 ? c'est "s" ou "S" ?
Ce sont des S majuscule.
Je viens d'essayer ça marche c'est super !! Ca m'énerve car j'y comprends rien et j'aimerais bien être capable de faire ça moi même mais je suis pas certains d'avoir le temps, mais en tt cas merci bcp !
Si je change Semaine = "S" & Semaine par Semaine = "Fonderie S" & Semaine ça marcherait ?
Yes t'as compris le truc
J'ai commencer à apprendre le VBA à l'IUT comme une "initiation" ca m'as plu, et je me suis rendu compte que dans mon travail cela pouvait me faire gagner beaucoup de temps alors j'en fait régulièrement. J'essaye d'aider des gens sur le forum quand les problèmes sont de mon niveau et ca me permet d'apprendre de faire des exercices toujours différents. Quand je reprend les codes que je faisait il y a 1 ans ils sont catastrophiques ! ^^
En appuyant sur "F8" tu peux éxécuter le code pas à pas (en vérifiant que tu as bien la feuille de classeur contenant le bouton active)
cela te permet de lire une à une les lignes de codes, de les faires s'éxécuter et de comprendre ce qui se passe au fur et à mesure. En passant t'as souris sur des variables ou objets, tu peux également voir en temps réel les valeurs qu'ils possèdent.
A priori ton programme d'export devrais bien fonctionner maintenant !
A+
Salut Gabin un petit problème, j'ai changé la ligne : Semaine = "S" & Semaine par Semaine = "Fonderie S" & Semaine. J'ai donc changé les fichiers en question que j'ai bien nommés Fonderie S..
Et il m'est affiché le message d'erreur ("Une erreur est survenue")
J'en déduis qu'il faut modifier quelque chose dans :
Sheets("Consommation hebdo").Activate
Dim n As Long
n = 3
While Cells(n, 2) <> Semaine
n = n + 1
If n > 50000 Then
MsgBox ("Une erreur est survenue")
Exit Sub
Est ce que tu sais de quoi il s'agit ?
PS : peux tu me traduire rapidement ce qui est demandé avec ces lignes de codage ? Merci !
For Each valeur In T
Chemin = ThisWorkbook.Path & valeur
If (Chemin & Semaine & ".xlsx") <> "" And Len(Dir(Chemin & Semaine & ".xlsx")) > 0 Then
Workbooks.Open Filename:=Chemin & Dir(Chemin & Semaine & ".xlsx")
Excel_Semaine = ActiveWorkbook.Name
Exit For
L'erreur viens de moi j'ai voulut faire le fénéant.
A la base, les classeur devaient s'appeller "SXX" donnée contenue dans la variable Semaine
Cette même variable me servait à tester la colonne B pour trouver la ligne qui correspondait à ta semaine !
Tu me suis ? t'essaye de corriger tout seul ? :)
Il faut que tu crées une nouvelle variable que tu saisis au tout début de ton prog lorsqu'on on demande le numéro de la semaine, t'as variable devras avoir le même nom que les cellules de la colonne B du classeur Bilan, enfin il faudra changer la viable dans la boucle qui cherche cette fameuse ligne correspondante:
heets("Consommation hebdo").Activate
Dim n As Long
n = 3
While Cells(n, 2) <> Semaine
n = n + 1
If n > 50000 ThenPS : peux tu me traduire rapidement ce qui est demandé avec ces lignes de codage ? Merci !
For Each valeur In TJ'ai crée plus haut un tableau T de 12 valeurs, je demande alors une boucle qui va tester chaques valeurs une par une du tableau, cette valeur sera une variable apellé "valeur" dans la boucle
Chemin = ThisWorkbook.Path & valeurChemin prend la valeur du chemin dans le quelle se trouve le classeur Bilan et ajoute la variable valeur qui vaut: \Janvier\ etc..
If (Chemin & Semaine & ".xlsx") <> "" And Len(Dir(Chemin & Semaine & ".xlsx")) > 0 ThenCette ligne c'est un petit truc trouvé sur internet en gros ca test si le classeur excel cherché éxiste bien, car sinon ca planterai chaque fois qu'il essaye d'ouvrir un classeur qui n'éxiste pas
Workbooks.Open Filename:=Chemin & Dir(Chemin & Semaine & ".xlsx")On ouvre le classeur qui se situe donc dans le dossier du mois correspondant, Semaine c'est le nom de ton classeur excel et faut rajouter .xlsx (si ton classeur avait des macros se serait .xlxm)
Excel_Semaine = ActiveWorkbook.NameJ'enregistre le nom du classeur dans la variabl pour pouvoir l'activer a souhait
Exit ForCette ligne renvoi au début du for jusqu'as ce que ce soit finit, donc je vais bien passer dans cette boucle pour tous les mois de l'année. En balayant les 12 mois je vais forcément trouver tonlasseur "Fonderie SXX" que ce soit semaine 1 ou 50 !
J'espere que je t'ai pas perdu
A+
A la base, les classeur devaient s'appeller "SXX" donnée contenue dans la variable Semaine
Cette même variable me servait à tester la colonne B pour trouver la ligne qui correspondait à ta semaine !
Tu me suis ? t'essaye de corriger tout seul ? :)
Il faut que tu crées une nouvelle variable que tu saisis au tout début de ton prog lorsqu'on on demande le numéro de la semaine, t'as variable devras avoir le même nom que les cellules de la colonne B du classeur Bilan, enfin il faudra changer la viable dans la boucle qui cherche cette fameuse ligne correspondante:
Ok donc la, la boucle me permettait à la fois d'aller chercher l'excel et la ligne de la semaine correspondante. Donc si je change mes excels en "fonderie S.." il faut que je créé une nouvelle variable EN PLUS de celle déjà présente pour aller chercher le bon excel, et ton programme fera la suite pour aller chercher la bonne ligne c'est ça ? Ou alors je suis obligé d'avoir la même variable pour aller chercher le bon excel et la bonne ligne, dans ce cas je devrais mettre des "fonderies S.." dans ma colonne ?
C'est presque ca,
Il faut créer une variable EN PLUS, pour avoir deux variables indépendantes: 1 pour aller chercher le bon Excel et l'autre pour chercher la bonne ligne
Ensuite il faudras vérifier que tu fais correctement appel aux bonnes variables au bon moment
Tu me dit si tu y arrives sinon je te le fais si t'as besoin de gain de temps
EDIT: envoi le code de ton fichier et je le corrigerai
J'ai fini par trouver comment insérer une nouvelle variable et l'appeler au bon moment ! Par contre du coup j'ai essayé de faire autre chose en plus. En plus des fichiers fonderies SXX j'ai voulu intégrer les valeurs des fichiers Fusion SXX toujours dans mon fichier bilan. Du coup j'ai recommencé tout en bas en réalisant la même méthode mais en changeant les variables, mais du coup je pense pas que ça soit possible de faire comme ça car ca m'affiche erreur. J'ai l'impression ma macro part dans tous les sens avec ce que j'ai voulu rajouter mdrr je vais l'enlever du coup, tu en penses quoi ? ça a du sens ou j'ai fait n'importe quoi
Public Sub Traitement_Données_fonderie()
Dim Semaine As String, Excel_Bilan As String, Chemin As String, Excel_Semaine As String, SemaineFichier As String, Semaine1 As String
'String chaine de carractère'
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Semaine1 = InputBox("Numéro de la semaine ?")
Semaine = "S" & Semaine1
SemaineFichier = "Fonderie S" & Semaine1
Dim T(11) As String 'Attention, vérifier que les mois sont correctement écrit (Majuscule, accents etc)
T(0) = "\Janvier\"
T(1) = "\Février\"
T(2) = "\Mars\"
T(3) = "\Avril\"
T(4) = "\Mai\"
T(5) = "\Juin\"
T(6) = "\Juillet\"
T(7) = "\Aout\"
T(8) = "\Septembre\"
T(9) = "\Octobre\"
T(10) = "\Novembre\"
T(11) = "\Décembre\"
Excel_Bilan = ActiveWorkbook.Name 'on active dabord l'excel puis après on l'appelle avec this workbook'
For Each valeur In T
Chemin = ThisWorkbook.Path & valeur 'chemin du fichier bilan puis on rajoute valeur T càd on part du chemin du dossier bilan puis on va dans fichier selon le mois'
If (Chemin & SemaineFichier & ".xlsx") <> "" And Len(Dir(Chemin & SemaineFichier & ".xlsx")) > 0 Then
Workbooks.Open Filename:=Chemin & Dir(Chemin & SemaineFichier & ".xlsx")
Excel_SemaineFichier = ActiveWorkbook.Name
Exit For
End If
'<> ""' n'est pas égal à rien, en gros si en allant dans le dossier "chemin" contenant les fichiers fonderie S.. la valeur rentrée dans input box n'est pas égal à rien alors ..
Next valeur
'================================================
Dim Noyautage As Double
Dim Fusion_BBC As Double
Dim Sablerie As Double
Dim Moulage As Double
Dim Decochage As Double
Dim Para As Double
Dim Expe As Double
Dim Serv_Support As Double
On Error GoTo error1
Workbooks(Excel_SemaineFichier).Activate
Noyautage = Worksheets("TCD").Range("C11").Value 'On enregistre toutes les valeurs dans des variables
Fusion_BBC = Worksheets("TCD").Range("D11").Value
Sablerie = Worksheets("TCD").Range("E11").Value
Moulage = Worksheets("TCD").Range("F11").Value
Decochage = Worksheets("TCD").Range("G11").Value
Para = Worksheets("TCD").Range("H11").Value
Expe = Worksheets("TCD").Range("I11").Value
Serv_Support = Worksheets("TCD").Range("J11").Value
Workbooks(Excel_Bilan).Activate 'Changement de classeur, maintenant on cherche la ligne qui correspond:
Sheets("Consommation hebdo").Activate
Dim n As Long
n = 3
While Cells(n, 2) <> Semaine 'tant que cellule différent de S53 je continue'
n = n + 1
If n > 50000 Then
MsgBox ("Une erreur est survenue")
Exit Sub
End If
Wend 'Maintenant la variable n correspond a la ligne de la semaine
'Il n'y a plus que a coller:
Range("N" & n).Value = Noyautage
Range("C" & n).Value = Fusion_BBC
Range("H" & n).Value = Moulage
Range("O" & n).Value = Decochage
'================================================
Workbooks(Excel_SemaineFichier).Close savechanges = False
Workbooks(Excel_Bilan).Activate
Application.ScreenUpdating = True
Application.DisplayAlerts = True
Exit Sub
error1:
MsgBox ("Numéro de semaine incorrect.")
Dim Semaine2 As String, Chemin2 As String, Excel_Fusion As String, FusionFichier As String, numeroSemaine As String
'String chaine de carractère'
Application.ScreenUpdating = False
Application.DisplayAlerts = False
numeroSemaine = InputBox("Numéro de la semaine ?")
Semaine2 = "S" & numeroSemaine ' Semaine2 est la variable pour désigner la colonne "SX" dans le fichier bilan'
FusionFichier = "Fusion S" & numeroSemaine 'FusionFichier est la variable pour désigner le fichier Fusion SX'
Dim T(11) As String 'Attention, vérifier que les mois sont correctement écrit (Majuscule, accents etc)
T(0) = "\Janvier\"
T(1) = "\Février\"
T(2) = "\Mars\"
T(3) = "\Avril\"
T(4) = "\Mai\"
T(5) = "\Juin\"
T(6) = "\Juillet\"
T(7) = "\Aout\"
T(8) = "\Septembre\"
T(9) = "\Octobre\"
T(10) = "\Novembre\"
T(11) = "\Décembre\"
Excel_Bilan = ActiveWorkbook.Name 'on active dabord l'excel puis après on l'appelle avec this workbook'
For Each valeur2 In T
Chemin = ThisWorkbook.Path & valeur2 'chemin du fichier bilan puis on rajoute valeur T càd on part du chemin du dossier bilan puis on va dans fichier selon le mois'
If (Chemin & FusionFichier & ".xlsx") <> "" And Len(Dir(Chemin & FusionFichier & ".xlsx")) > 0 Then
Workbooks.Open Filename:=Chemin & Dir(Chemin & FusionFichier & ".xlsx")
Excel_FusionFichier = ActiveWorkbook.Name
Exit For
End If
'<> ""' n'est pas égal à rien, en gros si en allant dans le dossier "chemin" contenant les fichiers fonderie S.. la valeur rentrée dans input box n'est pas égal à rien alors ..
Next valeur
'================================================
Dim Four1 As Double
Dim Four2 As Double
On Error GoTo error1
Workbooks(Excel_FusionFichier).Activate
Four1 = Range("A2").Value 'On enregistre toutes les valeurs dans des variables
Four2 = Range("B2").Value
Workbooks(Excel_Bilan).Activate 'Changement de classeur, maintenant on cherche la ligne qui correspond:
Sheets("Consommation hebdo").Activate
Dim n As Long
n = 3
While Cells(n, 2) <> Semaine2 'tant que cellule différent de S53 je continue'
n = n + 1
If n > 50000 Then
MsgBox ("Une erreur est survenue")
Exit Sub
End If
Wend 'Maintenant la variable n correspond a la ligne de la semaine
'Il n'y a plus que a coller:
Range("F" & n).Value = Four1
Range("G" & n).Value = Four2
End Sub•J'avais déclaré une variable
Excel_Semaine as string
mais plus tard tu utilise Excel_SemaineFichier ! Visiblement ca doit fonctionner mais c'est pas tip top vaut mieux déclarer les variables pour les utiliser (C'est pas parce que tu as crée une variable SemaineFichier et tu dois renommer Excel_Fichier ! On aurait pu choisir d'autres nom ce ne sont que des variables !
•Et en fait ce que tu as fait de copier/coller le code est totalement inutile ! car tu as laissé une ligne "Exit Sub"
Workbooks(Excel_SemaineFichier).Close savechanges = False
Workbooks(Excel_Bilan).Activate
Application.ScreenUpdating = True
Application.DisplayAlerts = True
Exit Sub
error1:
MsgBox ("Numéro de semaine incorrect.")
Dim Semaine2 As String, Chemin2 As String, Excel_Fusion As String, FusionFichier As String, numeroSemaine As StringDonc arrivé ici bah le programme s'arrete
Copier coller le code en double est une tres mauvaise idée en tout cas.
On est d'accord que tu cherches à chercher soit un classeur Fonderie S42 ou alors un classeur Fusion S42 ? tu cherches soit l'un ou l'autre ou tu voudrais plutot choisir soit l'un soit l'autre par une fenetre avec des boutons par exemple ?
Est ce possible qu'il éxiste Fusion et Fonderie avec le même numéro de semaine ?
Si on est dans le cas ou ton fichier s'apelle Fonderie S42 OU Fusion S42, ce que je te proposes c'est de simplement dupliquer cette boucle:
For Each valeur In T
Chemin = ThisWorkbook.Path & valeur 'chemin du fichier bilan puis on rajoute valeur T càd on part du chemin du dossier bilan puis on va dans fichier selon le mois'
If (Chemin & SemaineFichier & ".xlsx") <> "" And Len(Dir(Chemin & SemaineFichier & ".xlsx")) > 0 Then
Workbooks.Open Filename:=Chemin & Dir(Chemin & SemaineFichier & ".xlsx")
Excel_SemaineFichier = ActiveWorkbook.Name
Exit For
End If
'<> ""' n'est pas égal à rien, en gros si en allant dans le dossier "chemin" contenant les fichiers fonderie S.. la valeur rentrée dans input box n'est pas égal à rien alors ..
Next valeurOn cherche une fois dans la boucles dans tous les dossier Fonderie S42 puis apres à la suite de cette boucle on tape ca:
For Each valeur In T
Chemin = ThisWorkbook.Path & valeur 'chemin du fichier bilan puis on rajoute valeur T càd on part du chemin du dossier bilan puis on va dans fichier selon le mois'
If (Chemin & SemaineFichierBis & ".xlsx") <> "" And Len(Dir(Chemin & SemaineFichierBis & ".xlsx")) > 0 Then
Workbooks.Open Filename:=Chemin & Dir(Chemin & SemaineFichierBis & ".xlsx")
Excel_SemaineFichier = ActiveWorkbook.Name
Exit For
End If
'<> ""' n'est pas égal à rien, en gros si en allant dans le dossier "chemin" contenant les fichiers fonderie S.. la valeur rentrée dans input box n'est pas égal à rien alors ..
Next valeurEt dans cette deuxieme boucle on utilises la variable SemaineFichierBis que tu auras déclaré plutot et qui prendras la valeur "Fusion S" & Semaine1
Ha non j'ai du mal m'exprimer ! je veux que dans mon fichier Bilan, quand je tape semaine 52, que la macro aille me chercher les données de Fonderie S52 sous certaines colonnes, ET les données du fichier Fusion S52 sous d'autres colonnes. (en gros récup les données de deux fichiers) tu vois ce que je veux dire ?
Dans ce cas ton précédent code devrais fonctionner...
Il faut enlever ces trois lignes à leur première occurrence:
Exit Sub
error1:
MsgBox ("Numéro de semaine incorrect.")puis supprimer toutes les déclaration des variables en double, donc dans la deuxième partie du code que tu colle enleve toutes les lignes
DIM blabla as trucSi tu as encore des erreurs après ca j'y regarderai en détail demain
A tester:
Public Sub Traitement_Données_fonderie()
Dim Semaine As String, Excel_Bilan As String, Chemin As String, Excel_Semaine As String, SemaineFichier As String, Semaine1 As String
'String chaine de carractère'
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Semaine1 = InputBox("Numéro de la semaine ?")
Semaine = "S" & Semaine1
SemaineFichier = "Fonderie S" & Semaine1
Dim T(11) As String 'Attention, vérifier que les mois sont correctement écrit (Majuscule, accents etc)
T(0) = "\Janvier\"
T(1) = "\Février\"
T(2) = "\Mars\"
T(3) = "\Avril\"
T(4) = "\Mai\"
T(5) = "\Juin\"
T(6) = "\Juillet\"
T(7) = "\Aout\"
T(8) = "\Septembre\"
T(9) = "\Octobre\"
T(10) = "\Novembre\"
T(11) = "\Décembre\"
Excel_Bilan = ActiveWorkbook.Name 'on active dabord l'excel puis après on l'appelle avec this workbook'
For Each valeur In T
Chemin = ThisWorkbook.Path & valeur 'chemin du fichier bilan puis on rajoute valeur T càd on part du chemin du dossier bilan puis on va dans fichier selon le mois'
If (Chemin & SemaineFichier & ".xlsx") <> "" And Len(Dir(Chemin & SemaineFichier & ".xlsx")) > 0 Then
Workbooks.Open Filename:=Chemin & Dir(Chemin & SemaineFichier & ".xlsx")
Excel_Semaine = ActiveWorkbook.Name
Exit For
End If
'<> ""' n'est pas égal à rien, en gros si en allant dans le dossier "chemin" contenant les fichiers fonderie S.. la valeur rentrée dans input box n'est pas égal à rien alors ..
Next valeur
'================================================
Dim Noyautage As Double
Dim Fusion_BBC As Double
Dim Sablerie As Double
Dim Moulage As Double
Dim Decochage As Double
Dim Para As Double
Dim Expe As Double
Dim Serv_Support As Double
On Error GoTo error1
Workbooks(Excel_Semaine).Activate
Noyautage = Worksheets("TCD").Range("C11").Value 'On enregistre toutes les valeurs dans des variables
Fusion_BBC = Worksheets("TCD").Range("D11").Value
Sablerie = Worksheets("TCD").Range("E11").Value
Moulage = Worksheets("TCD").Range("F11").Value
Decochage = Worksheets("TCD").Range("G11").Value
Para = Worksheets("TCD").Range("H11").Value
Expe = Worksheets("TCD").Range("I11").Value
Serv_Support = Worksheets("TCD").Range("J11").Value
Workbooks(Excel_Bilan).Activate 'Changement de classeur, maintenant on cherche la ligne qui correspond:
Sheets("Consommation hebdo").Activate
Dim n As Long
n = 3
While Cells(n, 2) <> Semaine 'tant que cellule différent de S53 je continue'
n = n + 1
If n > 50000 Then
MsgBox ("Une erreur est survenue")
Exit Sub
End If
Wend 'Maintenant la variable n correspond a la ligne de la semaine
'Il n'y a plus que a coller:
Range("N" & n).Value = Noyautage
Range("C" & n).Value = Fusion_BBC
Range("H" & n).Value = Moulage
Range("O" & n).Value = Decochage
'================================================
Workbooks(Excel_Semaine).Close savechanges = False
Workbooks(Excel_Bilan).Activate
Dim Semaine2 As String, Chemin2 As String, Excel_Fusion As String, FusionFichier As String, numeroSemaine As String
numeroSemaine = InputBox("Numéro de la semaine ?")
Semaine2 = "S" & numeroSemaine ' Semaine2 est la variable pour désigner la colonne "SX" dans le fichier bilan'
FusionFichier = "Fusion S" & numeroSemaine 'FusionFichier est la variable pour désigner le fichier Fusion SX'
Excel_Bilan = ActiveWorkbook.Name 'on active dabord l'excel puis après on l'appelle avec this workbook'
For Each valeur2 In T
Chemin = ThisWorkbook.Path & valeur2 'chemin du fichier bilan puis on rajoute valeur T càd on part du chemin du dossier bilan puis on va dans fichier selon le mois'
If (Chemin & FusionFichier & ".xlsx") <> "" And Len(Dir(Chemin & FusionFichier & ".xlsx")) > 0 Then
Workbooks.Open Filename:=Chemin & Dir(Chemin & FusionFichier & ".xlsx")
FusionFichier = ActiveWorkbook.Name
Exit For
End If
'<> ""' n'est pas égal à rien, en gros si en allant dans le dossier "chemin" contenant les fichiers fonderie S.. la valeur rentrée dans input box n'est pas égal à rien alors ..
Next valeur
'================================================
Dim Four1 As Double
Dim Four2 As Double
On Error GoTo error1
Workbooks(FusionFichier).Activate
Four1 = Range("A2").Value 'On enregistre toutes les valeurs dans des variables
Four2 = Range("B2").Value
Workbooks(Excel_Bilan).Activate 'Changement de classeur, maintenant on cherche la ligne qui correspond:
Sheets("Consommation hebdo").Activate
Dim n As Long
n = 3
While Cells(n, 2) <> Semaine2 'tant que cellule différent de S53 je continue'
n = n + 1
If n > 50000 Then
MsgBox ("Une erreur est survenue")
Exit Sub
End If
Wend 'Maintenant la variable n correspond a la ligne de la semaine
'Il n'y a plus que a coller:
Range("F" & n).Value = Four1
Range("G" & n).Value = Four2
Workbooks(FusionFichier).Close savechanges = False
Workbooks(Excel_Bilan).Activate
Application.ScreenUpdating = True
Application.DisplayAlerts = True
Exit Sub
error1:
MsgBox ("Numéro de semaine incorrect.")
End SubSalut Gabin,
Merci pour ton script, mais il m'est affiché "erreur de compilation référence de variable de contrôle incorecte dans next" Je pense que cela vient du fait que j'ai deux fois la valeur Next dans la macro :/
Merde j'ai trouvé il fallait mettre Next valeur2
Edit 2 : Super ça marche !! Au boulot j'aurais plus qu'un 3eme fichier à faire aller chercher et je ferais la même méthode ! Merci encore pout ton aide ;)
PS : t'es à CESI Lyon ?