Problème TCD et Import texte

Bonjour à toutes et à tous,

Je coince ! Merci d'avance pour votre aide.

Mon problème est le suivant, je construis un indicateur d'analyse du chiffre d'affaires dans excel constitué ainsi :

  • Onglet import dans lequel je récupère un fichier texte
  • A noter que cette importation insère systématiquement un colonne vide à la fin de l'intégration.
  • Un module VBA qui rafraichit le fichier texte et intègre des en-têtes de colonnes et des formules à la suite des données importées.
  • Des onglets comprenant des TCD qui sont tous rafraîchis à la fin du module VBA

Tout cela fonctionne à un gros détail près ! A chaque exécution de la macro les TCD perdent la partie "formule" de l'onglet import et je suis donc obligé de tous les reconstruire un par un !

Les données du fichier étant confidentielles difficile de le transmettre en l'état, mais voici le code, au cas où quelque chose sauteraient à vos yeux d'experts !

Merci beaucoup d'avance pour vos conseils,

Sub Import()

'

' Import Macro

'

'

' Importe le fichier texte

Application.ScreenUpdating = False

' Suppression des formules précédentes

Worksheets("Import").Activate

Range("T2").Select

Range(Selection, Cells(ActiveSheet.UsedRange.Columns.Count)).Select

Range(Selection, Selection.End(xlDown)).Select

Selection.Delete

Range("A1").Select

Worksheets("Accueil").Activate

Range("A1").Select

' MAJ des Données

Worksheets("Import").Activate

Range("A1").Select

Selection.QueryTable.Refresh BackgroundQuery:=False

'Intégration des Formules dans la feuille "Import" !!!! A modifier si ajout de nvelles formules !!!

Application.ScreenUpdating = False

Worksheets("Import").Activate

Cells(ActiveSheet.UsedRange.Columns.Count + 1).Select

' Ajoute la formule "ANNEE" !!!! A modifier si ajout de nvelles formules !!!

ActiveCell.FormulaR1C1 = "ANNEE"

ActiveCell.Offset(1, 0).Select

ActiveCell.FormulaLocal = "=ANNEE(J2)"

' Ajoute la formule "MOIS" !!!! A modifier si ajout de nvelles formules !!!

Cells(ActiveSheet.UsedRange.Columns.Count + 1).Select

ActiveCell.FormulaR1C1 = "MOIS"

ActiveCell.Offset(1, 0).Select

ActiveCell.FormulaLocal = "=SI(MOIS(J2)<10;""0""&MOIS(J2);MOIS(J2))"

' Ajoute la formule "périodeM" !!!! A modifier si ajout de nvelles formules !!!

Cells(ActiveSheet.UsedRange.Columns.Count + 1).Select

ActiveCell.FormulaR1C1 = "PERIODE M"

ActiveCell.Offset(1, 0).Select

ActiveCell.FormulaLocal = "=T2&""-""&U2"

' Ajoute la formule "Trimestre" !!!! A modifier si ajout de nvelles formules !!!

Cells(ActiveSheet.UsedRange.Columns.Count + 1).Select

ActiveCell.FormulaR1C1 = "TRIMESTRE"

ActiveCell.Offset(1, 0).Select

ActiveCell.FormulaLocal = "=CHOISIR(U2;1;1;1;2;2;2;3;3;3;4;4;4)"

' Ajoute la formule "Période T" !!!! A modifier si ajout de nvelles formules !!!

Cells(ActiveSheet.UsedRange.Columns.Count + 1).Select

ActiveCell.FormulaR1C1 = "PERIODE T"

ActiveCell.Offset(1, 0).Select

ActiveCell.FormulaLocal = "=T2&""-""&W2"

' Ajoute la formule "FN2B" !!!! A modifier si ajout de nvelles formules !!!

Cells(ActiveSheet.UsedRange.Columns.Count + 1).Select

ActiveCell.FormulaR1C1 = "FN2B"

ActiveCell.Offset(1, 0).Select

ActiveCell.FormulaLocal = "=SI(OU(H2=""COMPENSEES"";H2=""NON COMPENSEES"");""GMC"";H2)"

' Applique les formules sur l'ensemble de la BD !!!! A modifier si ajout de nvelles formules !!!

Application.ScreenUpdating = False

Worksheets("Import").Activate

Cells(ActiveSheet.UsedRange.Rows.Count, ActiveSheet.UsedRange.Columns.Count).Select

Range(Selection, Selection.Offset(0, -5)).Select

Range(Selection, Selection.End(xlUp)).Select

Selection.FillDown

Range("A1").Select

Worksheets("Accueil").Activate

Range("A1").Select

' Met à jour tout les TCD du fichier

Dim pt As Excel.PivotTable

Dim oSh As Excel.Worksheet

Application.ScreenUpdating = False

For Each oSh In ThisWorkbook.Worksheets

For Each pt In oSh.PivotTables

pt.RefreshTable

Next pt

Next oSh

MsgBox ("Mise à jour terminée... Merci !")

End Sub

bonjour

ma méthode suggère ceci :

  • un onglet Import brut, sans aucun traitement ni formules
  • un onglet Miroir qui est le miroir de Import, dans lequel il y a les traitements et les colonnes calculées
  • des onglets TCD basés sur Miroir

avantage : on ne modifie jamais Miroir (ni manuellement ni par VBA).

il suffit de mettre à jour Import et les TCD.

un onglet miroir contient des = qui sont le miroir des données que tu veux exploiter dans I

en A1 =Import!$A$1 formule à étendre vers le bas, te donne le miroir de la colonne A

faire de même pour les colonnes que tu veux.

Bonjour JMD,

Merci beaucoup pour cette réponse rapide !

C'est une solution à laquelle j'avais pensé (et que je garde toujours à l'idée de surcroît avec tes conseils !), mais le fichier importé représente environ 100 000 lignes, c'est pourquoi je cherchais une solution «directe» pour ne pas trop alourdir le fichier !

J'accueille donc ta proposition avec soulagement ( je la pratique sur d'autres indicateurs plus «lights») , mais garde le post ouvert au cas où l'on arrive collectivement à trouver une solution «en prise directe»,

Merci beaucoup pour ton aide,

re

le Miroir doit être limité aux seules colonnes intéressantes, ce qui n'alourdit pas trop

fais un essai avec 100 000 lignes

selon ton PC et le réseau, c'est jouable.

et sans prise de tête avec VBA

moins il y a de lignes de code, moins il y a de bugs

Bonjour,

Merci encore jmd pour tes conseils.

Je suis passé en mode miroir et j'ai pu conserver la stabilité des tcd.

Au passage cela allège considérablement le corps de la Macro !

Je passe donc le sujet en résolu, mais vais en ouvrir un autre pour ne pas être hors-sujet car je cherche maintenant comment dimensionner automatiquement le "miroir" en fonction de la taille de l'import... Je fait un tour dans le site avant de poster !

Merci encore.

Rechercher des sujets similaires à "probleme tcd import texte"