aurelie7944
Messages postés2Date d'inscriptionvendredi 23 avril 2010StatutMembreDernière intervention26 avril 2010
-
23 avril 2010 à 15:50
aurelie7944
Messages postés2Date d'inscriptionvendredi 23 avril 2010StatutMembreDernière intervention26 avril 2010
-
26 avril 2010 à 10:35
Bonjour à tous !
Pas très forte en VBA mais me débrouillant pas trop mal, j'ai aujourd'hui besoin de vous. Je suis actuellement en stage et doit mettre en place un macro vba sur excel.
Je vais essayer de vous expliquer mon problème, voilà :
Toute les semaines l'ERP de l'entreprise fait une extraction de données sur les coûts de revient de différents articles.
Je doit mettre en place une macro qui permettent de calculer les hausses ou baisses de ces coûts de revient.
J'ai donc fait un fichier de traitement des données, puisque les fichiers principaux sont énorme et que toute les infos ne me servent pas!
Mon problème est le suivant : j'ai fait une fonction SI avec une rechercheV imbriqué qui me permet de faire ce calcul
"=IF(RC[-2]="""","""",IF(RC[-2]=(VLOOKUP(RC[-2],NOM DE FICHIER SEMAINE-1'!Feuil4'!R1C1:R30000C26,1)),VLOOKUP(RC[-2],'NOM DE FICHIER SEMAINE-1'!'Feuil4'!R1C1:R30000C26,26),""""))"
Le problème est que le nom du fichier change toute les semaines! Es ce possible de mettre une variable qui permette de changer le nom de fichier en fonction de ceux choisi au début?
(Quand je dit en fonction de ceux choisis au début c'est que pour récupérer les autres données je choisi mon fichier grâce à "Application.GetOpenFilename" et déclare donc des variables !!)
J'ai essayé beaucoup de chose, tellement que je sais meme plus quoi !!
Merci d'avance
Aurélie
PS : Désolé les admins j'ai choisi un thème pas défaut je ne savait pas dans quoi le mettre !!
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 24 avril 2010 à 17:24
Salut
Pas très précise ...
Apparemment, tu sais utiliser GetOpenFilename et mettre le nom du fichier choisi dans une variable, sNomFichier par exemple.
Il ne reste donc qu'à modifier toutes les formules de tes cellules pour tenir compte de ce choix.
En supposant que tes formules se trouvent dans les cellules A1 à A100 :
(Je n'ai pas vérifier que ta ligne de code soit fonctionnelle)
Dim maCellule As Range
Application.Calculation = xlManual
For Each maCellule In Range("A1:A100")
maCellule.Formula = "=IF(RC[-2]="""","""",IF(RC[-2]=(VLOOKUP(RC[-2],'" & _
sNomFichier & _
"'!Feuil4'!R1C1:R30000C26,1)),VLOOKUP(RC[-2],'" & _
sNomFichier & _
"'!'Feuil4'!R1C1:R30000C26,26),""""))"
Next
Application.Calculation = xlAutomatic
Calculate
La manipulation de 'Calculation' permet d'éviter que Excel refasse tous les calculs à chaque fois qu'on modifie une cellule.
Vala
Jack, MVP VB NB : Je ne répondrai pas aux messages privés
Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
aurelie7944
Messages postés2Date d'inscriptionvendredi 23 avril 2010StatutMembreDernière intervention26 avril 2010 26 avril 2010 à 10:35
Salut à tous !
Tout d'abord merci à toi jack pour ta réponse... mais malheureusement cela ne fonctionne pas! :(
J'avais déjà essayé et je viens de réessayer toujours rien !
Je vais mettre mon code pour que vous essayez de comprendre d'avantage et peut être voir mon ou mes erreurs !!
'Déclaration de la feuille de traitement
Dim mafeuille As Worksheet
Windows("Test fichier CRU.xlsm").Activate
Set mafeuille = Sheets("Calcul diff. CRU")
'Déclaration des variables
Dim SemaineS As String
Dim SemaineSmoins1 As String
'Choix du fichier pour la semaine S
SemaineS = Application.GetOpenFilename
'Permet d'afficher pour information
MsgBox ("Le fichier choisis pour la semaine S est : " & SemaineS)
Range("A2").Value = SemaineS
'Choix du fichier pour la semaine S-1
SemaineSmoins1 = Application.GetOpenFilename
'Permet d'afficher pour information
MsgBox ("Le fichier choisis pour la semaine S-1 est : " & SemaineSmoins1)
Range("E2").Value = SemaineSmoins1
'Copier la liste des codes articles
Workbooks.Open Filename:=SemaineS
Sheets("Feuil4").Select
Range("A1:A30000").Select
Selection.Copy
Windows("Test fichier CRU.xlsm").Activate
mafeuille.Select
Range("A3").Select
ActiveSheet.Paste
'Copier les CRU correspondant aux articles
Workbooks.Open Filename:=SemaineS
Sheets("Feuil4").Select
Range("Z1:Z30000").Select
Selection.Copy
Windows("Test fichier CRU.xlsm").Activate
mafeuille.Select
Range("B3").Select
ActiveSheet.Paste
'Ouvre le fichier de données Semaine S-1
Workbooks.Open Filename:=SemaineSmoins1
'Active le fichier où est le calcul
Windows("Test fichier CRU.xlsm").Activate
'Calcul de différence de CRU entre les deux semaines
Dim calcdiff As Range
Application.Calculation = xlManual
For Each calcdiff In Range("C4:A30000")
calcdiff.Formula = "=IF(RC[-2]="""","""",IF(RC[-2]=(VLOOKUP(RC[-2],'" & _
SemaineSmoins1 & _
"'!'Feuil4'!R1C1:R30000C26,1)),VLOOKUP(RC[-2],'" & _
SemaineSmoins1 & _
"'!'Feuil4'!R1C1:R30000C26,26,FALSE),""""))"
Next
Application.Calculation = xlAutomatic
Calculate
La rechercheV permet en faite de retrouver les codes articles, puisque d'une semaine à l'autre il y a de nouveau articles de créés.
Mon code est très certainement à améliorer si vous constatez d'autres problèmes je lirai vos remarques avec plaisir !