Microsoft 365 Mise en forme d'un tableau via VBA

Lolo le normand

XLDnaute Nouveau
Bonsoir à tous,

je vous sollicite à nouveau pour une mise en forme d'un tableau via une macro à enregistrer dans mes macros personnelles.

Je vous joins un fichier anonymisé en exemple avec l'onglet 1(activite_agent) qui est le fichier d'origine avec un deuxième onglet qui est la mise en forme souhaitée:
1) supprimer la première ligne
2) dans la colonne C supprimer toutes les lignes qui ne contiennent pas total
3) dé-fusionner les colonnes C, D, E et F.
4) colonne A:
- remplacer Chalons par CNMR(maj)
- Remplacer Clermont par CNMR(maj)
- Supprimer le préfixe Site_SC_ pour ne garder que le suffixe
- supprime le préfixe Site_SD_ pour ne garde que le suffixe (dans le fichier il n'y en a pas mais suivant les journées il peut y en avoir)
5) Supprimer les colonnes T et U.

J'espère grâce à vous et votre site y arriver seul un jour.

En tous les cas merci d'avance à vous tous pour votre aide
Bonne soirée
 

Pièces jointes

  • Copie de 06___Activite_des_agents_anonyme.xls
    275 KB · Affichages: 18
Solution
bonjour @cp4 @TooFatBoy
voilà des copies d'écran
Regarde la pièce jointe 1154398
Regarde la pièce jointe 1154400
Regarde la pièce jointe 1154401
voilà ce qui se produit j'ai bien changé le nom qui est toujours activite_agent dans les mails que je reçois chaque jour avec ce rapport.
je suis bien dans mes macros personnelles
du coup je ne comprends pas
essaie avec ce code modifié
VB:
Option Explicit

Sub Mise_En_Forme3()
   Dim nb As Integer, i As Integer, tb
   Dim Plg As Range

  
   With ActiveSheet
      .Rows(1).Delete   'supprimer 1ère ligne
      ' supprimer les lignes visibles du filtre dont critère en colonne 3 est différent de total
      Set Plg = .Range("A1:U" & .Range("A" & Rows.Count).End(xlUp).Row)
      Plg.AutoFilter field:=3, Criteria1:="<>*TOTAL*"...

cp4

XLDnaute Barbatruc
Pour rendre ton code plus lisible sur le forum, tu peux utiliser la balise code=vb ;)

La différence entre .xls et .xlsm, c'est la version d'Excel.
.xls c'est pour Excel 2003 et précédents.
.xlsm c'est pour les versions après Excel 2003. (le m est pour dire qu'il y a prise en charge des marcos, sinon c'est .xlsx)

J'ai enregistré au format actuel par ce que tu es sous Excel 365.
Toutefois, tu peux garder le vieux format, mais ce serait dommage, voire stupide...
En complément à @TooFatBoy , fichier en xls ne peut avoir que 65556 Lignes par feuille
en xlsm 1 0485 576 lignes
 

TooFatBoy

XLDnaute Barbatruc
Si je comprends bien, la macro n'est pas dans un Workbook, donc le problème venait probablement de ThisWorkbook, et peut-être que ça aurait fonctionné en remplaçant par ActiveWorkbook ???


[edit]
Oups ! J'avais pas vu l'edit de #23, ni #27... :(
[/edit]
 
Dernière édition:

Cousinhub

XLDnaute Barbatruc
Bonsoir,
@Lolo le normand
J'arrive un peu tard, mais sincèrement, je pense que la 1ère solution, proposée par @OKBI , utilisant Power Query, serait bien moins compliquée à mettre en œuvre, surtout si vous êtes plusieurs à pouvoir extraire ces données.
En gros, il suffirait de copier le fichier joint ("Import.xlsm") dans un répertoire sur votre réseau. (A faire 1 fois)
Dans l'onglet "Base", le chemin du fichier va se mettre à jour automatiquement
Lors de la réception du mail contenant les données du jour, ouvrir ce fichier, puis :
- Cliquer dans la cellule A2, "Insertion/Tableau" _ Par défaut, Excel va nommer ce Tableau en "Tableau1" comme ceci : (Si ce n'est pas le cas, modifier le nom pour qu'il s'appelle "Tableau1")
1667584342573.png


- Enregistrer ce fichier dans le même répertoire que le fichier "Import.xlsm", et le nommer "Export.xlsx" (Très important, ce nom _ Bien veiller à mettre en "xlsx")
- Une fois ce fichier enregistré, ouvrir le fichier "Import"
- Reste juste à exploiter les données, c'est fini...

Bien plus simple que d'expliquer une macro, qui par définition (ou plutôt par expérience), ne fonctionne que le temps où la personne l'ayant mise en oeuvre est toujours en poste...

@ toi de voir
 

Pièces jointes

  • import.xlsm
    29.9 KB · Affichages: 3

Hasco

XLDnaute Barbatruc
Repose en paix
Bonjour,

Voici une proposition Power Query, sur la base du travail de @bhbh que je salue.
Les données sont extraites à partir du fichier du post#1 ré enregistré sous : "Export.xlsx"
Pas besoin de tableau dans la source.
Multi-remplacement de textes en une passe et élimination des 2 dernières colonnes par List.RemoveLastN

Cordialement
 

Pièces jointes

  • PQ import.xlsx
    30.5 KB · Affichages: 8

Cousinhub

XLDnaute Barbatruc
Bonsoir,
Tiens, comme tu passes pas là... 😉
Dans la colonne G "Temps de traitement", j'avais essayé de transformer les données en "Durée" (heures supp à 24:00), afin de pouvoir utiliser ces données "numériquement", et non en "Texte"..
Si tu as une solution..
Bonne soirée, et bon W-E à tous(tes)
 

Hasco

XLDnaute Barbatruc
Repose en paix
Re,

Euh Oui :
Dans l'étape de modificaction des types de colonne mettre time au lieu de text pour le type de colonne :
{"Temps de traitement", type text}
Devient
{"Temps de traitement", type time}

comme les données sont homogènes dans cette colonne et d'un format reconnu cela passera[

[Edition corrective]
La manipulation précédente aurait été suffisante avec des temps inférieurs à 1 jour.
Comme certains temps de traitements sont supérieurs, on peut laisser en type texte et à la fin* de la requête (ou au moins après filtrage des lignes*) rajouter une étape de transformation :
= Table.TransformColumns(#"Sélection colonnes",{{"Temps de traitement", each
let items = List.Transform(Text.Split(_,":"),Int32.From)
in #duration(Number.IntegerDivide(items{0},24),Number.Mod(items{0},24),items{1},items{2})
,type duration}})
qui transformera les données de la colonne en objet duration la colonne sera typée également.

* pour ne pas transformer inutilement des données qui seront exclues par le filtrage
[/Edition corrective]




A demain... peut-être
 

Pièces jointes

  • PQ import.xlsx
    30.5 KB · Affichages: 5
Dernière édition:

Lolo le normand

XLDnaute Nouveau
Bonjour,

Voici une proposition Power Query, sur la base du travail de @bhbh que je salue.
Les données sont extraites à partir du fichier du post#1 ré enregistré sous : "Export.xlsx"
Pas besoin de tableau dans la source.
Multi-remplacement de textes en une passe et élimination des 2 dernières colonnes par List.RemoveLastN

Cordialement
bonjour @Hasco
j'ai ouvert ton fichier le résultat est parfait mais comment dois je procéder avec le fichier que je reçois tous les jours pour obtenir le résultat que tu as obtenu?
Merci bien à toi
 

Hasco

XLDnaute Barbatruc
Repose en paix
Bonjour,
J'ai ouvert ton fichier le résultat est parfait mais comment dois je procéder avec le fichier que je reçois tous les jours pour obtenir le résultat que tu as obtenu?
C'est pas bien compliqué :

Dans la feuille "Base" cellule A1 nommée "Fichier" mettre le chemin complet vers le fichier.
Puis "Données/actualiser tout".

Si vous cumulez les données au fil du temps, soit vous copier/coller les données du jour dans votre tableau final, soit on peut vous faire une macro qui le fera.

cordialement
 

Discussions similaires

Réponses
22
Affichages
742

Statistiques des forums

Discussions
312 088
Messages
2 085 203
Membres
102 818
dernier inscrit
NeoMaint