VBA TCD Tableau/plage jusqu'à la dernière ligne remplie

Fermé
Jerome - 26 juin 2022 à 00:44
 Jerome - 27 juin 2022 à 23:52
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
A voir également:

2 réponses

via55 Messages postés 14495 Date d'inscription mercredi 16 janvier 2013 Statut Membre Dernière intervention 7 novembre 2024 2 735
26 juin 2022 à 02:37
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
1
Bonjour 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 :-)
0
via55 Messages postés 14495 Date d'inscription mercredi 16 janvier 2013 Statut Membre Dernière intervention 7 novembre 2024 2 735
26 juin 2022 à 15:29
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
1
Re bonjour Via,

Merci beaucoup pour cette explication très clair. En effet, j'en comprends bien mieux l'intérêt. Ma macro étant déjà très lourde j'ai en effet tout intérêt à remplacer ma variable en integer.

Au plaisir et encore merci pour tout

Amicalement
0