Actualiser requête par onglet et message pendant mise à jour

Bonjour à tous,

J'ai besoin de votre aide pour finaliser un fichier et malgré mes recherches je ne trouve pas de solution.

A partir d'une extraction effectuée sur un logiciel de gestion des temps, je souhaite compléter plusieurs onglets (trames des salariés présents jour / nuit et des contrats à préparer). Après l'ajout des nouvelles valeurs dans mon onglet "Extraction", j'ai donc 3 onglets différents qui contiennent des requêtes et qui doivent se mettre à jour. Pour ce faire, j'ai ajouté un bouton "Actualiser pointage" (les personnes qui vont utiliser ce document ne maitrisent absolument pas excel à mon grand désespoir) avec une macro très basique "Actualiser tout".

Mon idée d'amélioration : étant donner qu'il y a pas mal de requêtes et que dans la pratique il n'est pas forcément nécessaire de tout actualiser d'un seul coup, je souhaiterai mettre à jour uniquement les requêtes présentes dans l'onglet de chaque bouton. Par exemple, si je suis dans l'onglet "POINTAGE JOUR", en cliquant sur le bouton présent dans cet onglet, j'actualise uniquement les requêtes de l'onglet.

Mon idée est elle réalisable ? Est il également possible d'ajouter un message lorsque l'actualisation est terminée (j'ai trouvé une macro pour mettre un petit message en bas à gauche au début de l'actualisation, mais le message disparait lorsqu'on passe sur l'actualisation des requêtes) ?

Je vous remercie d'avance pour votre aide !

6trame-pointage.xlsm (236.08 Ko)

Bonjour

Cela dépend aussi du PC : sur le mien c'est assez rapide...

Mais tu as peut-être beaucoup plus de lignes dans le vrai fichier...

On conseille de créer une requête initiale avec Source, Typage, suppression des colonnes qui ne serviront nulle part et de l'utiliser comme source des autres.

On peut utiliser

Range("IDE_USIC").Listobject.QueryTable.Refresh

pour chaque tableau à actualiser mais tous utilisant la même base octime cela ne change pas beaucoup

J'ai

  • ajouté 4 fichiers de paramètres
  • remplacé tes 9+9 requêtes de jour et 8+8 de nuit par 4 requêtes et donc 4 tableaux au lieu des 34
  • bufferisé Base (Requête initiale). Il faut tester avec et sans cette ligne pour voir le temps.
  • supprimer l'actualisation en arrière plan des requêtes peu compatible avec VBA
  • créé 1code VBA par bouton.

Contrats et Nuit sont quasi instantanés.

Jour est le plus long car pas mal de requêtes encore.

Je te laisse mesurer si tout cela gagne du temps.

Tu me diras...

12trame-pointage4.xlsm (199.22 Ko)

Bonjour,

Merci beaucoup pour cette idée de regrouper plusieurs requêtes en 1. Rien qu'avec ça le fichier s'actualise plus rapidement. J'ai fait mes tests en réel et ça me semble nikel. Je vais réfléchir à une meilleure disposition pour la seconde partie de l'onglet JOUR en utilisant cette idée.

Pour le reste c'est nikel aussi.

Par contre j'ai un bug sur la requête "BRANC BLOC" et je ne sais pas s'il est possible de contourner le problème. En fait dans cette requête je transpose la table puis renomme la colonne. Quand j'ai des noms qui correspondent aux critères de cette requête, tout est ok. Par contre lorsque je n'ai aucun salarié présent dans l'extraction (ce qui arrive les jours de weekend), j'ai un message d'erreur et la requête ne s'actualise pas. Comment faire pour exécuter "Colonnes renommées" seulement si "Table transposée" n'est pas vide ?

let
    Source = Excel.CurrentWorkbook(){[Name="octime"]}[Content],
    #"Type modifié" = Table.TransformColumnTypes(Source,{{"Matricule", type any}, {"Nom Prénom", type text}, {"Code ou abrégé de l'horaire", type text}, {"Poste", type text}, {"Population générique", type text}, {"Contrat", type any}, {"Date", type text}, {"Libellé de l'horaire", type text}, {"Heures de vacation", Int64.Type}, {"Temps du final", type number}, {"Societe", type text}, {"Service", type text}, {"Remplacé", type text}, {"Planning", type text}, {"Service concerné ?", type text}, {"Horaire", type text}, {"Concatener", type text}}),
    #"Lignes filtrées" = Table.SelectRows(#"Type modifié", each ([Poste] = "AGENT SERVICES HOSPITALIERS") and ([#"Code ou abrégé de l'horaire"] = "BL16" or [#"Code ou abrégé de l'horaire"] = "BL18" or [#"Code ou abrégé de l'horaire"] = "BL21" or [#"Code ou abrégé de l'horaire"] = "BL22") and ([Horaire] <> "")),
    #"Lignes triées1" = Table.Sort(#"Lignes filtrées",{{"Libellé de l'horaire", Order.Ascending}}),
    #"Colonnes supprimées" = Table.RemoveColumns(#"Lignes triées1",{"Matricule", "Poste", "Population générique", "Contrat", "Date", "Heures de vacation", "Temps du final", "Societe", "Service", "Remplacé", "Planning", "Service concerné ?", "Horaire", "Concatener", "Code ou abrégé de l'horaire", "Anomalie paramétrage octime"}),
    #"Colonnes permutées" = Table.ReorderColumns(#"Colonnes supprimées",{"Libellé de l'horaire", "Nom Prénom"}),
    #"Table transposée" = Table.Transpose(#"Colonnes permutées"),
    #"Colonnes renommées" = Table.RenameColumns(#"Table transposée",{{"Column1", "BRANC. BLOC"}})
in
    #"Colonnes renommées"

Bonjour

let
    Source = Base,
    #"Lignes filtrées" = Table.SelectRows(Source, each ([Poste] = "AGENT SERVICES HOSPITALIERS") and ([#"Code ou abrégé de l'horaire"] = "BL16" or [#"Code ou abrégé de l'horaire"] = "BL18" or [#"Code ou abrégé de l'horaire"] = "BL21" or [#"Code ou abrégé de l'horaire"] = "BL22") and ([Horaire] <> "")),
    #"Lignes triées1" = Table.Sort(#"Lignes filtrées",{{"Libellé de l'horaire", Order.Ascending}}),
    #"Colonnes supprimées" = Table.RemoveColumns(#"Lignes triées1",{"Matricule", "Poste", "Population générique", "Contrat", "Date", "Heures de vacation", "Temps du final", "Societe", "Service", "Remplacé", "Planning", "Service concerné ?", "Horaire", "Concatener", "Code ou abrégé de l'horaire", "Anomalie paramétrage octime"}, MissingField.Ignore),
    #"Colonnes permutées" = Table.ReorderColumns(#"Colonnes supprimées",{"Libellé de l'horaire", "Nom Prénom"}),
    #"En-têtes rétrogradés" = if Table.RowCount(#"Colonnes permutées")=0 then Table.DemoteHeaders(#"Colonnes permutées") else #"Colonnes permutées",
    #"Table transposée" = Table.Transpose(#"En-têtes rétrogradés"),
    SiValeur = Table.RenameColumns(#"Table transposée",{{"Column1", "BRANC. BLOC"}}),
    #"Valeur remplacée" = Table.ReplaceValue(SiValeur,"Libellé de l'horaire","",Replacer.ReplaceText,{"BRANC. BLOC"}),
    #"Lignes filtrées1" = Table.SelectRows(#"Valeur remplacée", each ([BRANC. BLOC] = "")),
    #"Personnalisée ajoutée" = Table.AddColumn(#"Lignes filtrées1", "Column2", each ""),
    #"Personnalisée ajoutée1" = Table.AddColumn(#"Personnalisée ajoutée", "Column3", each ""),
    #"Personnalisée ajoutée2" = Table.AddColumn(#"Personnalisée ajoutée1", "Column4", each ""),
    Finale = if Table.RowCount(#"Colonnes permutées")=0 then #"Personnalisée ajoutée2" else SiValeur
in
    Finale

RE

Un truc me turlupinait depuis hier : pour les requêtes liant les 8 ou 9

N'arrivant pas à ce que je voulais j'avais trouvé une solution de contournement qui me paraissait tordue

J'ai trouvé et donc simplifié les 4 requêtes : cela devrait accélérer davantage

La modif de BRANC BLOC y est incorporée ainsi que la référence à Base pour ceux qui avaient été oubliés

22trame-pointage5.xlsm (196.56 Ko)

Bonjour,

C'est vrai qu'avec cette version, les mises à jour sont encore plus rapide. Nikel aussi pour l'adaptation de BRANC BLOC.

Merci beaucoup pour votre aide !

Bonne journée

Rechercher des sujets similaires à "actualiser requete onglet message mise jour"