Range à définir
Bonjour je suis débutante en VBA et je rame un peu.
J'ai un TCD qui prend en compte deux onglets à charger au préalable et l'ancien code (que je n'ai pas fait) prenait en compte une plage bien précise.
Cependant les deux fichiers source à charger changent souvent et la plage aussi du coup.
On me demande d'adapter le code pour que la macro prennent en compte une plage qui s'adapte au colonne et ligne ajoutées
Voici l'ancien code:
Sheets(4).Select
ActiveWorkbook.PivotCaches.Create(SourceType:=xlConsolidation, SourceData:= _
Array(Array("'2'!R1C1:R305C22", "Item1"), Array("'3'!R1C1:R109C25", "Item2")), _
'Version:=xlPivotTableVersion14).CreatePivotTable TableDestination:= _
'"[MacroRapproBilling_Test4.xlsm]TCD!R1C1", TableName:="PivotTable3", _
'DefaultVersion:=xlPivotTableVersion14Il se terminait à la ligne 305 et la colonne 22 pour le premier fichier et à la ligne 109 et colonne 25 pour le deuxième fichier.
Voici ce que j'ai fait
Dim DerLig As Long
Dim DerCol As String
DerLig = Range("A" & Rows.Count).End(xlUp).Row 'dernière ligne du fichier
DerCol = Cells(1, Columns.Count).End(xlToLeft).Column 'dernière colonne du fichiermais je sais pas comment le remplacer dans cette ligne, je ne connais pas du tout la syntaxe de VBA
j'ai essayé plein de chose comme Array("'2'!R1C1:R(DerLig)C(DerCol) ", par exemple mais rien ne marche
Comment écrire cela ?
Merci par avance
Bonjour,
Je pense que ce serait :
"'2'!R1C1:R" & DerLig & "C" & DerColMais les sources ne sont pas des tableaux structurés. Ça pourrait être plus facile !
"'2'!MonTableau"Enfin, j'imagine...
Cdlt,
Merci d'avoir répondu
Du coup j'ai remplacé par ça:
ActiveWorkbook.PivotCaches.Create(SourceType:=xlConsolidation, SourceData:= _
Array(Array("'2'!R1C1:R" & DerLig & "C" & DerCol, "Item1"), Array("'3'!R1C1:R109C25", "Item2")), _
Version:=xlPivotTableVersion14).CreatePivotTable TableDestination:= _
"[Copie de MacroRapproBilling_Test5.xlsm]TCD!R1C1", TableName:="PivotTable3", _
DefaultVersion:=xlPivotTableVersion14
Ca me met "argument ou appel de procédure incorrect
Après j'ai essayé ça:
Tableau = R1C1:R & DerLig & C & DerCol
Sheets(4).Select
ActiveWorkbook.PivotCaches.Create(SourceType:=xlConsolidation, SourceData:= _
Array(Array("'2'!Tableau", "Item1"), Array("'3'!Tableau", "Item2")), _
Version:=xlPivotTableVersion14).CreatePivotTable TableDestination:= _
"[Copie de MacroRapproBilling_Test5.xlsm]TCD!R1C1", TableName:="PivotTable3", _
DefaultVersion:=xlPivotTableVersion14
Ca m'a mis "erreur de syntaxe"
J'ai aussi essayé Tableau = Cells(1,1):Cells(DerLig,DerCol) mais ca ne marche pas nn plus.
J'ai vraiment du mal avec la syntaxe
Jai essayé aussi :
Dim DerLig As Variant
Dim DerCol As Variant
Dim Tableau As Range
DerLig = Range("A" & Rows.Count).End(xlUp).Row 'dernière ligne du fichier
DerCol = Cells(1, Columns.Count).End(xlToLeft).Column 'dernière colonne du fichier
'Cells(1, DerCol & DerLig).Name = "Plage"
Tableau = Range(DerCol, DerLig)
'Et jai aussi essayé Tableau = Range(DerCol & DerLig)
Sheets(4).Select
ActiveWorkbook.PivotCaches.Create(SourceType:=xlConsolidation, SourceData:= _
Array(Array("'2'!R1C1:Tableau", "Item1"), Array("'3'!R1C1:R109C25", "Item2")), _
Version:=xlPivotTableVersion14).CreatePivotTable TableDestination:= _
"[Copie de MacroRapproBilling_Test5.xlsm]TCD!R1C1", TableName:="PivotTable3", _
DefaultVersion:=xlPivotTableVersion14
Ca m'a mis la méthode Range de l'objet _Global a échoué
En fait, ce que je voulais dire, c'est de créer (si ce n'est pas déjà le cas) un tableau structuré (via Insertion/Tableau) sur excel pour la plage '2'!R1C1:R305C22 (et pour l'autre aussi).
Par exemple, vous les appelez Tab2 et Tab3 (à moins qu'ils soient déjà nommés bien sûr). Ensuite, en remplaçant dans le code ainsi :
Sheets(4).Select
ActiveWorkbook.PivotCaches.Create(SourceType:=xlConsolidation, SourceData:= _
Array(Array("Tab2", "Item1"), Array("Tab3", "Item2")), _
'Version:=xlPivotTableVersion14).CreatePivotTable TableDestination:= _
'"[MacroRapproBilling_Test4.xlsm]TCD!R1C1", TableName:="PivotTable3", _
'DefaultVersion:=xlPivotTableVersion14
'ou
Sheets(4).Select
ActiveWorkbook.PivotCaches.Create(SourceType:=xlConsolidation, SourceData:= _
Array(Array(range("Tab2"), "Item1"), Array(range("Tab3"), "Item2")), _
'Version:=xlPivotTableVersion14).CreatePivotTable TableDestination:= _
'"[MacroRapproBilling_Test4.xlsm]TCD!R1C1", TableName:="PivotTable3", _
'DefaultVersion:=xlPivotTableVersion14Ça devrait être mieux.
Après, je ne garantis rien car les TCD ne sont pas vraiment ma spécialité...
Et aussi, le second problème c'est que c'est un code obtenu par l'enregistreur de macros. On ne comprend pas vraiment les liens entre les données. Ce serait peut-être plus simple si vous précisiez quels sont les classeurs, les feuilles et les plages nommés impliquées.
Cdlt,
D'accord j'ai compris le cheminement j'y avais pensé aussi pour avoir une facilité de lecture.
Mais ça ne change pas mon problème qui est que je ne sais pas comment écrire cette formule car je souhaite changer des nombres fixes (305 et 22 pour l'un et 109 et 25 pour l'autre) dans cette formule ....R305C22 par des chiffres variables qui changent avec le temps
Voici le Sub en entier
Sub tcddd()
Dim DerLig As Variant
Dim DerCol As Variant
'Dim Tableau As Variant
DerLig = Range("A" & Rows.Count).End(xlUp).Row 'dernière ligne du fichier
DerCol = Cells(1, Columns.Count).End(xlToLeft).Column 'dernière colonne du fichier
'Cells(1, DerCol & DerLig).Name = "Plage"
'Tableau = Range($DerLig & $DerCol)
Sheets(4).Select
ActiveWorkbook.PivotCaches.Create(SourceType:=xlConsolidation, SourceData:= _
Array(Array("'2'!R1C1:R & DerLig & "C" "& DerCol, "Item1"), Array("'3'!R1C1:R109C25", "Item2")), _
Version:=xlPivotTableVersion14).CreatePivotTable TableDestination:= _
"[Copie de MacroRapproBilling_Test5.xlsm]TCD!R1C1", TableName:="PivotTable3", _
DefaultVersion:=xlPivotTableVersion14
' Sheets(4).Select
' ActiveWorkbook.PivotCaches.Create(SourceType:=xlConsolidation, SourceData:= _
' Array(Array("'2'!R1C1:R305C22", "Item1"), Array("'3'!R1C1:R109C25", "Item2")), _
' Version:=xlPivotTableVersion14).CreatePivotTable TableDestination:= _
' "[MacroRapproBilling_Test4.xlsm]TCD!R1C1", TableName:="PivotTable3", _
' DefaultVersion:=xlPivotTableVersion14
ActiveSheet.PivotTables("PivotTable3").DataPivotField.PivotItems( _
"Nombre de Valeur").Position = 1
ActiveSheet.PivotTables("PivotTable3").PivotFields("Page1").Orientation = _
xlHidden
With ActiveSheet.PivotTables("PivotTable3").PivotFields("Colonne")
.PivotItems("CLE").Visible = False
.PivotItems("Clé comptable").Visible = False
.PivotItems("CLIENT_TIERS").Visible = False
'.PivotItems("Code Compte").Visible = False
.PivotItems("Code Document").Visible = False
' *** modifié****
.PivotItems("Code Devise").Visible = False
.PivotItems("Code Etat Ligne").Visible = False
.PivotItems("Code Societe").Visible = False
.PivotItems("CREDIT_NOTE").Visible = False
.PivotItems("Date Paiement").Visible = False
.PivotItems("Date Piece").Visible = False
.PivotItems("Date Saisie").Visible = False
.PivotItems("Date Valeur").Visible = False
.PivotItems("DATE_ECHEANCE").Visible = False
.PivotItems("DATE_EMISSION_FACTURE").Visible = False
.PivotItems("DATE_FACTURATION").Visible = False
.PivotItems("DEVISE").Visible = False
.PivotItems("ENCOURS").Visible = False
.PivotItems("ENCOURS_EUR").Visible = False
.PivotItems("ENTITE").Visible = False
.PivotItems("Exercice").Visible = False
.PivotItems("Montant CODA").Visible = False
.PivotItems("Montant Billing").Visible = False
.PivotItems("Libelle Ligne").Visible = False
.PivotItems("LIBELLE_CLIENT").Visible = False
.PivotItems("MONTANT_HT").Visible = False
.PivotItems("MONTANT_TVA").Visible = False
.PivotItems("PAIEMENT").Visible = False
'.PivotItems("PCI").Visible = False
.PivotItems("DOCUMENT_CODE").Visible = False
'**** modifié****
.PivotItems("PERIODE").Visible = False
.PivotItems("Ref Externe1").Visible = False
.PivotItems("Ref Externe2").Visible = False
.PivotItems("Ref Externe3").Visible = False
.PivotItems("Ref Externe4").Visible = False
.PivotItems("Ref Externe5").Visible = False
End With
With ActiveSheet.PivotTables("PivotTable3").PivotFields("Colonne")
.PivotItems("Ref Externe6").Visible = False
.PivotItems("REF_FACTURE").Visible = False
.PivotItems("SERVICE").Visible = False
.PivotItems("Solde devise société").Visible = False
.PivotItems("Utilisateur").Visible = False
.PivotItems("VERIF").Visible = False
End With
With ActiveSheet.PivotTables("PivotTable3").PivotFields("Nombre de Valeur")
.Caption = "Somme de Valeur"
.Function = xlSum
End With
Range("H9").Select
With ActiveSheet.PivotTables("PivotTable3")
.ColumnGrand = False
.RowGrand = False
End With
Range("J20").Select
End SubJ'ai testé un truc comme ça en variant la syntaxe de Tab1=.... et Tab2=... mais ça ne fonctionne pas
Dim DerLig As Variant
Dim DerCol As Variant
Dim Tab1 As Integer
Dim Tab2 As Integer
DerLig = Range("A" & Rows.Count).End(xlUp).Row 'dernière ligne du fichier
DerCol = Cells(1, Columns.Count).End(xlToLeft).Column 'dernière colonne du fichier
Tab1 = Range("R1C1:R305C22") 'à tester puis modifier avec DerLig et DerCol
Tab2 = Range("R1C1:R109C25") 'à tester puis modifier avec DerLig et DerCol
Sheets(4).Select
ActiveWorkbook.PivotCaches.Create(SourceType:=xlConsolidation, SourceData:= _
Array(Array("'2'!Tab1", "Item1"), Array("'3'!Tab2", "Item2")), _
Version:=xlPivotTableVersion14).CreatePivotTable TableDestination:= _
"[Copie de MacroRapproBilling_Test5.xlsm]TCD!Mais est-ce que ces 2 plages sources de données sont sous forme de tableaux structurés ? Si oui, quels sont les noms de tableaux ?
Car c'est ça qui permettra de rendre la taille source dynamique.
J'ai modifié votre code de manière à ce qu'il soit plus propre. Il ne sera pas forcément opérationnel dès maintenant mais on devrait s'approcher du résultat escompté. Il faudra seulement contrôler toutes les références aux feuilles (j'ai nommé d'après ce que j'ai compris) et adapter les noms de tableaux :
Sub tcddd()
Dim Cache1$, Cache2$, Dest$
Dim pcache as PivotCache
Dim tcd as PivotTable
Dim pItem as PivotItem
Cache1 = Sheets("2").range("Tab2").address(referencestyle:=xlR1C1, external:=true) '<<< adapter
Cache2 = Sheets("3").range("Tab3").address(referencestyle:=xlR1C1, external:=true) '<<<
Dest = Sheets("TCD").range("A1").address(referencestyle:=xlR1C1, external:=true) '<<<
Set pcache = Activeworkbook.PivotCaches.Create _
SourceType:=xlConsolidation, _
SourceData:=Array(Array(Cache1, "Item1"), Array(Cache2, "Item2")), _
Version:=xlPivotTableVersion14
set tcd = pcache.CreatePivotTable _
TableDestination:=Dest, _
TableName:="PivotTable3", _
DefaultVersion:=xlPivotTableVersion14
with tcd
.DataPivotField.PivotItems"Nombre de Valeur").Position = 1
.PivotFields("Page1").Orientation = xlHidden
with .PivotFields("Colonne")
for each pItem in .PivotItems
.visible = False
next pItem
end with
With .PivotFields("Nombre de Valeur")
.Caption = "Somme de Valeur"
.Function = xlSum
End With
.ColumnGrand = False
.RowGrand = False
End With
End SubCdlt,
Ouh la tu t'es pris la tête c'est super gentil merci bcp !!!
C'est vrai que il aurai fallu que je transmette la macro et les fichiers mais les données utilisées sont confidentielles.
je peux juste partager le code de la macro mais pas les deux fichiers qu'il faut utiliser dsl
La macro prend en compte d'abord un fichier Billing qui est en onglet 2 puis un fichier CODA qui est en onglet 3 ensuite elle synthétise les données des deux fichiers et me donne un TCD en onglet 4
Voici le code complet de la macro
Sub mainrappro()
Clear
Dim macro As Workbook
Set macro = ActiveWorkbook
'ouverture et import du premier fichier
If MsgBox("Selectionnez le fichier Billing", vbOKCancel, "Demande de confirmation") = vbOK Then
fichier = Application.GetOpenFilename
If fichier = False Then Exit Sub
Set current = Workbooks.Open(fichier, UpdateLinks:=False)
Else
Exit Sub
End If
current.Worksheets(1).Activate
Cells.Select
Selection.Copy
macro.Worksheets(2).Activate
Range("A1").Select
Selection.PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode = False
current.Close False
'ouverture et import du second fichier
If MsgBox("Selectionnez le fichier CODA non-lettré", vbOKCancel, "Demande de confirmation") = vbOK Then
fichier = Application.GetOpenFilename
If fichier = False Then Exit Sub
Set current = Workbooks.Open(fichier, UpdateLinks:=False)
Else
Exit Sub
End If
current.Worksheets(2).Activate
Cells.Select
Selection.Copy
macro.Worksheets(3).Activate
Range("A1").Select
Selection.PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode = False
current.Close False
'creation des verifs pour le fichier 1
macro.Worksheets(2).Activate
Impp = Cells(Application.Rows.Count, "A").End(xlUp).Row
Range("T1") = "CLE"
Range("T2").Formula = "=C2&F2"
Range("T2").AutoFill Destination:=Range("T2:T" & Impp), Type:=xlFillDefaul
Range("U1") = "Montant CODA"
'Range("U1") = "INDEX/EQUIV"
Range("U2").Select
ActiveCell.Formula = "=INDEX('3'!C[-15],MATCH('2'!C[-1],'3'!C[2],0))"
Range("U2").AutoFill Destination:=Range("U2:U" & Impp), Type:=xlFillDefaul
Range("V1") = "VERIF"
Range("V2").FormulaR1C1 = "=IFERROR(IF(RC[-10]=RC[-1], ""OK"",""KO""),""no data"")"
Range("V2").AutoFill Destination:=Range("V2:V" & Impp), Type:=xlFillDefaul
'creation des verifs pour le fichier 2
macro.Worksheets(3).Activate
Impp2 = Cells(Application.Rows.Count, "A").End(xlUp).Row
Range("W1") = "CLE"
Range("W2").Formula = "=B2&R2"
Range("W2").AutoFill Destination:=Range("W2:W" & Impp2), Type:=xlFillDefaul
'Range("X1") = "INDEX/EQUIV"
Range("X1") = "Montant Billing"
Range("X2").Select
ActiveCell.FormulaR1C1 = "=INDEX('2'!C[-12],MATCH('3'!C[-1],'2'!C[-4],0))"
Range("X2").AutoFill Destination:=Range("X2:X" & Impp2), Type:=xlFillDefaul
Range("Y1") = "VERIF"
Range("Y2").FormulaR1C1 = "=IFERROR(IF(RC[-1]=RC[-19], ""OK"",""KO""),""no data"")"
Range("Y2").AutoFill Destination:=Range("Y2:Y" & Impp2), Type:=xlFillDefaul
Sheets(2).Select
Columns("T:V").Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
Columns("A:V").EntireColumn.AutoFit
Sheets(3).Select
Columns("W:Y").Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
Columns("A:Y").EntireColumn.AutoFit
mef
tcddd
miseenforme
End Sub
Sub Clear()
Sheets(2).Select
Cells.Select
Selection.ClearContents
Sheets(3).Select
Cells.Select
Selection.ClearContents
Sheets(4).Select
Cells.Select
Selection.ClearContents
Sheets(1).Select
End Sub
Sub tcddd()
Sheets(4).Select
ActiveWorkbook.PivotCaches.Create(SourceType:=xlConsolidation, SourceData:= _
Array(Array("'2'!R1C1:R305C22", "Item1"), Array("'3'!R1C1:R109C25", "Item2")), _
Version:=xlPivotTableVersion14).CreatePivotTable TableDestination:= _
"[MacroRapproBilling_Test4.xlsm]TCD!R1C1", TableName:="PivotTable3", _
DefaultVersion:=xlPivotTableVersion14
ActiveSheet.PivotTables("PivotTable3").DataPivotField.PivotItems( _
"Nombre de Valeur").Position = 1
ActiveSheet.PivotTables("PivotTable3").PivotFields("Page1").Orientation = _
xlHidden
With ActiveSheet.PivotTables("PivotTable3").PivotFields("Colonne")
.PivotItems("CLE").Visible = False
.PivotItems("Clé comptable").Visible = False
.PivotItems("CLIENT_TIERS").Visible = False
'.PivotItems("Code Compte").Visible = False
.PivotItems("Code Document").Visible = False
' *** modifié****
.PivotItems("Code Devise").Visible = False
.PivotItems("Code Etat Ligne").Visible = False
.PivotItems("Code Societe").Visible = False
.PivotItems("CREDIT_NOTE").Visible = False
.PivotItems("Date Paiement").Visible = False
.PivotItems("Date Piece").Visible = False
.PivotItems("Date Saisie").Visible = False
.PivotItems("Date Valeur").Visible = False
.PivotItems("DATE_ECHEANCE").Visible = False
.PivotItems("DATE_EMISSION_FACTURE").Visible = False
.PivotItems("DATE_FACTURATION").Visible = False
.PivotItems("DEVISE").Visible = False
.PivotItems("ENCOURS").Visible = False
.PivotItems("ENCOURS_EUR").Visible = False
.PivotItems("ENTITE").Visible = False
.PivotItems("Exercice").Visible = False
.PivotItems("Montant CODA").Visible = False
.PivotItems("Montant Billing").Visible = False
.PivotItems("Libelle Ligne").Visible = False
.PivotItems("LIBELLE_CLIENT").Visible = False
.PivotItems("MONTANT_HT").Visible = False
.PivotItems("MONTANT_TVA").Visible = False
.PivotItems("PAIEMENT").Visible = False
'.PivotItems("PCI").Visible = False
.PivotItems("DOCUMENT_CODE").Visible = False
'**** modifié****
.PivotItems("PERIODE").Visible = False
.PivotItems("Ref Externe1").Visible = False
.PivotItems("Ref Externe2").Visible = False
.PivotItems("Ref Externe3").Visible = False
.PivotItems("Ref Externe4").Visible = False
.PivotItems("Ref Externe5").Visible = False
End With
With ActiveSheet.PivotTables("PivotTable3").PivotFields("Colonne")
.PivotItems("Ref Externe6").Visible = False
.PivotItems("REF_FACTURE").Visible = False
.PivotItems("SERVICE").Visible = False
.PivotItems("Solde devise société").Visible = False
.PivotItems("Utilisateur").Visible = False
.PivotItems("VERIF").Visible = False
End With
With ActiveSheet.PivotTables("PivotTable3").PivotFields("Nombre de Valeur")
.Caption = "Somme de Valeur"
.Function = xlSum
End With
Range("H9").Select
With ActiveSheet.PivotTables("PivotTable3")
.ColumnGrand = False
.RowGrand = False
End With
Range("J20").Select
End Sub
Sub mef()
Sheets(2).Select
Columns("C:C").Select
Selection.Cut
Columns("A:A").Select
Selection.Insert Shift:=xlToRight
Sheets("3").Select
Columns("B:B").Select
Selection.Cut
Columns("A:A").Select
Selection.Insert Shift:=xlToRight
End Sub
Sub miseenforme()
Range("D3:D4").Select
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.ThemeColor = xlThemeColorAccent1
.TintAndShade = 0.799981688894314
.PatternTintAndShade = 0
End With
Range("D4").Select
ActiveCell.FormulaR1C1 = ""
Range("A4:D4").Select
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
Selection.Borders(xlEdgeLeft).LineStyle = xlNone
Selection.Borders(xlEdgeTop).LineStyle = xlNone
With Selection.Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
Selection.Borders(xlEdgeRight).LineStyle = xlNone
Selection.Borders(xlInsideVertical).LineStyle = xlNone
Selection.Borders(xlInsideHorizontal).LineStyle = xlNone
Range("D4").Select
ActiveCell.FormulaR1C1 = "Ecart"
Selection.Font.Bold = True
derniereligne = Cells(Rows.Count, 1).End(xlUp).Row
Range("D5").Select
ActiveCell.FormulaR1C1 = "=IF(RC[-2]>RC[-1],RC[-2]-RC[-1],(RC[-2]-RC[-1])*-1)"
Range("D5").Select
Selection.AutoFill Destination:=Range("D5:D" & derniereligne), Type:=xlFillDefault
ActiveWindow.DisplayGridlines = False
Range("B2").Select
ActiveCell.FormulaR1C1 = "Billing"
Selection.Font.Bold = True
Range("C2").Select
ActiveCell.FormulaR1C1 = "CODA non lettré"
Selection.Font.Bold = True
End SubJe vais regarder le code que tu m'a partager et essayer de le comprendre et de l'adapter en tt cas merci de ton temps !
Oui les deux fichiers sources sont des tableaux structurés
Oulaaaa, en tout cas, je ne vais pas regarder le tien parce que ça fait beaucoup
Dans ce cas, ça change les choses puisque j'ai considéré que tout était sur le même fichier.
Il faut adapter en ajouter le classeur, ex :
Cache1 = Workbooks("Billing.xls").Sheets("2")....... 'tous ces noms sont à adapter éventuellementEt faire de même pour les autres.
D'accord je vais essayé comme ça merci pour ton aide !!!