VBA TCD Tableau/plage jusqu'à la dernière ligne remplie
Jerome
-
Jerome -
Jerome -
Bonjour,
Je me permets de solliciter votre aide car je sèche sur un TCD en VBA. Je ne suis vraiment pas très fort et par conséquent je réalise toutes mes macro avec l'enregistreur, mais avec leurs lots d'erreurs. Du coup je repasse par dessus en VBA, mais comme bien souvent je sèche.
Voici mon souci, j'ai créé un TCD (avec l'enregistreur), dans ma feuille nommée "Suivi". Je sélectionne la cellule A1 pour le début de mon TCD, et je vais dans une feuille nommée "IEP" chercher ma plage. Actuellement, la macro enregistre la plage de la cellule A1 à S8320 (dernière ligne non vide). Seulement voilà les autres semaines ma plage va varier et aura peut être 10.000 ou même 15.000 lignes. Du coup, je voudrais modifier le code ci dessous simplement pour avoir la dernière ligne non vide et non S8320 correspondant à l'exécution de ma macro via l'enregistreur
Sheets("Suivi").Select
ActiveWindow.ScrollRow = 1
Range("A1").Select
Application.CutCopyMode = False
ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
"IEP!R1C1:R8320C19", Version:=6).CreatePivotTable TableDestination:= _
"Suivi!R1C1", TableName:="Tableau croisé dynamique1", DefaultVersion:=6
Sheets("Suivi").Select
Cells(1, 1).Select
Du coup, j'ai fait des tentatives comme ci dessous, mais ça ne fonctionne pas et ça me renvoie à l'erreur d'exécution 1004 (La référence n'est pas valide). Pourriez vous m'aider s'il vous plait ?
Sheets("Suivi").Select
ActiveWindow.ScrollRow = 1
Range("A1").Select
'Variable dernière ligne remplie de l'onglet IEP de la colonne A
LIEP = Sheets("IEP").Columns(1).Find("*", , , , xlByColumns, xlPrevious).Row
ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
"IEP!$A$1:$S$ & LIEP", Version:=6).CreatePivotTable TableDestination:= _
"Suivi!R1C1", TableName:="Tableau croisé dynamique1", DefaultVersion:=6
Sheets("Suivi").Select
Cells(1, 1).Select
Merci à tous pour votre aide,
Configuration: Windows / Chrome 102.0.0.0
Je me permets de solliciter votre aide car je sèche sur un TCD en VBA. Je ne suis vraiment pas très fort et par conséquent je réalise toutes mes macro avec l'enregistreur, mais avec leurs lots d'erreurs. Du coup je repasse par dessus en VBA, mais comme bien souvent je sèche.
Voici mon souci, j'ai créé un TCD (avec l'enregistreur), dans ma feuille nommée "Suivi". Je sélectionne la cellule A1 pour le début de mon TCD, et je vais dans une feuille nommée "IEP" chercher ma plage. Actuellement, la macro enregistre la plage de la cellule A1 à S8320 (dernière ligne non vide). Seulement voilà les autres semaines ma plage va varier et aura peut être 10.000 ou même 15.000 lignes. Du coup, je voudrais modifier le code ci dessous simplement pour avoir la dernière ligne non vide et non S8320 correspondant à l'exécution de ma macro via l'enregistreur
Sheets("Suivi").Select
ActiveWindow.ScrollRow = 1
Range("A1").Select
Application.CutCopyMode = False
ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
"IEP!R1C1:R8320C19", Version:=6).CreatePivotTable TableDestination:= _
"Suivi!R1C1", TableName:="Tableau croisé dynamique1", DefaultVersion:=6
Sheets("Suivi").Select
Cells(1, 1).Select
Du coup, j'ai fait des tentatives comme ci dessous, mais ça ne fonctionne pas et ça me renvoie à l'erreur d'exécution 1004 (La référence n'est pas valide). Pourriez vous m'aider s'il vous plait ?
Sheets("Suivi").Select
ActiveWindow.ScrollRow = 1
Range("A1").Select
'Variable dernière ligne remplie de l'onglet IEP de la colonne A
LIEP = Sheets("IEP").Columns(1).Find("*", , , , xlByColumns, xlPrevious).Row
ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
"IEP!$A$1:$S$ & LIEP", Version:=6).CreatePivotTable TableDestination:= _
"Suivi!R1C1", TableName:="Tableau croisé dynamique1", DefaultVersion:=6
Sheets("Suivi").Select
Cells(1, 1).Select
Merci à tous pour votre aide,
Configuration: Windows / Chrome 102.0.0.0
A voir également:
- VBA TCD Tableau/plage jusqu'à la dernière ligne remplie
- Tableau word - Guide
- Tableau ascii - Guide
- Aller à la ligne excel - Guide
- Supprimer dernière page word - Guide
- Partager photos en ligne - Guide
2 réponses
Bonjour Jerome
Tu y étais presque ! la bonne écriture n'est pas "IEP!$A$1:$S$ & LIEP" mais "IEP!$A$1:$S$" & LIEP
Cdlmnt
Via
Tu y étais presque ! la bonne écriture n'est pas "IEP!$A$1:$S$ & LIEP" mais "IEP!$A$1:$S$" & LIEP
Cdlmnt
Via
Re,
Oui cela fonctionne sans déclaration.
Par défaut sans DIM toutes les variables seront de type Variant (pouvant prendre 22 octets de mémoire, alors qu'une variable de type Integer ne prend que 2 octets voir : https://docs.microsoft.com/fr-fr/office/vba/language/reference/user-interface-help/data-type-summary, voilà la 1ere utilité de la déclaration
La 2eme utilité est de permettre de s'y retrouver voir : https://www.excel-pratique.com/fr/vba/variables
Cdlmnt
Via
Oui cela fonctionne sans déclaration.
Par défaut sans DIM toutes les variables seront de type Variant (pouvant prendre 22 octets de mémoire, alors qu'une variable de type Integer ne prend que 2 octets voir : https://docs.microsoft.com/fr-fr/office/vba/language/reference/user-interface-help/data-type-summary, voilà la 1ere utilité de la déclaration
La 2eme utilité est de permettre de s'y retrouver voir : https://www.excel-pratique.com/fr/vba/variables
Cdlmnt
Via
Franchement et sincèrement je te dis un trèèès grand merci pour ton aide. Je suis nul et j'espère m'améliorer ;-) mais en attendant c'est grâce à des personnes comme toi que j'arrive à avancer.
J'en profite pour te poser une petite question si tu le veux bien et pour ma compréhension, quand je crée des variables type :
'Variable dernière ligne remplie de l'onglet IEP de la colonne A
LIEP = Sheets("IEP").Columns(1).Find("*", , , , xlByColumns, xlPrevious).Row
'Variable pour déterminer la dernière ligne remplie de la colonne M
ligne = Sheets("IEP S-1").Columns(13).Find("*", , , , xlByColumns, xlPrevious).Row
'Variable derligne = Envoie la formule jusqu'à la dernière ligne remplie de la colonne D
derligne = Range("D" & Rows.Count).End(xlUp).Row
Je n'ai pas créé de DIM correspondant (LIEP, ligne et derligne) par erreur au début, mais ça fonctionne très bien sans ? Est ce logique car je n'ai pas compris le sens des DIM et qu'il n'y en a pas besoin ? Est ce normal que ça fonctionne bien sans ?
Voici des exemples de codes où je m'en sers
'Envoyer le Oui jusqu'à la dernière ligne
Range("R2").AutoFill Destination:=Range("R2:R" & derligne)
ActiveCell.Formula = "=IFERROR(VLOOKUP(N2,'IEP S-1'!$M$2:$R$" & ligne & ",6,0),""Non"")"
Range("S2").Select
'Envoyer la formule rechercheV jusqu à la dernière ligne
Selection.AutoFill Destination:=Range("S2:S" & derligne)
'Selection de la plage du TCD jusquà la dernière ligne
ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
"IEP!$A$1:$S$" & LIEP, Version:=6).CreatePivotTable TableDestination:= _
"Suivi!R1C1", TableName:="Tableau croisé dynamique1", DefaultVersion:=6
Sheets("Suivi").Select
Merci pour ton aide :-)