Récupération de données avec conditions sur autre fichier

bonsoir,

je suis novice sous excel et je ne connais pas du tout vba. j'aurais besoin d'aide pour trouver une macro pour importer des données dans un tableau situé dans un autre fichier.

je cherche à automatiser des listes d'appel journalières pour des élèves, dans des tableaux (appel midi.xls). chaque tableau a pour en-tête une date.

le fichier cantine.xls contient le tableau avec les données permettant de faire les listes (nom, classe, présence en cantine)

avec des colonnes à en-têtes avec dates.

serait-il possible, après avoir mis une date dans un tableau de appel midi.xls, que s'inscrivent dans le tableau les noms des enfants mangeant à la cantine ("x" dans la colonne de même date dans cantine.lxs), pour une classe donnée, en affichant le nom de cette classe quelque part dans appel midi.xls ?

j'avais pensé à une solution par macro avec un bouton par classe dans 'appel midi'. possible ?

19appel-midi.xlsx (13.00 Ko)
29cantine.xlsx (85.88 Ko)

Bonjour,

comme personne ne prend, je vais m'y mettre ...

A mettre dans le même dossier que Cantine.xlsx

et à vérifier bien sûr !!

13appel-midi.xlsm (21.59 Ko)

merci steelson,

là, j'ai le renvoi de données par la date. ça marche bien.

mais c'est possible de faire une recherche sur tous les onglets ? les onglets mensuels s'ajoutant, à tout scanner, quel que soit leur nom, excel trouvera la date dans cantine.xls. car à tenter de déchiffrer le code, je dois donc nommer précisément mes onglets si je garde ? au format mmm ?

  • et possible de ne remonter qu'un seul type de données, celle des noms ? dans un tableau à une seule colonne (voir modèle joint) ?
  • de filtrer ensuite sur le niveau, ou la classe. pour n'obtenir que la liste des élèves mangeant pour une classe ?
  • de faire 5 boutons "établir" lançant chacun la macro pour une classe ?
  • d'afficher deux tableaux pour deux jours sur une page, avec comptage des élèves (selon modèle joint - techniquement, je doute : deux macros en même temps ?) ?
  • mettre automatiquement dans le titre de feuille le nom de la classe correspondante ?
10appel-midi-cp.xlsx (13.03 Ko)
  • c'est possible de faire une recherche sur tous les onglets ?
  • et possible de ne remonter qu'un seul type de données, celle des noms ?
  • de filtrer ensuite sur le niveau, ou la classe. pour n'obtenir que la liste des élèves mangeant pour une classe ?
  • de faire 5 boutons "établir" lançant chacun la macro pour une classe ?
  • d'afficher deux tableaux pour deux jours sur une page, avec comptage des élèves (selon modèle joint - techniquement, je doute : deux macros en même temps ?) ?
  • mettre automatiquement dans le titre de feuille le nom de la classe correspondante ?

tout est possible, je vais tenter de rester "simple" ... en utilisant aussi les outils excel comme les TCD

la simplicité, vous avez raison.

et ça doit l'être, j'avance... ;D

faut que je trouve sur le net comment filtrer tout ça... et rappeler une donnée de cellule servant de filtre.

en tout cas, encore merci de votre aide.

Rem Attribute VBA_ModuleType=VBAModule

Option VBASupport 1

Sub ETABLIR()

Dim onglet As String

Set ws = ActiveSheet

quand = Range("A4").Value

onglet = Range("C4").Value

der = Range("A6").End(xlDown).Row

If der > 5 Then Rows("6:" & der).ClearContents

Workbooks.Open Filename:=ActiveWorkbook.Path & "\" & "Cantine.xlsx"

If FeuilleExiste(onglet) Then

Sheets(onglet).Select

j = 1

Do Until Cells(1, j) = quand Or j = 50

j = j + 1

Loop

If j < 50 Then

ligne = 6

For i = 2 To Range("A1").End(xlDown).Row

If Cells(i, j) <> "" Then

ws.Cells(ligne, 1) = Cells(i, "A")

ligne = ligne + 1

End If

Next

Else

MsgBox "La date """ & quand & """ n'a pas été trouvée !"

End If

Else

MsgBox "La feuille """ & onglet & """ n'exite pas !"

End If

Windows("Cantine.xlsx").Activate

ActiveWindow.Close Savechanges:=False

End Sub

Function FeuilleExiste(sNomFeuille As String) As Boolean

On Error GoTo Err_FeuilleExiste

FeuilleExiste = False

FeuilleExiste = Not ActiveWorkbook.Worksheets(sNomFeuille) Is Nothing

Err_FeuilleExiste:

End Function

- c'est possible de faire une recherche sur tous les onglets ?

ok, c'est fait
11appel-midi.xlsm (20.89 Ko)
  • et possible de ne remonter qu'un seul type de données, celle des noms ?
  • de filtrer ensuite sur le niveau, ou la classe. pour n'obtenir que la liste des élèves mangeant pour une classe ?
il faut donc que je conserve ces informations;

et pour la sélection je vais faire un tableau croisé dynamique (TCD)

- de faire 5 boutons "établir" lançant chacun la macro pour une classe ?

pourquoi 5 ? je n'ai pas compris s'il y avait une demande sous-jacente
  • d'afficher deux tableaux pour deux jours sur une page, avec comptage des élèves (selon modèle joint - techniquement, je doute : deux macros en même temps ?) ?
  • mettre automatiquement dans le titre de feuille le nom de la classe correspondante ?

si je fais un TCD ce sera le cas

5 boutons, un par classe. on appuie, on imprime. simple à utiliser. et peut-etre qu'un simple filtre sur la classe lors de la recherche des non vides dans les repas suffira, pas besoin de tdc.

on doit founir à chaque maitresse sa liste d'appel pour les deux jours à venir.

Sauf erreur de ma part, je ne compte pas 5 classes.

Et puis de toute façon je préfère être plus souple.

Je suis resté dans le "standard excel" pour les présentations et simplifier la macro (ou plutôt la rendre le plus universel)

27appel-midi.xlsm (32.35 Ko)

wouah, sacré travail...

l'idée est là, mais la forme n'est pas des plus pratiques pour faire l'appel. du tems imparti pour editer les listes et les lire à la sortie de la classe, je cherche plus ergonomique. un truc proche du modèle joint.

le précédent était parfait en terme d'ergonomie. pas moyen d'intégrer une condition de filtre dans le code ? en de "If Cells(i, j) <> "" [and classe = "CP"] Then

ou refiltrer après avoir trouver les noms avec "x" à la date trouvée ?

et de faire un "ELARGIR" par classe ?

Sheets(onglet).Select

j = 1

Do Until Cells(1, j) = quand Or j = 50

j = j + 1

Loop

If j < 50 Then

ligne = 6

For i = 2 To Range("A1").End(xlDown).Row

If Cells(i, j) <> "" Then

ws.Cells(ligne, 1) = Cells(i, "A")

ligne = ligne + 1

End If

Next

Else

si impossible de sortir deux listes de noms avec deux dates à choisir, je vais devoir discuter avec ma hiérarchie de la présentation. mais ça va nous coûter du papier... ;D

en tout cas, merci de votre aide.

ok

je vais coller à ta présentation ... pour économiser temps et papier !

avant cela ... voici une présentation plus souple et plus sympa

7appel-midi.xlsm (36.37 Ko)

bonjour,

joli.

peut-on :

  • enlever ou masquer les filtres 'ecole' 'niv.' au dessus du tableau, redondants avec les boutons. ou les placer au-dessus du titre en définissant une zone d'impression les excluant ? (je viens de bidouiller en couper/insérer, pas content... XD)
  • mettre les dates en en-têtes des listes de noms.
  • faire apparaître dans le titre du tableau le nom de la classe dont on affiche les noms.
  • mettre des noms à la place des "1", et mettre une colonne vide entre les deux listes de noms ?

et est-il possible de filtrer directement dans une macro ? sans passer par le tdc ?

le tdc est imposé ici pour pourvoir renvoyer deux listes de noms en cherchant sur deux dates en même temps ?

je n'ai toujours pas compris quelles étaient les "5 classes",

5 boutons, un par classe

je vois 2 écoles et 6 niveaux ...

on n'a prévu des listes d'appel que pour l'école primaire. mais va pour sept boutons avec toutes les classes.

2 versions ...

version V1 : pour ajouter un niveau, il suffit de dupliquer un onglet et le renommer en fonction du niveau à éditer

5appel-midi-v1.xlsm (29.99 Ko)
6appel-midi-v2.xlsm (35.67 Ko)

tope-là pour la v1. u do the job !

juste le bas de tableau à caler et c'est parfait.

il serait possible d'avoir un trait en bas de tableau (voir pdf joint) ? la fin de tableau doit être dans la macro, et je n'ai pas la main dessus pour modif via format de cellule, possible sur les en-têtes et le haut de page.

6appel-midi-v1.pdf (368.68 Ko)

par MFC (sinon c'est le bazar pour effacer)

Nota : le hic de la version 1 est que si un élève est en "CM 1" ou "CM1ère" ou "CM_1" il n'apparaîtra pas, donc attention à l'orthographe !

6appel-midi-v1.xlsm (30.62 Ko)
Rechercher des sujets similaires à "recuperation donnees conditions fichier"