XL 2016 Créer des requêtes via VBA

Le novice

XLDnaute Junior
bonsoir
dans mon fichier il y a un onglet par mois et un onglet récap.
chaque jour je saisie manuellement les événements survenus et leur durée, il peut y avoir plusieurs événements par jour ou aucun événement.
chaque événement survient en un lieu il y a 19 lieux en tout.
sur mon onglet récap j'ai le nb d’événements par lieu et le cumul des durées.
j'aimerai un userform qui permettrai d'alimenter mon fichier récap en interrogeant les autres onglets.
cet userform me permettrai de requeter en fonction d'une période, d'un mois précis, de l'année entière; il faudrait aussi que je puisse une fois la période définie pouvoir choisir en fonction de la durée des événements (exemple je veux tous les événements du 1er janvier au 25 mai ayant pour durée moins de 10)
j'espère avoir té assez clair dans mes propos, merci d'avance
 

Pièces jointes

  • evenement.xlsm
    58.8 KB · Affichages: 18
Solution
En affectation d'un tableau sur un Range, les dates sont mises en format anglais sauf quand le mois > 12.
Donc il faut repasser une couche sur la colonne des dates en utilisant CDate() pour obtenir le format local français.

ATTENTION: fichier modifié le 09/03/2020 à 21h40 pour fixer un bug sur l'utilisation de la fonction WorksheetFunction.Transpose() (voir ci-dessous l'explication).

Dudu2

XLDnaute Barbatruc
Bonjour,
Faudrait que tu commences par renommer (Onglet Formules puis Gestionnaire de noms) tes tableaux pour que leurs noms fassent plus logiquement référence aux feuilles auxquelles il appartiennent.
Ex: Tableau133 -> TableauMars ou Tableau03
 

Dudu2

XLDnaute Barbatruc
Dans ton tableau Recap il n'y a pas le mêmes colonnes que dans les tableaux des mois.
Il faut évidemment que ce soit la même chose: Date / Lieu / Durée.

D'autre part tes tableaux structurés ont une ligne total ajouté à la main ce qui fait que dans les informations retournées par Excel, cette ligne est considérée comme une ligne de donnée.
En général on met une ligne total par la structure du tableau. En l'occurrence le total ne s'applique qu'à la durée. Est-ce bien utile ?
2020-03-07_150133.jpg

Je prévois quand même un paramètre pour l'exclure des lignes de données.
 

Dudu2

XLDnaute Barbatruc
Je n'ai pas utilisé de UserForm, les cellules suffisent (sélection ou double-clic).
Fais quelques tests, et avise...

Dans le code de la feuille Recap, la constante LigneTotal indique si oui ou non ce total manuel est présent.

Fichier modifié à 16h40 pour une petite amélioration de la saisie des dates (si date présente le calendrier la prend comme date initiale en présentation)
VB:
Private Const LigneTotal = 1    '1 ou 0 = Présence d'une ligne Total MANUELLLE (hors structure tableau) dans les données des tableaux
 

Pièces jointes

  • evenement-1.xlsm
    111.2 KB · Affichages: 8
Dernière édition:

Le novice

XLDnaute Junior
c'est superbe merci.
comment pourrais je pour être plus fin dans ma recherche, faire en sorte que mon fichier récap affiche les stations de 1 a 19 et que pour chacune d'elle il y ai le total d’événements et de durées en fonction de la requête?
sinon pour ne pas dénaturer tout votre travail peut on à partir de votre tableau récap générer un deuxième tableau sans pour autant passer par un TCD (avec juste un bouton)
 

Dudu2

XLDnaute Barbatruc
Avant l'affichage il faut faire un tri sur le lieu et soit ajouter 2 colonnes à droite avec les totaux en regard de la dernière ligne de chaque lieu, soit ajouter une ligne en fin de chaque lieu avec les totaux dans les colonnes existantes selon ton choix.
 

Dudu2

XLDnaute Barbatruc
:)
Et surtout après une soirée arrosée ! Bonjour le code :eek:

En fait les colonnes supplémentaires c'est plus simple.

Il y a un problème avec les dates que VBA interprète en format anglais 12/01/2020 devient 01/12/2020. Je ne comprends pas pourquoi.
 
Dernière édition:

Dudu2

XLDnaute Barbatruc
En affectation d'un tableau sur un Range, les dates sont mises en format anglais sauf quand le mois > 12.
Donc il faut repasser une couche sur la colonne des dates en utilisant CDate() pour obtenir le format local français.

ATTENTION: fichier modifié le 09/03/2020 à 21h40 pour fixer un bug sur l'utilisation de la fonction WorksheetFunction.Transpose() (voir ci-dessous l'explication).
 

Pièces jointes

  • evenement-2.xlsm
    114.7 KB · Affichages: 5
Dernière édition:

Dudu2

XLDnaute Barbatruc
Veiller à prendre le dernier fichier...
Je vois que je ne suis pas le seul couche tard !
En général je prends les sujets non déjà répondus, quand ils tiennent la route et ne représentent pas un trop gros développement. Sinon des tas d'autres experts interviennent donc pas de soucis...
 

Dudu2

XLDnaute Barbatruc
En travaillant sur un autre sujet je me suis rendu compte d'un problème lié au WorksheetFunction.Transpose() qui réduit à 1 dimension un tableau à 2 dimensions dont la résultante transposée n'a qu'un seul élément en 1ère dimension. En conséquence l'indiçage n'est plus le même selon que la transposition a réduit ou non à 1 dimension le tableau résultant. Ce qui génère un message d'erreur à l'exécution lorsqu'on est dans ce cas.

J'ai donc codé une fonction Transpose() qui n'a pas cet inconvénient et modifié le fichier du post #11 pour fixer le bug lié au cas particulier d'un résultat = 1.
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
311 725
Messages
2 081 945
Membres
101 849
dernier inscrit
florentMIG