Bonjour a tous, et a toutes,
je me permets de vous demander assistance, je ne suis pas fait pour faire de la prog. J avais deja essaye de me mettre a l epoque au html et php... Mais sans succes. par contre je detectais les erreurs de codes fait par d autres...
Enfin, ceci dit, j ai toujours pense que le vba et les macros pouvaient m aider mais a chaque fois meme en utilisant la fonction macro recorder... ca part en cacahouete... bug en ligne 9...
Dernierement, j ai essaye de mettre en place une macro avec le recorder (sur un pc avec OS en allemand):
Ca se rapproche de ce qu il a ete demande ici, je pense. Ci dessous ce que j essayais d obtenir 2fichiers, toujours en feuille 1).
-workbook 1 "Calcul sur data" --> on renseigne ici l'ID d une caracteristique en colonne A et les pourcentages en colonne B
la macro sert a recuperer/ copier des parametres supplementaires dans le workbook 2 pour chaque ID renseignee dans le workbook1 et de les coller dans la colonne C.
On demande ensuite a la macro d effectuer des operations (faire somme / integrale / variance) ou de multiplier et diviser la colonne B avec la colone C et donner le resultat pour chque ID en colonne D)
-Workbook "Source data". Contient une liste de 500 ID ou plus (par exemple) et pour chaque ID on a un parametre ayant une valeur par exemple age / Poids / hauteur.
Du Coup, j ai tente d enregistrer une macro. en faisant la chose suivante (apres avoir importer un masque pour le premier exemple seulement j ai demarrer la macro juste apres): premiere etape dans "calcul de data" - rechercher "article Nr" puis je ferme la recherche. je suis donc bien sur la cellule article Nr. je descends avec la fleche d une cellule. -->premiere ID se trouve en dessous.
Copier "ID1". (le dossier source data est deja ouvert)
changer de fenetre active "source data", lancer une recherche valeur "ID1" copiée, la cellule avec ID1 est trouvee. on ferme la recherche, je deplace avec la fleche droite sur la meme ligne jusqu a la colonne desiree (parametre hauteur par exemple valeur "H1" ), je copie la cellule,
Je change de fenetre active. je lance une recherche (ID1 est toujours present) je ferme la recherche je suis sur la cellule ID1 du workbook1 donc. je me deplace avec la fleche, pour aller en colonne C. je colle ici la valeur H1.
je recherche ID1 (qui est toujours par defaut dans la recherche) dans workbook 1. cette fois ci je descends d une case. et je suis en ID2.
je fais la meme chose avec ID2 (valeur "H2" dans workbook 2- "source data" ) et ainsi de suite jusqu a ce que sur workbook1 je passe de IDy (y un entier ici ca pourrait etre 3 comme ca pourrait etre 851 - osef :-P c est just pour l exemple - y est le dernier ID) a une case en dessous ou il n a plus de valeur en gros une cellule vide.
La je m arrete de faire des recherche et je passe au calcul je fais la somme de la colonne ID1 a IDy puis je fais une multiplication de ID1 avec H1 avec resultat en colonne D (ID1H1).
$$$$$Pour rappel, la colonne en C n existait pas et est le resultat de la "macro a la main" qui a extraite les donnees depuis le fichier source data. j ai fait cela pour 3 ID en fait)
ID1 IDy ont des designations qui sont similaires mais les valeurs ne sont pas forcement donnes dans l ordre croissant$$$$$$
Je fais la somme de IDyHy dans la cellule en dessous IDyHy
Fin - je stoppe l enregistrement de la macro, je l enregistre.
Je change les valeurs ID1 a IDy qui correspondent donc a d autres valeurs H1 a Hy dans workbook 2... et la ca ne marche pas.
Mais alors pas du tout. quand je regarde le code. je me dis que VBA macro recorder n a pas capter qu il doit copier la valeur et ne pas l integrer au code mais l utiliser pour les etapes. Or dans ce code la valeur est donnee. donc a fortiori il a copie une valeur est fixe dans le code au lieu d etre une variable.
de plus je ne sais pas comment faire pour indiquer au programme que SI (IF) dans Workbook 1 on passe de la case IDy a une case vide en dessous, ALORS (THEN) on passe a la phase de calcul....
De plus il me faudrait un code pour au cas ou une valeur est manquante --> qu il me mette genre une valeur nulle, mais en mettant une mention dans une autre colonne vide. Pour eviter que le script stoppe prematurement parce qu un argument est manquant.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Je remercie d avance tous ceux qui prendront le temps de repondre a mon post et me proposer un code qui devrait fontionner de la maniere decrite"
ci dessous le code obtenu. (ID1 possede la valeur "RM01" )
Sub TestCalculation()
'
' TestCalculation Makro
'
'
Cells.Find(What:="article Nr", After:=ActiveCell, LookIn:=xlFormulas, _
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False).Activate
Range("B2" ).Select
Selection.Copy
Windows("source data.xlsx" ).Activate
Cells.Find(What:="RM01", After:=ActiveCell, LookIn:=xlFormulas, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
False, SearchFormat:=False).Activate
Range("D2" ).Select
Application.CutCopyMode = False
Selection.Copy
Windows("data.xlsx" ).Activate
Range("B2" ).Select
Cells.Find(What:="RM01", After:=ActiveCell, LookIn:=xlFormulas, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
False, SearchFormat:=False).Activate
Range("F2" ).Select
ActiveSheet.Paste
Cells.Find(What:="RM01", After:=ActiveCell, LookIn:=xlFormulas, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
False, SearchFormat:=False).Activate
Range("B3" ).Select
Application.CutCopyMode = False
Selection.Copy
Windows("source data.xlsx" ).Activate
Cells.Find(What:="RM05", After:=ActiveCell, LookIn:=xlFormulas, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
False, SearchFormat:=False).Activate
Range("D6" ).Select
Application.CutCopyMode = False
Selection.Copy
Windows("data.xlsx" ).Activate
Cells.Find(What:="RM05", After:=ActiveCell, LookIn:=xlFormulas, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
False, SearchFormat:=False).Activate
Range("F3" ).Select
ActiveSheet.Paste
Cells.Find(What:="RM05", After:=ActiveCell, LookIn:=xlFormulas, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
False, SearchFormat:=False).Activate
Range("B4" ).Select
Application.CutCopyMode = False
Selection.Copy
Windows("source data.xlsx" ).Activate
Cells.Find(What:="RM03", After:=ActiveCell, LookIn:=xlFormulas, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
False, SearchFormat:=False).Activate
Range("D4" ).Select
Application.CutCopyMode = False
Selection.Copy
Windows("data.xlsx" ).Activate
Cells.Find(What:="RM03", After:=ActiveCell, LookIn:=xlFormulas, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
False, SearchFormat:=False).Activate
Range("F4" ).Select
ActiveSheet.Paste
Cells.Find(What:="RM03", After:=ActiveCell, LookIn:=xlFormulas, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
False, SearchFormat:=False).Activate
Range("B5" ).Select
Application.CutCopyMode = False
Selection.Copy
Range("D7" ).Select
Application.CutCopyMode = False
ActiveCell.FormulaR1C1 = "=SUMME"
Range("D7" ).Select
ActiveCell.FormulaR1C1 = "=SUM(R[-5]C:R[-3]C)"
Range("E2" ).Select
ActiveCell.FormulaR1C1 = "=RC[-1]/R[5]C[-1]"
Range("E2" ).Select
Selection.Copy
Range("E3" ).Select
Range("E2" ).Select
Application.CutCopyMode = False
ActiveCell.FormulaR1C1 = "=RC[-1]/R7C4"
Range("E3" ).Select
ActiveCell.FormulaR1C1 = "=RC[-1]/R7C4"
Range("E3" ).Select
Selection.Copy
Range("E4" ).Select
ActiveSheet.Paste
Range("G2" ).Select
Application.CutCopyMode = False
ActiveCell.FormulaR1C1 = "=RC[-1]*RC[-2]"
Range("G2" ).Select
Selection.Copy
Range("G3" ).Select
ActiveSheet.Paste
Range("G4" ).Select
ActiveSheet.Paste
Range("G5" ).Select
ActiveSheet.Paste
Range("G7" ).Select
Application.CutCopyMode = False
ActiveCell.FormulaR1C1 = "=SUM(R[-5]C:R[-3]C)"
Range("H7" ).Select
ActiveCell.FormulaR1C1 = "=RC[-1]/RC[-7]"
Range("H7" ).Select
ActiveCell.FormulaR1C1 = "=RC[-1]*RC[-7]"
Range("H8" ).Select
End Sub