XL 2016 Créer des requêtes via VBA

  • Initiateur de la discussion Initiateur de la discussion Le novice
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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

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).
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
 
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.
 
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

Dernière édition:
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)
 
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.
 
🙂
Et surtout après une soirée arrosée ! Bonjour le code 😱

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:
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

Dernière édition:
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...
 
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:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
3
Affichages
490
Réponses
125
Affichages
13 K
Retour