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

VBA Access Discussion :

Comment faire si le nombre de colonne d'une requete analyse croisée dépasse le nombre de champs de l'état [AC-2010]


Sujet :

VBA Access

  1. #1
    Membre actif
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    355
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2006
    Messages : 355
    Points : 238
    Points
    238
    Par défaut Comment faire si le nombre de colonne d'une requete analyse croisée dépasse le nombre de champs de l'état
    Bonjour,

    J'ai un état alimenté par une requête d'analyse croisée.
    J'ai créé cet état en suivant les conseils de tee_grandbois https://www.developpez.net/forums/d2...ee/#post146901
    Ca marche super bien.

    Mais donc dans cet état, j'ai 7 champs (colonnes) disponibles pour y mettre les valeur de ma requête analyse croisée. Tant que j'ai 7 champs (ou moins) dans cette requête, no problemo.
    Mais dès que j'en ai plus, comment puis-je faire pour imprimer l'état avec les 7 premiers champs, puis ensuite les 7 suivants, etc...?
    Tout en sachant que les 2 premières colonnes doivent toujours être identiques d'un groupe de 7 à l'autre (elles contiennent des ID et des descriptifs de ces ID) les 5 autres champs étant variables, donc.


    C'est un peu comme la méthode GetRow mais sur des champs (et je prendrai tous les enregistrements de ces champs)... Et je ne vois pas d'équivalent dans les méthodes...
    Ou alors passer par un tableau? Mais n'est ce pas un peu lourd?

    Par ailleurs, en trouvant une manière de traiter/extraire ces groupes de champs variables pur les afficher groupe après groupe dans l'état,
    est-ce possible d'afficher ces différents états l'un en dessous de l'autre? OU vaut-il mieux imprimer le premier, le fermer, puis imprimer le second, le fermer, etc...?

    Je lirai vos suggestions et idées avec plaisir

  2. #2
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 363
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 363
    Points : 23 833
    Points
    23 833
    Par défaut
    Bonjour.

    Les rapports et les formulaires ne sont pas très dynamique pour la gestion des champs donc à moins de le générer par programme la solution consiste à prévoir "le pire" et a masquer les champs inutiles.
    Par contre ne je n'ai pas compris ce que tu voulais faire est-ce
    Mettre les données sur plusieurs lignes
    Du genre
    ChampRef1, ChampRef2, Champ1, ..., Champ7
    ChampRef1, ChampRef2, Champ8, ..., Champ14

    ou mettre les données sur des pages côte à côte.
    Du genre
    ChampRef1, ChampRef2, Champ1, ..., Champ7 | ChampRef1, ChampRef2, Champ8, ..., Champ14

    Par ailleurs, en trouvant une manière de traiter/extraire ces groupes de champs variables pur les afficher groupe après groupe dans l'état,
    est-ce possible d'afficher ces différents états l'un en dessous de l'autre? OU vaut-il mieux imprimer le premier, le fermer, puis imprimer le second, le fermer, etc...?
    Là aussi pas certain, est-ce que tu vas utiliser le même rapport avec des critères différents ou tu vas utiliser plusieurs rapports différents que tu veux regrouper en un seul au final ?

    A+

  3. #3
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 373
    Points : 19 782
    Points
    19 782
    Billets dans le blog
    65
    Par défaut
    Bonjour,

    Citation Envoyé par Dermochelys Voir le message
    ...

    Par ailleurs, en trouvant une manière de traiter/extraire ces groupes de champs variables pur les afficher groupe après groupe dans l'état,
    est-ce possible d'afficher ces différents états l'un en dessous de l'autre? OU vaut-il mieux imprimer le premier, le fermer, puis imprimer le second, le fermer, etc...?

    Je lirai vos suggestions et idées avec plaisir
    Il faudrait donc disposer d'un champ (ChampGroupe) permettant de faire cette sélection.

    Y-a-t-il moyen de créer ces colonnes dynamiques au niveau de la requête source (ex.: requête sélection basée sur la requête analyse croisée) en utilisant la fonction switch ou premvrai :

    Switch(expr-1, value-1, [ expr-2, value-2..., [ expr-n, value-n ]])

    https://learn.microsoft.com/fr-fr/of...witch-function

    Pour reprendre l'exemple de Marot-r, avec des groupes de 7 champs par page, et en supposant que les champs reliés aux colonnes de l'état se nomment Col1, Col2, ..., Col7, on obtiendrait :

    Col1 : Switch([ChampGroupe] = 1, [Champ1], ChampGroupe = 2, [Champ8] , ChampGroupe = 3, [Champ15])
    Col2 : Switch([ChampGroupe] = 1, [Champ2], ChampGroupe = 2, [Champ9] , ChampGroupe = 3, [Champ16])
    Col3 : Switch([ChampGroupe] = 1, [Champ3], ChampGroupe = 2, [Champ10] , ChampGroupe = 3, [Champ17])
    ...
    Col7 : Switch([ChampGroupe] = 1, [Champ7], ChampGroupe = 2, [Champ14] , ChampGroupe = 3, [Champ21])


    Ou alors au niveau de la propriété source contrôle des zones de texte Col1, Col2, ..., Col7 de l'état :

    = PremVrai([ChampGroupe] = 1; [Champ1], ChampGroupe = 2; [Champ8] ; ChampGroupe = 3; [Champ15])
    = PremVrai([ChampGroupe] = 1; [Champ2], ChampGroupe = 2; [Champ9] ; ChampGroupe = 3; [Champ16])
    = PremVrai([ChampGroupe] = 1; [Champ3], ChampGroupe = 2; [Champ10] ; ChampGroupe = 3; [Champ17])
    ...
    = PremVrai([ChampGroupe] = 1; [Champ7], ChampGroupe = 2; [Champ14] , ChampGroupe = 3, [Champ21])


    Comme tu peux le remarquer tout le problème est en fait de disposer d'un champ (ici ChampGroupe) permettant de faire cette sélection.

    Cdlt,

  4. #4
    Membre actif
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    355
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2006
    Messages : 355
    Points : 238
    Points
    238
    Par défaut
    Bonjour marot_r et user

    En effet rapport et formulaires ne sont pas très dynamiques !

    @ marot_r : L'idée de départ serait d'utiliser le même rapport mais avec des critères différents pour les champs qui y seront affichés... Mais finalement plusieurs rapport rassemblés en un seul pourrait être plus facile à gérer.... Je ne sais pas trop...

    @ user : Je vais voir de plus près cette idée de champ groupe...

    Et continue d'y réfléchir pour le moment en testant quelques idées....

    Je vous tiendrai au courant

  5. #5
    Membre actif
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    355
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2006
    Messages : 355
    Points : 238
    Points
    238
    Par défaut
    Bonjour marot_r, Bonjour user,

    Après réflexions et tests divers, j'ai trouvé une solution qui réponds à mon besoin. Elle n'est peut-être pas idéale dans sa formulation (vos suggestions/améliorations sont les bienvenues) ni sa rapidité (je doute de son efficacité sur de gros volumes de données mais pour ce que j'e dois faire, ça roule). Mais si la logique et le code (à adapter) peuvent servir à d'autres, tant mieux :-)

    Présentation du besoin:
    Sur le clic d'un bouton dans un formulaire, produire un rapport sur base d'une requête d'analyse croisée. Rapport pour lequel à priori on ne connait pas le nombre de colonnes, ni le nombre de lignes au départ.

    Les données disponibles:
    Une table qui reprends les différentes personnes et leurs statut d'activité : Tbl_Personen
    Une table qui reprends les différentes formations/compétences possibles : Tbl_Type opleiding
    Une table qui regroupe les formations/compétences attribuées à différentes personnes : Tbl_FormationRequiseParPersonne

    Pour la construction de l'état et du code, j'ai utilisé le tuto de Caféine + quelques infos venant de différentes discussions (1, 2) + les intéressantes suggestions de user et marot_r

    Dans mon étant j'ai donc 9 champs indépendants. Les deux premiers champs ont des étiquettes (= en-tête de colonne) qui ne changeront pas (Et0 = ID ; Et1 = Nom Formation).
    Les autres en-tête de colonnes varieront en fonction du nom des personnes. Il y aura donc au maximum 7 personnes par page du rapport.
    Le nombre de lignes est variable.

    Le processus que j'ai suivi:
    - Sur le clic du bouton:
    * Via une requête, créer une table (Tbl_Matricecompetence) qui regroupe les informations nécessaires pour l'analyse croisée
    * Boucler sur les noms des personnes (au maximum 7 à la fois) pour ensuite créer une requête analyse croisée
    * Lancer la création de l'état et son affichage (l'utilisateur a la possibilité de l'imprimer si besoin)
    * quand l'état est fermé, on continue la boucle

    Voici le code que j'ai mis sur le bouton
    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
    Private Sub btn_MatriceCompet_Click()
    Dim Db As DAO.Database
    Dim rst1 As DAO.Recordset
    Dim strSQL As String
    Dim strSQLWHERE As String
    Dim nbr As Integer
    Dim i As Integer
    Dim SQL As String
    Dim SQL2 As String
     
        DoCmd.SetWarnings False                                         ' message off
        DoCmd.DeleteObject acTable, "Tbl_MatriceCompetence"             ' supprime la table temporaire
        DoCmd.DeleteObject acQuery, "Tbl_FormationRequiseParPersonne_CrossTab"    ' supprime la requête AnalyseAnnée
     
        'On crèe le SQL qui va nous servir a faire une nouvelle table Tbl_MatriceCompetence
        SQL = "SELECT Tbl_FormationRequiseParPersonne.IDTypeOpleidingen, [Tbl_Type opleiding].NomFormation, Tbl_Personen.Nom, Last(Str([Obligatoire])) AS Executant, Tbl_Personen.EnActivité INTO Tbl_MatriceCompetence "
        SQL = SQL & "FROM Tbl_Personen INNER JOIN ([Tbl_Type opleiding] INNER JOIN Tbl_FormationRequiseParPersonne ON [Tbl_Type opleiding].OpleidingenID = Tbl_FormationRequiseParPersonne.IDTypeOpleidingen) ON Tbl_Personen.PersonenID = Tbl_FormationRequiseParPersonne.IDPersonen "
        SQL = SQL & "GROUP BY Tbl_FormationRequiseParPersonne.IDTypeOpleidingen, [Tbl_Type opleiding].NomFormation, Tbl_Personen.Nom, Tbl_Personen.EnActivité "
        SQL = SQL & "HAVING (((Tbl_Personen.EnActivité)=Yes)) "
        SQL = SQL & "ORDER BY Tbl_FormationRequiseParPersonne.IDTypeOpleidingen, Tbl_Personen.Nom;"
     
        CurrentDb.CreateQueryDef "Tbl_FormationRequiseParPersonne_CrossTab", SQL  ' crée la nouvelle requête
        DoCmd.OpenQuery "Tbl_FormationRequiseParPersonne_CrossTab"                ' ouvre la requête
        ' on remplace ici les caractères 0 et -1 par ce que l'on a besoin
        DoCmd.RunSQL "UPDATE Tbl_MatriceCompetence SET Tbl_MatriceCompetence.Executant = REPLACE([Executant], " & Chr(34) & "-1" & Chr(34) & ", " & Chr(34) & "U" & Chr(34) & ");"
        DoCmd.RunSQL "UPDATE Tbl_MatriceCompetence SET Tbl_MatriceCompetence.Executant = REPLACE([Executant], " & Chr(34) & "0" & Chr(34) & ", " & Chr(34) & "F" & Chr(34) & ");"
     
     
    ''''' On va à partir d'ici créer un filtre pour le SQL2; filtre qui va sélectionner les 7xième colonnes (ou moins) de la Tbl_MatriceCompetence
    ' Filtrage des noms présent dans la matrice de competence
    Set Db = CurrentDb()
     
    'on récupère tous les noms de la table Tbl_MatriceCompetence
    strSQL = "SELECT Tbl_MatriceCompetence.Nom "
    strSQL = strSQL & "FROM Tbl_MatriceCompetence "
    strSQL = strSQL & "GROUP BY Tbl_MatriceCompetence.Nom "
    strSQL = strSQL & "ORDER BY Tbl_MatriceCompetence.Nom;"
     
    Set rst1 = Db.OpenRecordset(strSQL)
    If Not rst1.BOF Then
        rst1.MoveLast
        rst1.MoveFirst
        nbr = rst1.RecordCount
    End If
     
    'construire la boucle qui va faire le filtre (pour récupérer les 7 premiers noms), le réactualiser après impression PDF pour traiter les x noms suivants
    i = 0
    Do While i < nbr
     
        For i = i To i + 6
            If Not rst1.EOF Then
                strSQLWHERE = "((Tbl_MatriceCompetence.Nom)= " & Chr(34) & rst1.Fields(0) & Chr(34) & ") OR " & strSQLWHERE
                rst1.MoveNext
            End If
        Next
        strSQLWHERE = "WHERE (" & Left(strSQLWHERE, Len(strSQLWHERE) - 4) & ")"
     
        SQL2 = "TRANSFORM Last(Tbl_MatriceCompetence.[Executant]) AS DernierDeExecutant "
        SQL2 = SQL2 & "SELECT Tbl_MatriceCompetence.IDTypeOpleidingen, Tbl_MatriceCompetence.NomFormation "
        SQL2 = SQL2 & "FROM Tbl_MatriceCompetence "
        SQL2 = SQL2 & strSQLWHERE
        SQL2 = SQL2 & "GROUP BY Tbl_MatriceCompetence.IDTypeOpleidingen, Tbl_MatriceCompetence.NomFormation "
        SQL2 = SQL2 & "ORDER BY Tbl_MatriceCompetence.IDTypeOpleidingen "
        SQL2 = SQL2 & "PIVOT Tbl_MatriceCompetence.Nom;"
     
        DoCmd.DeleteObject acQuery, "Tbl_MatriceCompetence_Crosstab"    ' supprime la requête
        CurrentDb.CreateQueryDef "Tbl_MatriceCompetence_Crosstab", SQL2  ' crée la nouvelle requête
     
        DoCmd.OpenReport "rep_CompetenceMatrice", acViewPreview     ' ouvre la requête
     
        'Boucle qui peremt d'attendre que le rapport à l'écran soit fermé pour ensuite continuer le code(ici continuer la première boucle sur les noms des personnes)
        Do While CurrentProject.AllReports("rep_CompetenceMatrice").IsLoaded
            DoEvents
        Loop
     
        strSQLWHERE = ""
    Loop
     
    DoCmd.SetWarnings True                                          ' message on
     
    rst1.Close
    Set rst1 = Nothing
     
    On_Sort:
    Db.Close
    Set Db = Nothing
     
    End Sub
    Voici le code que j'ai mis sur l’événement Open de l'état:
    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
     
    Private Sub Report_Open(Cancel As Integer)
    Dim rs As Recordset
    Dim i As Integer    ' compteur des controles de l'état
    Dim j As Integer    ' compteur des champs du recordset
    Dim nbr As Integer    ' compteur des champs du recordset
    Dim k As Integer    ' compteur des champs du recordset
     
    Set rs = CurrentDb.OpenRecordset("Tbl_MatriceCompetence_Crosstab")
    If Not rs.BOF Then
        rs.MoveLast
        rs.MoveFirst
        nbr = rs.Fields.Count
    End If
     
    Debug.Print "nbr = " & nbr
     
    'On vérifie ici si le nbre de champs de la table en question est inférieur ou égal au nombre de champs disponible sur l'etat
    If nbr < (7 + 2) Then
        k = nbr - 1
    Else
        k = 8
    End If
     
    If Not rs.BOF And Not rs.EOF Then
            rs.MoveFirst
            ' Ici on remplis les 2 premières colonnes (= champs) qui seront identiques pour tous les rapports
            For j = 0 To 1
                For i = 0 To Me.Controls.Count - 1
                   ' Colonnes
                    If Me.Controls(i).ControlType = acTextBox Then
                        Me.Controls("Ch" & j).ControlSource = rs.Fields(j).Name
                    End If
                   ' Titre des colonnes
                    If Me.Controls(i).ControlType = acLabel Then
                        Me.Et0.Caption = "ID"
                        Me.Et1.Caption = "Nom Formation"
                        'Me.Controls("Et" & j).Caption = rs.Fields(j).Name
                    End If
                Next i
            Next j
     
        ' Ici on remplis les 7 colonnes (= champs) suivantes qui seront différentes d'un rapport à l'autre
        ' La sélection des infos qui y seront affiché se passe lors du clic sur le bouton
        ' clic qui va lancer les filtres et l'impression des PDF nécessaires à partir de ce modèle de rapport
            For j = 2 To k      '8  'rs.Fields.Count - 1
                For i = 0 To Me.Controls.Count - 1
                   ' Colonnes
                    If Me.Controls(i).ControlType = acTextBox Then
                        Me.Controls("Ch" & j).ControlSource = rs.Fields(j).Name
                    End If
                   ' Titre des colonnes
                    If Me.Controls(i).ControlType = acLabel Then
                        Me.Controls("Et" & j).Caption = rs.Fields(j).Name
                    End If
                Next i
            Next j
    End If
     
    rs.Close
    Set rs = Nothing
     
    End Sub
    Au clic sur le bouton, l'état s'affiche avec les 7 premiers noms, à sa fermeture s'il y a encore des noms, il s'affiche à nouveau et ainsi de suite. On ne rends la main au formulaire de départ qu'à la fin du cycle d'affichage.

    Exemple de rapport:
    Nom : test_matCompet.png
Affichages : 76
Taille : 39,0 Ko

    Ce processus pourrait certainement être amélioré par une pré-sélection en amont des noms et formations que l'on veut afficher, par la possibilité d'interrompre la boucle, rajouté une gestion des erreurs éventuelles (mais je vois pas trop lesquelles à vrai dire...), etc...


    marot_r, user, avez-vous des idées pour accélérer ce genre d'exécution?


    Edit: petite correction du code

  6. #6
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 363
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 363
    Points : 23 833
    Points
    23 833
    Par défaut
    Bonjour.

    Habituellement le VBA est moins performant que le SQL donc j'aurai eu tendance à travailler la source du rapport pour la "normaliser" en ensuite utiliser cette source pour alimenter le rapport comme avec une requête normale.
    Pour la partie entête on pourrait peut-être utiliser un sous-rapport avec une seule ligne, toujours venant d'une requête "normalisée".
    En gros ta requête s'assurerai de
    1. Toujours avoir le même nombre de colonnes peut importe si la source en avait moins (ou plus ?).
    2. Toujours avoir le même nom pour les colonnes en utilisant des alias.

    Ces requêtes seraient créée par VBA.

    Mais bon si cela marche et que les performance sont acceptables alors c'est une bonne solution, pas forcément besoin de la changer.

    Un truc que j'ai fait avec les requêtes croisées dynamiques est de les utiliser comme sous-formulaire (pas essayé avec un rapport), ça permet facilement d'avoir une structure dynamique sans aucun code.
    Tu prends la requête et tu la copie/déplace dans le formulaire et Access s'occupe du reste.
    Désolé cela vient seulement de me revenir :-(.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  7. #7
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 373
    Points : 19 782
    Points
    19 782
    Billets dans le blog
    65
    Par défaut
    Bonjour,

    Nous ne pouvons te donner que des pistes de réflexion, c'est trop compliqué de rentrer dans ton code.

    Sur ouverture de l'état tu peux donc mettre à jour dynamiquement les entêtes de colonne (étiquettes) de la page en fonction des champs de ta requête source :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Option Compare Database
    Dim rst As DAO.Recordset
     
    Private Sub Report_Open(Cancel As Integer)
     
        Set rst = CurrentDb.OpenRecordset(RequeteSource)
     
        rst.MoveFirst
     
        For i = 1 To 7
            Me("Col" & CStr(i)).Caption = rst.Fields(3 + i - 1).Name 
        Next i
     
    End Sub
    On peut aussi ajouter que les états disposent d'événement permettant de mettre en forme ou de remplir des zones de texte.

    Par exemple au formatage de la section détail :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Private Sub Détail_Format(Cancel As Integer, FormatCount As Integer)
     
        For i = 1 To 7
            ' contenu de l'entête de colonne d'indice i (entêtes de page)
            nomColonne = Me("Col" & CStr(i)).Caption
            ' ch1, ch2, ... étant des contrôles indépendant (section détail)
            Me("Ch" & CStr(i)).Value = rst.Fields(nomColonne).Value
        Next i
     
        rst.moveNext
     
    End Sub
    Comme cela tu peux modifier le contenu des champs indépendant ch1, ch2, .., de ton état ligne par ligne en suivant le recordset.


    Cdlt
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information accessible au plus grand nombre, plein de bonnes choses à consulter sans modération

    Des tutoriels pour apprendre à créer des formulaires de planning dans vos applications Access :
    Gestion sur un planning des présences et des absences des employés
    Gestion des rendez-vous sur un calendrier mensuel


    Importer un fichier JSON dans une base de données Access :
    Import Fichier JSON

  8. #8
    Membre actif
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    355
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2006
    Messages : 355
    Points : 238
    Points
    238
    Par défaut
    Bonjour marot_r et user

    Merci pour vos réactions.

    Même si la solution que j'ai appliquée fonctionne bien (et satisfait les utilisateurs), je vais quand même faire des essais avec celles que vous me suggérées, ne fut-ce que pour voir et apprendre

    Je clôture le fil et continue vers de nouvelles aventures

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC-365] Tri croissant des en-têtes de colonne dans une requête analyse croisée
    Par Salo15 dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 26/08/2020, 07h05
  2. Réponses: 2
    Dernier message: 05/04/2017, 17h02
  3. [AC-2010] Comment faire le calcul de plusieurs lignes via une requête
    Par Kiera dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 07/09/2015, 20h37
  4. Comment faire un tableau avec deux colonnes à 50 % ?
    Par coolben dans le forum Android
    Réponses: 2
    Dernier message: 22/12/2010, 16h07
  5. [E-03] Comment faire un test sur 2 colonnes successivement?
    Par moilou2 dans le forum Macros et VBA Excel
    Réponses: 21
    Dernier message: 26/03/2009, 17h25

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