IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Conception Discussion :

création planning avec Bdd : question optimisation


Sujet :

Conception

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    139
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 139
    Points : 124
    Points
    124
    Par défaut création planning avec Bdd : question optimisation
    bonjour,

    j'ai développé un outil de planning pour les RH, le but est d'avoir un minima d'options un outil sera acheté par le service d'ici 2018-2019, l'ancien est hors d'usage.

    pour faire tampon j'ai crée un planning se composant de :

    - feuille planning : affiche le planning suivant la date / mois sélectionné associé aux équipes que l'utilisateur souhaite visualiser.
    - feuille BDD_personnel : ensemble des personnes et leur affectation (avec un code id unique pour les recherches en base)
    structure :
    Equipe Grade Nom Prénom Id Personnel UNIQUE
    A Adc nomX prenomY 1

    - feuille BDD_planning : sauvegarde du planning
    Id Personnel UNIQUE date typeConges
    1 01/01/2018 CA
    - feuille config : quelques éléments de configuration
    En B2 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =DATE(An;MOIS((1&"/"&moisEnCours&"/"&0));1) '  An et moisEnCours référence au mois choisi par l'utilisateur en feuille planning
    En E3:F17 , les type de congés avec le nom texte à droite

    j'ai fait simple pour l'instant, le but qu'on puisse ajouter des éléments (CA/RTT/...) à terme une ligne qui résume par jour les stats de simples somme.
    je bloque un peu sur les recherches en base de données.
    sur 1 mois j'ai déjà 122 lignes... je crains que le système sur les quelques mois de transition soit lourd et rame beaucoup (les ordi administratifs ne sont pas des bêtes de course et chez moi ça lag déjà)
    nota: je n'ai même pas encore pris en compte la suppression d'un élément si l'utilisateur efface un CA par exemple


    j'ai déjà mon idée : imbrication de boucles ce qui ralenti le processus.

    l'idée serait elle de basculer les bdd sur excel avec relationnel excel / access ? est ce rapide et simple en mise en oeuvre ?
    changement complet de type de recherche ? mais lequel ?

    ci dessous, voici mon code pour lire la bdd et écrire dans la bdd depuis la feuille planning.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
     
    '*
    '* on actualise la base de donnée, soit insertion, soit modification
    '*********************************************************************************
    Sub creerMajBDD()
     
      ' on bloque l'actualisation
      Application.ScreenUpdating = False
     
      Dim WsPlanning As Worksheet
      Dim WsBddPlanning As Worksheet
     
      Set WsPlanning = Worksheets("planning")
      Set WsBddPlanning = Worksheets("BDD_planning")
     
      Dim dateEnCours As Date
      Dim ligneEnCours, derniereLigne As Long ' correspondance 1ere et derniere ligne du tableau
      Dim premiereColonne, derniereColonne, colonneEnCours As Long ' correspondance 1ere et derniere colonne du tableau ( /!\ attention si mois < 31j trouver concordance /!\ )
     
      Dim premiereLigneBDD, derLigneBDD, indexRecherche As Long ' derniere ligne BDD
      Dim trouveDansBDD As Integer ' valeur de test
     
      Dim nom, debut, TypeConges As Variant
      Dim idPersonnel As Long ' données à trouver puis récupérer
      Dim Tbl()
     
      derniereLigne = WsPlanning.Cells(Rows.Count, 1).End(xlUp).Row ' on rechercher la derniere ligne
      premiereColonne = 6  ' jour 1
      derniereColonne = WsPlanning.Range("A6").SpecialCells(xlCellTypeLastCell).Column  ' on rechercher la derniere colonne en ligne 6, valeur 36 maxi = jour 31
     
      ' on parcours les lignes du tableau
      ' on définit la première ligne à traiter (ligne 1 du tab qui est row=7)
      For ligneEnCours = 7 To derniereLigne
     
        idPersonnel = WsPlanning.Cells(ligneEnCours, 5) ' on récupère l'id de la personne
     
          ' on parcours les colonnes du tableau
          ' on définit la première colonne à traiter
          For colonneEnCours = premiereColonne To derniereColonne
     
              TypeConges = WsPlanning.Cells(ligneEnCours, colonneEnCours) ' on récupère le type de congés indiqué
     
              ' Si un évenement est présent on continu.
              If TypeConges <> "" Then
                ' recherche de la date
                 dateEnCours = WsPlanning.Cells(5, colonneEnCours) ' on récupère le type de congés indiqué
     
                 ' Debug.Print idPersonnel & " > date: " & dateEnCours & " | event: " & TypeConges
     
                 premiereLigneBDD = 2
                 derLigneBDD = WsBddPlanning.Cells(Rows.Count, 1).End(xlUp).Row ' on rechercher la derniere ligne
     
                 Tbl = WsBddPlanning.Range("A1:C" & derLigneBDD)
     
                 trouveDansBDD = -1
                 ' on recherche l'id et la date (date passée en string pour faciliter le travail)
                 For indexRecherche = premiereLigneBDD To UBound(Tbl)
                    If Tbl(indexRecherche, 1) = idPersonnel And CStr(Tbl(indexRecherche, 2)) = dateEnCours Then
                         Debug.Print "Element trouvé : " & idPersonnel & " et " & dateEnCours & " ligne : [" & indexRecherche & "]"
                         trouveDansBDD = 1
                        Exit For
                    End If
                 Next indexRecherche
     
                 Application.EnableEvents = False
     
                 '*** Gestion de la donnée trouvée ou non en BDD ***
                 If trouveDansBDD = -1 Then    ' on ajoute la donnée en base
                    Debug.Print "+++ on ajoute " & idPersonnel & " et " & dateEnCours & " type= " & TypeConges
                     WsBddPlanning.Cells(derLigneBDD + 1, 1) = idPersonnel
                     WsBddPlanning.Cells(derLigneBDD + 1, 2) = CStr(dateEnCours)
                     WsBddPlanning.Cells(derLigneBDD + 1, 3) = TypeConges
     
                 ElseIf trouveDansBDD = 1 Then ' on modifie la donnée dans la base
                    Debug.Print "on modifie " & idPersonnel & " et " & dateEnCours & " type= " & TypeConges
                    WsBddPlanning.Cells(indexRecherche, 3) = TypeConges
     
                 End If
     
                 Application.EnableEvents = True
              End If
     
          Next colonneEnCours
            ' fin parcours colonne du tableau
     
      Next ligneEnCours
      ' fin parcours ligne du tableau
     
     
       ' on réactive l'actualisation
       Application.ScreenUpdating = True
       WsPlanning.Range("A1").Select
    End Sub
     
     
     
    '*
    '* création du planning fonction de la base de données des personnels sélectionnés
    '*********************************************************************************
    Sub creerPlanning()
      ' on bloque l'actualisation
      Application.ScreenUpdating = False
     
      Dim WsDestination As Worksheet
      Dim bd As Worksheet
     
      Set bd = Worksheets("BDD_planning")
      Set WsDestination = Worksheets("planning")
     
      Dim lg As Long, cl As Long
      Dim nbligne As Long
      Dim nom, debut, TypeConges, idPersonnel As Variant
      Dim temp As Object
      Dim ligPlan, n, i, d As Long
     
     
      lg = WsDestination.Cells(Rows.Count, 1).End(xlUp).Row
      WsDestination.Range("F7:AJ" & lg).ClearContents
      WsDestination.Range("F7:AJ" & lg).ClearFormats
     
      For nbligne = 2 To bd.[C65000].End(xlUp).Row
     
     
        idPersonnel = bd.Cells(nbligne, 1)
        debut = bd.Cells(nbligne, 2)
        TypeConges = bd.Cells(nbligne, 3)
     
     
        Set temp = WsDestination.[E:E].Find(what:=idPersonnel, lookat:=xlWhole)
        If Not temp Is Nothing Then
     
     
            If (Year(debut) = Year(Sheets("Config").Range("B2").Value) And Month(debut) = Month(Sheets("Config").Range("B2").Value)) Then
     
                Application.EnableEvents = False
                [couleurs].Find(TypeConges, lookat:=xlWhole).Copy
     
                WsDestination.Cells(temp.Row, Day(debut) + 5) = TypeConges
                WsDestination.Cells(temp.Row, Day(debut) + 5).PasteSpecial Paste:=xlPasteFormats
     
                Application.EnableEvents = True
     
            End If
     
       End If
       Next nbligne
     
       redimPlanning  ' on modifie la taille du tableau pour affichage propre des lignes
     
       ' on réactive l'actualisation
       Application.ScreenUpdating = True
       WsDestination.Range("A1").Select
    End Sub
    par avance merci pour vos conseils
    (j'ai hésité à poster en zone vba excel au lieu de conception désolé si erreur)

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    139
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 139
    Points : 124
    Points
    124
    Par défaut
    (je me permets de remonter)

    Bonjour à toutes/tous,

    personne ne saurait me dire si mon choix était correct où s'il faut vraiment que je reprenne tout mon code pour repartir sur un autre format / fonctionnement ?

    [edit] j'ai commencé à faire des recherches sur les connections / insertion / lecture avec un fichier accdb , je voulais surtout savoir si c'est vraiment plus efficace et nécessaire de passer par ce type de chose au lieu de peut être juste un oubli / légère modification dans mon code vu qu'actuellement il fonctionne , à parcourir le forum il est souvent question de passer par access pour contrer la lenteur d'excel en utilisation bdd

  3. #3
    Expert éminent sénior

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 518
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 518
    Points : 16 448
    Points
    16 448
    Par défaut
    Bonjour

    Ce n'est pas la lenteur qui est le plus en cause, c'est qu'une vraie base de données n'est pas gérable par Excel sans écrire des quantités de code pour remplacer que qu'un SGBD fait nativement...

    Mais si tu ne connais rien à Access ce n'est pas évident pour toi...

    Si tu gardes Excel, privilégier une liste de données (tableau au sens table) avec toutes les infos, liées à des tables de référence (également sous forme de tableaux) pour faciliter et sécuriser la saisie puis exploiter un maximum par TCD et PowerQuery (add on gratuit intégré maintenant dans 2016).

    Limiter le code aux contrôles de saisie pour maintenir la cohérence...

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    139
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 139
    Points : 124
    Points
    124
    Par défaut
    bonjour 78chris,

    merci de l'intérêt que tu portes à ma question.
    je suis curieux et j'ai envie d'apprendre donc je me suis lancé dans du Access. Le Sql j'en ai pas mal fait durant mes études mais il y a 10 ans.
    je reprends le codage depuis quelques temps pour l'intérêt du service (et le mien) donc je m'intéresse un peu à tout.

    je me suis fait une bdd access et je crée des requêtes test là, j'ai réussi des appels simple via Excel déjà donc je vais perfectionner cela voir si cela fonctionne
    developpez regorge d'exemple et de cours donc j'ai pas mal bachoté.

  5. #5
    Expert éminent sénior

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 518
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 518
    Points : 16 448
    Points
    16 448
    Par défaut
    Bonjour

    Dans Access il y a le QBE (Query by example) donc les 3/4 du temps on fait du sql comme Monsieur Jourdain de la prose.

    Le plus important est de bien concevoir la structure de la base Tables, champs, relations.

    Le code doit quasiment se limiter aux contrôles de saisie : certains contrôles ne peuvent simplement définis dans la structure, notamment les interdépendants mais utiliser au maximum les possibilités natives.

    Access et Excel fonctionnent bien ensemble donc outre les requêtes, on peut compléter par des statistiques et analyses avec les TCD d'Excel.

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    139
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 139
    Points : 124
    Points
    124
    Par défaut
    bonjour,
    je reviens vers vous car j'ai repris mon code avec l'accès une bdd "accdb" via access.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
        lg = WsDestination.Cells(Rows.Count, 1).End(xlUp).Row
         'Debug.Print "******** nb ligne " & lg
         For nbligne = 7 To lg
     
            ' gestion avec l'id de la personne
            With WsDestination
                idPersonnel = .Cells(nbligne, 5).Value
               ' Debug.Print idPersonnel
     
                ' on recherche ses data perso
                listeDates = Get_ListConges(CDate(periodeEnCours), idPersonnel)
     
                ' parcours et insertion
                For nbVal = 2 To UBound(listeDates)
                  'Debug.Print listeDates(nbVal, 1) & " - " & listeDates(nbVal, 2) & " - " & listeDates(nbVal, 3)
                  .Cells(nbligne, 5 + Day(listeDates(nbVal, 3))).Value = listeDates(nbVal, 4)
                Next nbVal
            End With
     
         Next nbligne
    sachant que juste avant suivant si l'on modifie les équipes, je fais une requêtes sur les équipes pour en extraire les informations et mettre à jour la liste avant de lancer cette partie du code.

    ce qui fait plusieurs boucles imbriquées et donc pas très très efficace je pense.
    j'ai fait pas mal de recherche et suis arrivé combler le problème avec une requête unique sur la bdd.


    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    TRANSFORM First(table_dataPlanning.CodeDataPlanning) AS PremierDeCodeDataPlanning
    SELECT table_Personnel.Equipe, table_Personnel.Grade, table_Personnel.Nom, table_Personnel.Prenom, table_Personnel.Id
    FROM table_Personnel INNER JOIN table_dataPlanning ON table_Personnel.Id = table_dataPlanning.id_P
    WHERE table_Personnel.Equipe='1' AND ((table_dataPlanning.DateDataPlanning) Between #1/1/2018# And #01/06/2018#)
    GROUP BY table_Personnel.Equipe, table_Personnel.Grade, table_Personnel.Nom, table_Personnel.Prenom, table_Personnel.Id
    PIVOT table_dataPlanning.DateDataPlanning;

    nota : dans mon code je passe un paramètre l'équipe et la date de début, je fais un calcul pour obtenir la date de fin. il s'agit ici de la requête que j'avais crée sur Access en test

    cette requête dans Access, me revoit exactement ce dont j'aurais besoin, ainsi plus de boucle imbriquée je peux obtenir en une fois toutes les données, plus qu'à en utiliser le résultat.

    de là, j'ai un soucis dans excel via macro j'ai utilisé le même principe que pour mes autres requêtes, cependant le tableaux variant() en retour de la function m'indique :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
        vartestList = getListeCroise(1, "06/01/2018")
        Debug.Print "nombre de data : " & UBound(vartestList) ' cela me revoit 0
    après plusieurs recherches il y a une notion de pivotTables à prendre en compte créer quand on utilise les TRANFORM / PIVOT mais je n'ai rien trouver lié à des Bdd Access.
    Autre élément trouvé sur le forum, une notion de :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    'CurrentDb.Execute "SELECT * INTO [Nouvelle_Table] FROM [Requête_Transform]"
    je ne comprends pas cette requête et il n'y a aucune autre information ni exemple par la suite (notion de requête dans une précédente requête et son utilisation après).
    quelqu'un pourrait m'éclairer ?
    suis je dans la bonne direction ou je recherche quelques chose qui n'a rien à voir ??

    pour information voici la structure ainsi qu'un aperçu du rendu excel souhaité que j'ai obtenu de diverses manières mais les chargements étaient long et loin de répondre à un usage quotidien (mauvaise implémentation je pense).

    Nom : implémentation_Bdd.jpg
Affichages : 698
Taille : 66,8 Ko

    Nom : explication planning 001.jpg
Affichages : 745
Taille : 757,2 Ko

  7. #7
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 940
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 940
    Points : 28 938
    Points
    28 938
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    J'ai parcouru toute la discussion mais je ne vois pas clairement ce que tu utilises finalement comme table de données (Access ou Excel)
    Si tu utilises une liste de données Excel et que tu souhaites filtrer les données suivant critères, je te conseille d'utiliser la méthode AdvancedFilter de l'objet Range dont l'avantage est que la commande pour filtrer se résume à une ligne de code et les critères sont gérés de la même manière que ceux du QBE d'access.
    A lire Les filtres avancés ou élaborés dans Excel

  8. #8
    Expert éminent sénior

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 518
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 518
    Points : 16 448
    Points
    16 448
    Par défaut
    Bonjour à tous

    Dans la structure Access il serait bien que les relations soient clairement établies de 1 à N avec intégrité référentielle.

    Si les données sont dans Access on peut garder la requête d"analyse croisée existante et lui passer des paramètres soit via VBA (plus rapide ne général) soit via une liaison comme expliqué là http://www.excel-formations.fr/Trucs...s/ACCESS01.php.

    On peut aussi utiliser une requête plus simple et croiser celle-ci via un TCD dans Excel.

    La requête que tu ne comprends pas sert à créer une nouvelle table dans Access où sont stockés les résultats de la requête : pas sûr que ce soit utile... sauf si on modifie peu la requête (les paramètres ne change que toutes les semaines par exemple) et qu'on consulte très souvent le résultat.

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    139
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 139
    Points : 124
    Points
    124
    Par défaut
    Bonjour,

    @Philippe Tulliez

    Au début j'étais parti sur un fichier excel dont 2 feuilles me servaient de bdd (message #1 de ce topic).
    bdd_planning
    bdd_personnel

    puis avec peu d'informations, j'étais très lent à afficher le planning. j'en suis venu à la conclusion que mon code était mal défini. j'imbrique trop de boucles ce qui selon moi ralenti le tout.

    Après différentes lectures j'en suis venu au fait que avec des avis là dessus, excel n'était pas adapté à utiliser ce type de base de données seul.
    j'ai donc pris le parti de créer un fichier Access sur lequel j'ai crée mes tables et je fais des tests de requêtes pour valider ce que je crée en code vba par la suite dans Excel (au travail Access n'est pas disponible, je ne peux donc pas utiliser Access à 100%)

    j'ai crée des requêtes qui fonctionnent, j'arrive à afficher les éléments mais... j'ai encore beaucoup de temps de latence sur l'affichage du planning.
    encore des boucles malgré les requêtes. j'ai donc continué mes recherches pour ressortir pour N personnes toutes les dates correspondant ainsi tout ressort en une fois.
    la requête transform présentée au dessus renvoi sur Access ceci, la sortie de ma fonction requête par un variant() m'indique sur un test Ubount(...) que j'ai 0 lignes, alors que mes autres types de requêtes fonctionnent de cette façon.
    le transform / pivot doit avoir une autre structure ou alors , peut être que je ne devrais pas faire ainsi peut être.
    ça fait plusieurs jours que j'essai de comprendre pourquoi excel ne me donne pas accès au résultat alors que Access lui m'affiche bien le tableau présenté ci dessous.

    Nom : exemple.jpg
Affichages : 669
Taille : 302,6 Ko


    @78chris

    donc au final je crée une table "temporaire" dans access avec ce type de requête. d'où l'exemple que j'avais trouvé indiquant que l'on se doit de faire une recherche sur cet élément. .....
    pour les 1-N, oui j'avoue ne pas avoir implémenté à 100% les tables/ jointures je pensais pouvoir passer outre.


    --
    > de 1 à N personnes , chercher tout ce qui correspond à la personne en cours sur la période et parcourir le résultat de requête de 1 à N éléments pour insérer dans le bon jour .

    ce type de recherche est selon moi problématique, d'où cette solution du transform qui me permettait de parcourir directement le tableau obtenu avec .cells(x,y) et insérer aux bons endroits directement

  10. #10
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 940
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 940
    Points : 28 938
    Points
    28 938
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Donc tu peux importer la requête d'Acces dans excel et utiliser la méthode AdvancedFilter qui permet de filtrer des milliers de données en un clic

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    139
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 139
    Points : 124
    Points
    124
    Par défaut
    Citation Envoyé par Philippe Tulliez Voir le message
    Bonjour,
    Donc tu peux importer la requête d'Acces dans excel et utiliser la méthode AdvancedFilter qui permet de filtrer des milliers de données en un clic
    sur ma requête via le transform ?? comment utiliser une telle requête dans excel ? je n'arrive pas à en extraire les données et 78Chris indique que cela est utilisé sur Access pour créer une autre table avec les résultats obtenu.

    ou alors en simplifiant la requête pour extraire toutes les données correspondant et via la création d'un TCD on utilise les AdvancedFilter ? même principe comment créer un tel tableau avec une requête.
    lisant le lien que tu présentais tu conseillerais de rester 100% excel et non bdd via Access

  12. #12
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 940
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 940
    Points : 28 938
    Points
    28 938
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    cela dépend de toi, tu as deux solutions celle de Chris que je salue au passage et celle que je te propose qui consiste à importer directement le résultat de la requête d'Access dans une feuille de ton classeur et ensuite faire une exportation dans une autre feuille de ce classeur en utilisant la méthode AdvancedFilter qui se basera sur les critères définis dans cette feuille et que tu peux modifier à ta guise.

    Importer le résultat de la requête d'Access manuellement c'est dans l'onglet [Données], groupe Données Externe, commande Depuis Access et ensuite sélectionner la base de données et ensuite la requête. Cela opération peut bien entendu être automatisée par une procédure VBA.

    L'importation à l'aide de la procédure AdvancedFilter se limite à ces quelques lignes ci-dessous.
    Pour l'exemple, les critères sont sur la plage A1:B2 de la feuille où se trouve la procédure événementielle Worksheet_Change. Il suffit donc de modifier un critère pour visualiser immédiatement le résultat
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub Worksheet_Change(ByVal Target As Range)
      Dim rngData As Range
      If Not Application.Intersect(Target, Range("A2:B2")) Is Nothing Then
         Set rngData = shtImport.Range("A1").CurrentRegion
         rngData.AdvancedFilter xlFilterCopy, CriteriaRange:=Range("A1:B2"), CopyToRange:=Range("A5:G5")
         Set rngData = Nothing
      End If
    End Sub

  13. #13
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    139
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 139
    Points : 124
    Points
    124
    Par défaut
    Bonjour,

    j'avais effectivement commencé par utiliser les filtres sur la bdd dans mes feuilles bdd puis copier coller (j'avais déjà utilisé ce principe sur un autre projet) mais j'avais des délais assez important lors des affichages/calculs.

    A force de faire des recherches, je suis tombé sur une méthode pour bloquer les événements ( Application.EnableEvents = False ) rien qu'avec cela j'ai je trouve amélioré la latence sans toucher au code.
    je vais voir quel est le rendu au boulot cette semaine voir la différence avec mon ordi (bcp plus rapide).

    je n'avais pas pensé à appeler une requête ou le contenu d'une table de cette manière (jamais fait auparavant).
    je vais creuser la question, dommage que mon tableau de retour ne puisse pas avoir un rendu tel que le tranform / pivot qui m'aurait directement mis en forme en colonne les dates avec les données associées et donc grandement accéléré les choses.

Discussions similaires

  1. création questionnaire avec 250 question
    Par progluti dans le forum WebDev
    Réponses: 0
    Dernier message: 07/11/2014, 10h52
  2. Création planning avec report
    Par Atomix51 dans le forum Excel
    Réponses: 3
    Dernier message: 09/11/2008, 12h24
  3. Création logiciel avec bdd
    Par thiseo dans le forum Débuter
    Réponses: 1
    Dernier message: 28/02/2008, 08h50
  4. Questions sur la création d'une BDD en SQL (débutant)
    Par CleeM dans le forum Langage SQL
    Réponses: 10
    Dernier message: 14/06/2007, 15h14
  5. [PostgreSQL] [PostGreSQL] Création d'une bdd avec PHP
    Par damien150 dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 09/03/2007, 16h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo