Anthony_tey
XLDnaute Nouveau
Bonjour à tous.
Plantons le décor, je ne m'y connais pas du tout en VBA, et j'ai réalisé cette macro avec l'enregistreur de macro (ce qui explique certainement pour vous les 75% de contenu inutile 🙁 )
Mon patron m'a demandé de réaliser cette macro afin de corriger et enrichir une base de donnée.
J'ai joins un fichier à titre d'exemple, vous pouvez coller la macro située en bas de ce message pour l'executer dans le fichier afin de mieu comprendre le résultat désiré.
Dans le fichier joint, vous pouvez voir sur ma feuille 1 la base de donnée que je dois corrigée, et enrichir avec un fichier RH qui est sur la feuille 2.
Tout d'abord, la base de donnée de la feuille 1 est toujours erronnée car elle contient des doublons. Donc dans un premier temps, je réalise un croisé dynamique (en supprimant les sous totaux de chaque colonne) afin d'avoir des données corrigée (au passage, j'interverti les 2 premieres colonnes) que je copie dans la feuille 3. Pour info, avant de copier coller, je change le format de la colonne A de la feuille 3 en texte car y seront insérés les matricules (nombre).
Ensuite avec ma base de donnée corigée sur la feuille 3 je vais l'enrichir avec la recherche V grace au doc RH situé sur la feuille 2. Pour enrichir, je le fais grace au matricule des personnes (d'ou la nécessité de faire passer mes matricules de la feuille 3 en texte, car le fichier RH de la feuille 2 est au format txt aussi mais il contient plus de 40000 noms donc je ne le convertis pas lui)
La macro est donc censée effectuer tout ça.
J'ai donc plusieurs problèmes.
tout d'abord vous pouvez voir dans la macro que j'ai modifié manuellement les selections de ligne (cela va de la L2 à la L50000) car l'enregistreur de macro ne prend en compte que la taille de la base de donnée lorsque j'enregistre la macro, or bien qu'on utilise des bases de données sous le meme format (meme nom de colonne et meme nombre) le nb de ligne varie tout le temps. Je ne sais pas comment faire pour que la macro auto selectionne le bon nb de ligne.
Ensuite étant donné la taille de la macro, elle met extremment longtemps à s'executer (essayez de l'executer pour ce fichier de 5 lignes ça vous fera rire) donc pour un fichier de 40000 lignes c'est une affaire de 20minutes quand ça fonctionne (car evidemment cela fait planter excel une fois sur )
Je n'ai pas inclus dans cet exemple le code basculant le calcul en manuel puis en automatique à la fin.
Ayant appris Excel de façon autodidacte, et n'étant pas expérimenté en ordinateur, j'arrive au bout de mes possibilités 🙁 et n'arrive pas à faire mieu.
Donc je remercie par avance toute les personnes qui répondront, et meme celles qui ont fait l'effort de lire jusqu'au bout 😛
Plantons le décor, je ne m'y connais pas du tout en VBA, et j'ai réalisé cette macro avec l'enregistreur de macro (ce qui explique certainement pour vous les 75% de contenu inutile 🙁 )
Mon patron m'a demandé de réaliser cette macro afin de corriger et enrichir une base de donnée.
J'ai joins un fichier à titre d'exemple, vous pouvez coller la macro située en bas de ce message pour l'executer dans le fichier afin de mieu comprendre le résultat désiré.
Dans le fichier joint, vous pouvez voir sur ma feuille 1 la base de donnée que je dois corrigée, et enrichir avec un fichier RH qui est sur la feuille 2.
Tout d'abord, la base de donnée de la feuille 1 est toujours erronnée car elle contient des doublons. Donc dans un premier temps, je réalise un croisé dynamique (en supprimant les sous totaux de chaque colonne) afin d'avoir des données corrigée (au passage, j'interverti les 2 premieres colonnes) que je copie dans la feuille 3. Pour info, avant de copier coller, je change le format de la colonne A de la feuille 3 en texte car y seront insérés les matricules (nombre).
Ensuite avec ma base de donnée corigée sur la feuille 3 je vais l'enrichir avec la recherche V grace au doc RH situé sur la feuille 2. Pour enrichir, je le fais grace au matricule des personnes (d'ou la nécessité de faire passer mes matricules de la feuille 3 en texte, car le fichier RH de la feuille 2 est au format txt aussi mais il contient plus de 40000 noms donc je ne le convertis pas lui)
La macro est donc censée effectuer tout ça.
J'ai donc plusieurs problèmes.
tout d'abord vous pouvez voir dans la macro que j'ai modifié manuellement les selections de ligne (cela va de la L2 à la L50000) car l'enregistreur de macro ne prend en compte que la taille de la base de donnée lorsque j'enregistre la macro, or bien qu'on utilise des bases de données sous le meme format (meme nom de colonne et meme nombre) le nb de ligne varie tout le temps. Je ne sais pas comment faire pour que la macro auto selectionne le bon nb de ligne.
Ensuite étant donné la taille de la macro, elle met extremment longtemps à s'executer (essayez de l'executer pour ce fichier de 5 lignes ça vous fera rire) donc pour un fichier de 40000 lignes c'est une affaire de 20minutes quand ça fonctionne (car evidemment cela fait planter excel une fois sur )
Je n'ai pas inclus dans cet exemple le code basculant le calcul en manuel puis en automatique à la fin.
Ayant appris Excel de façon autodidacte, et n'étant pas expérimenté en ordinateur, j'arrive au bout de mes possibilités 🙁 et n'arrive pas à faire mieu.
Donc je remercie par avance toute les personnes qui répondront, et meme celles qui ont fait l'effort de lire jusqu'au bout 😛
PHP:
Sub Exdemacro()
'
' Exdemacro Macro
' Macro enregistrée le 17/11/2009 par A6262489
'
ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _
"Feuil1!R1C1:R50000C10").CreatePivotTable TableDestination:="", TableName:= _
"Tableau croisé dynamique1", DefaultVersion:=xlPivotTableVersion10
ActiveSheet.PivotTableWizard TableDestination:=ActiveSheet.Cells(3, 1)
ActiveSheet.Cells(3, 1).Select
With ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("LoginId" _
)
.Orientation = xlRowField
.Position = 1
End With
ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotSelect "LoginId[All]" _
, xlLabelOnly, True
ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("LoginId"). _
Subtotals = Array(False, False, False, False, False, False, False, False, False, False, _
False, False)
With ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields( _
"Activity Name")
.Orientation = xlRowField
.Position = 2
End With
ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotSelect _
"'Activity Name'[All]", xlLabelOnly, True
ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields( _
"Activity Name").Subtotals = Array(False, False, False, False, False, False, False, _
False, False, False, False, False)
With ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("Nom")
.Orientation = xlRowField
.Position = 3
End With
ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotSelect "Nom[All]", _
xlLabelOnly, True
ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("Nom"). _
Subtotals = Array(False, False, False, False, False, False, False, False, False, False, _
False, False)
With ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("Prénom")
.Orientation = xlRowField
.Position = 4
End With
ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotSelect "Prénom[All]" _
, xlLabelOnly, True
ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("Prénom"). _
Subtotals = Array(False, False, False, False, False, False, False, False, False, False, _
False, False)
ActiveWindow.ScrollColumn = 2
ActiveWindow.ScrollColumn = 3
With ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields( _
"User Email")
.Orientation = xlRowField
.Position = 5
End With
ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotSelect _
"'User Email'[All]", xlLabelOnly, True
ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("User Email"). _
Subtotals = Array(False, False, False, False, False, False, False, False, False, False, _
False, False)
With ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields( _
"User Primary Organization")
.Orientation = xlRowField
.Position = 6
End With
ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotSelect _
"'User Primary Organization'[All]", xlLabelOnly, True
ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields( _
"User Primary Organization").Subtotals = Array(False, False, False, False, False, _
False, False, False, False, False, False, False)
ActiveWindow.ScrollColumn = 4
ActiveWindow.ScrollColumn = 5
ActiveWindow.ScrollColumn = 6
With ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields( _
"Completion Status")
.Orientation = xlRowField
.Position = 7
End With
ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotSelect _
"'Completion Status'[All]", xlLabelOnly, True
ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields( _
"Completion Status").Subtotals = Array(False, False, False, False, False, False, _
False, False, False, False, False, False)
With ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields( _
"Attempt Start Date")
.Orientation = xlRowField
.Position = 8
End With
ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotSelect _
"'Attempt Start Date'[All]", xlLabelOnly, True
ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields( _
"Attempt Start Date").Subtotals = Array(False, False, False, False, False, False, _
False, False, False, False, False, False)
With ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields( _
"Activity Completion Date")
.Orientation = xlRowField
.Position = 9
End With
ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotSelect _
"'Activity Completion Date'[All]", xlLabelOnly, True
ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields( _
"Activity Completion Date").Subtotals = Array(False, False, False, False, False, _
False, False, False, False, False, False, False)
With ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields( _
"Score Reel")
.Orientation = xlRowField
.Position = 10
End With
ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotSelect _
"'Score Reel'[All]", xlLabelOnly, True
ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("Score Reel"). _
Subtotals = Array(False, False, False, False, False, False, False, False, False, False, _
False, False)
ActiveWorkbook.ShowPivotTableFieldList = False
Sheets("Feuil3").Select
Columns("A:A").Select
Selection.NumberFormat = "@"
Sheets("Feuil4").Select
Range("A4:J50000").Select
Range("J5").Activate
Selection.Copy
Sheets("Feuil3").Select
Range("A1").Select
ActiveSheet.Paste
Sheets("Feuil1").Select
Sheets("Feuil1").Name = "données"
Sheets("Feuil4").Select
Sheets("Feuil4").Name = "TCD"
Sheets("Feuil2").Select
Sheets("Feuil2").Name = "PPS"
Sheets("Feuil3").Select
Sheets("Feuil3").Name = "Report"
ActiveWindow.SmallScroll Down:=-3
Range("K1").Select
Application.CutCopyMode = False
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
With Selection.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = 1
End With
Selection.Borders(xlEdgeTop).LineStyle = xlNone
Selection.Borders(xlEdgeBottom).LineStyle = xlNone
Selection.Borders(xlEdgeRight).LineStyle = xlNone
Selection.Borders(xlInsideVertical).LineStyle = xlNone
Selection.Borders(xlInsideHorizontal).LineStyle = xlNone
ActiveCell.FormulaR1C1 = "Lib Niv1"
Range("L1").Select
Selection.Interior.ColorIndex = xlNone
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
With Selection.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = 1
End With
Selection.Borders(xlEdgeTop).LineStyle = xlNone
Selection.Borders(xlEdgeBottom).LineStyle = xlNone
Selection.Borders(xlEdgeRight).LineStyle = xlNone
Selection.Borders(xlInsideVertical).LineStyle = xlNone
Selection.Borders(xlInsideHorizontal).LineStyle = xlNone
ActiveCell.FormulaR1C1 = "Lib Niv2"
Range("M1").Select
Selection.Interior.ColorIndex = xlNone
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
With Selection.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = 1
End With
Selection.Borders(xlEdgeTop).LineStyle = xlNone
Selection.Borders(xlEdgeBottom).LineStyle = xlNone
Selection.Borders(xlEdgeRight).LineStyle = xlNone
Selection.Borders(xlInsideVertical).LineStyle = xlNone
Selection.Borders(xlInsideHorizontal).LineStyle = xlNone
ActiveCell.FormulaR1C1 = "Lib Niv3"
Range("N1").Select
Selection.Interior.ColorIndex = xlNone
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
With Selection.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = 1
End With
Selection.Borders(xlEdgeTop).LineStyle = xlNone
Selection.Borders(xlEdgeBottom).LineStyle = xlNone
Selection.Borders(xlEdgeRight).LineStyle = xlNone
Selection.Borders(xlInsideVertical).LineStyle = xlNone
Selection.Borders(xlInsideHorizontal).LineStyle = xlNone
ActiveCell.FormulaR1C1 = "Lib Niv4"
Range("O1").Select
Selection.Interior.ColorIndex = xlNone
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
With Selection.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = 1
End With
Selection.Borders(xlEdgeTop).LineStyle = xlNone
Selection.Borders(xlEdgeBottom).LineStyle = xlNone
Selection.Borders(xlEdgeRight).LineStyle = xlNone
Selection.Borders(xlInsideVertical).LineStyle = xlNone
Selection.Borders(xlInsideHorizontal).LineStyle = xlNone
ActiveCell.FormulaR1C1 = "Lib Niv5"
Range("P1").Select
Selection.Interior.ColorIndex = xlNone
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
With Selection.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = 1
End With
Selection.Borders(xlEdgeTop).LineStyle = xlNone
Selection.Borders(xlEdgeBottom).LineStyle = xlNone
Selection.Borders(xlEdgeRight).LineStyle = xlNone
Selection.Borders(xlInsideVertical).LineStyle = xlNone
Selection.Borders(xlInsideHorizontal).LineStyle = xlNone
ActiveCell.FormulaR1C1 = "agence / dep"
Range("Q1").Select
Selection.Interior.ColorIndex = xlNone
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
With Selection.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = 1
End With
Selection.Borders(xlEdgeTop).LineStyle = xlNone
Selection.Borders(xlEdgeBottom).LineStyle = xlNone
Selection.Borders(xlEdgeRight).LineStyle = xlNone
Selection.Borders(xlInsideVertical).LineStyle = xlNone
Selection.Borders(xlInsideHorizontal).LineStyle = xlNone
ActiveCell.FormulaR1C1 = "Poste"
Range("K2").Select
ActiveCell.FormulaR1C1 = "=VLOOKUP(C[-10],PPS!C[-8]:C[25],6,FALSE)"
Range("K2").Select
Selection.AutoFill Destination:=Range("K2:K50000")
Range("K2:K50000").Select
Range("L2").Select
ActiveCell.FormulaR1C1 = "=VLOOKUP(C[-11],PPS!C[-9]:C[24],8,FALSE)"
Range("L2").Select
Selection.AutoFill Destination:=Range("L2:L50000")
Range("L2:L50000").Select
ActiveWindow.ScrollColumn = 2
ActiveWindow.ScrollColumn = 3
ActiveWindow.ScrollColumn = 4
ActiveWindow.ScrollColumn = 5
Range("M2").Select
ActiveCell.FormulaR1C1 = "=VLOOKUP(C[-12],PPS!C[-10]:C[23],10,FALSE)"
Range("M2").Select
Selection.AutoFill Destination:=Range("M2:M50000")
Range("M2:M50000").Select
ActiveWindow.ScrollColumn = 3
Range("N2").Select
ActiveCell.FormulaR1C1 = "=VLOOKUP(C[-13],PPS!C[-11]:C[22],12,FALSE)"
Range("N2").Select
Selection.AutoFill Destination:=Range("N2:N50000")
Range("N2:N50000").Select
ActiveWindow.ScrollColumn = 4
ActiveWindow.ScrollColumn = 5
ActiveWindow.ScrollColumn = 6
Range("O2").Select
ActiveCell.FormulaR1C1 = "=VLOOKUP(C[-14],PPS!C[-12]:C[21],14,FALSE)"
Range("O2").Select
Selection.AutoFill Destination:=Range("O2:O50000")
Range("O2:O50000").Select
ActiveWindow.ScrollColumn = 5
ActiveWindow.ScrollColumn = 6
Range("P2").Select
ActiveCell.FormulaR1C1 = "=VLOOKUP(C[-15],PPS!C[-13]:C[20],16,FALSE)"
Range("P2").Select
Selection.AutoFill Destination:=Range("P2:P50000")
Range("P2:P50000").Select
Range("Q2").Select
ActiveCell.FormulaR1C1 = "=VLOOKUP(C[-16],PPS!C[-14]:C[19],18,FALSE)"
Range("Q2").Select
Selection.AutoFill Destination:=Range("Q2:Q50000")
Range("Q2:Q50000").Select
ActiveWindow.ScrollRow = 55
ActiveWindow.ScrollRow = 591
ActiveWindow.ScrollRow = 994
ActiveWindow.ScrollRow = 1530
ActiveWindow.ScrollRow = 1557
ActiveWindow.ScrollRow = 1745
ActiveWindow.ScrollRow = 2094
ActiveWindow.ScrollRow = 2791
ActiveWindow.ScrollRow = 3301
ActiveWindow.ScrollRow = 3355
ActiveWindow.ScrollRow = 3650
ActiveWindow.ScrollRow = 3677
ActiveWindow.ScrollRow = 3757
ActiveWindow.ScrollRow = 3864
ActiveWindow.ScrollRow = 3972
ActiveWindow.ScrollRow = 4025
ActiveWindow.ScrollRow = 4079
ActiveWindow.ScrollRow = 4106
ActiveWindow.ScrollRow = 4133
ActiveWindow.ScrollRow = 4160
ActiveWindow.ScrollRow = 4186
ActiveWindow.ScrollRow = 4213
ActiveWindow.ScrollRow = 4321
ActiveWindow.ScrollRow = 4508
ActiveWindow.ScrollRow = 4857
ActiveWindow.ScrollRow = 5125
ActiveWindow.ScrollRow = 5689
ActiveWindow.ScrollRow = 6574
ActiveWindow.ScrollRow = 6869
ActiveWindow.ScrollRow = 7379
ActiveWindow.ScrollRow = 7647
ActiveWindow.ScrollRow = 7942
ActiveWindow.ScrollRow = 8452
ActiveWindow.ScrollRow = 8747
ActiveWindow.ScrollRow = 9364
ActiveWindow.ScrollRow = 10625
ActiveWindow.ScrollRow = 11377
ActiveWindow.ScrollRow = 11779
ActiveWindow.ScrollRow = 12450
ActiveWindow.ScrollRow = 12584
ActiveWindow.ScrollRow = 12664
ActiveWindow.ScrollRow = 12825
ActiveWindow.ScrollRow = 12879
ActiveWindow.ScrollRow = 12960
ActiveWindow.ScrollRow = 13147
ActiveWindow.ScrollRow = 13255
ActiveWindow.ScrollRow = 13281
ActiveWindow.ScrollRow = 13362
ActiveWindow.ScrollRow = 13416
ActiveWindow.ScrollRow = 13442
ActiveWindow.ScrollRow = 13469
ActiveWindow.ScrollRow = 13496
ActiveWindow.ScrollRow = 13899
ActiveWindow.ScrollRow = 13979
ActiveWindow.ScrollRow = 14060
ActiveWindow.ScrollRow = 14221
ActiveWindow.ScrollRow = 14301
ActiveWindow.ScrollRow = 14274
ActiveWindow.ScrollRow = 14140
ActiveWindow.ScrollRow = 14060
ActiveWindow.ScrollRow = 13872
ActiveWindow.ScrollRow = 13791
ActiveWindow.ScrollRow = 13738
ActiveWindow.ScrollRow = 13603
ActiveWindow.ScrollRow = 13550
ActiveWindow.ScrollRow = 13523
ActiveWindow.ScrollRow = 13496
ActiveWindow.ScrollRow = 13469
ActiveWindow.ScrollRow = 13442
ActiveWindow.ScrollRow = 13416
ActiveWindow.ScrollRow = 13389
ActiveWindow.ScrollRow = 13362
ActiveWindow.ScrollRow = 13335
End Sub