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

Access Discussion :

Greffer un compteur sur des jeux d'enregistrements à valeurs communes par regroupement [AC-2010]


Sujet :

Access

  1. #1
    Membre régulier

    Homme Profil pro
    Ingénieur développement produits
    Inscrit en
    Février 2016
    Messages
    126
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur développement produits
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2016
    Messages : 126
    Points : 71
    Points
    71
    Billets dans le blog
    1
    Par défaut Greffer un compteur sur des jeux d'enregistrements à valeurs communes par regroupement
    Hello le férus,

    j'ai une table du type

    client(n°)/date/quantité(10 ou 100)/produit
    1/12-02-2014/10/pain
    1/12-02-2014/100/pain
    2/13-02-2014/10/pain
    2/13-02-2014/100/pain
    3/13-02-2014/10/pain
    4/14-02-2014/100/pain
    5/15-02-2014/100/pain

    je voudrais rajouter un compteur ou une variable pour differencier mes deux type de quantité pour la suite (cet exemple est simplifier en réalité je peux avoir d'autre chiffre pour la quantité que des dizaine. mais tjs un bcp plus grand que l'autre)

    je voudrais un truc comme ça a la fin: un 1 pour la plus petite et un 2 pour la plus grande quantité

    client(n°)/date/quantité(10 ou 100)/produit/no_ligne
    1/12-02-2014/10/pain/1
    1/12-02-2014/100/pain/2
    2/13-02-2014/10/pain/1
    2/13-02-2014/100/pain/2
    3/13-02-2014/10/pain/1
    4/14-02-2014/100/pain/2
    5/15-02-2014/100/pain/2


    une idée?

    Merci,
    ICE

  2. #2
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 123
    Points : 12 169
    Points
    12 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    Je comprends :

    1/12-02-2014/10/pain/1
    1/12-02-2014/100/pain/2
    2/13-02-2014/10/pain/1
    2/13-02-2014/100/pain/2
    3/13-02-2014/10/pain/1

    mais pas

    4/14-02-2014/100/pain/2
    5/15-02-2014/100/pain/2

    est-ce une erreur ou bien il y a quelque chose qui m'échappe ?

    Argy
    Ce qui donne son sens à la communication, c´est la réponse que l´on obtient. Si vous n´obtenez pas la réponse voulue, communiquez différemment.

    Ils comptent sur vous...
    Web Site@Mail
    Tutoriels : Déployez vos applications Access 2010 à 2019 */* Réalisez un Assistant de présaisie...
    MDB Viewer : Visionneuse Access v4.0
    *** Je recherche des profils (2 ans min.) Java EE, Fullstack, Front, .Net, Mobile... pour CDI ***

  3. #3
    Membre régulier

    Homme Profil pro
    Ingénieur développement produits
    Inscrit en
    Février 2016
    Messages
    126
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur développement produits
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2016
    Messages : 126
    Points : 71
    Points
    71
    Billets dans le blog
    1
    Par défaut
    bonjour,

    non il n'y a pas d'erreur!!

    regarde bien:
    client(n°)/date/quantité(10 ou 100)/produit/no_ligne
    4/14-02-2014/100/pain/2
    5/15-02-2014/100/pain/2

    pas le meme num client (deux different), pas la meme date de commande, seulement la quantité est ce que j'appelle grand.
    oups je vien de me rendre compte que j'ai oublier le plus important.... 1 correspond a la petite valeur et 2 a la grande. (ici 10 et 100 respectivement)


    cela repond t-il a ta question mon ami?


    j'ai besoin de ce comteur pour pouvoir ensuite faire deux table differente. seulement comme je l'ia dit au depart ceci n'est qu'un exemple (10 et 100) en realité, je ne sais pas la valeur "grande" et "petite". c'est pour cela que je pensais faire une sorte de diference entre deux ligne du meme client

    par exemple:
    client(n°)/date/quantité(10 ou 100)/produit
    1/12-02-2014/10/pain
    1/12-02-2014/100/pain

    et mettre le 1 et le 2 sur les bonne ligne pour ensuite dire tout les 2 dans la base "grande" et tout les 1 dans la base "petite"

    client(n°)/date/quantité(10 ou 100)/produit/no_ligne
    1/12-02-2014/10/pain/1
    1/12-02-2014/100/pain/2


    Merci,
    ICE

  4. #4
    Membre régulier

    Homme Profil pro
    Ingénieur développement produits
    Inscrit en
    Février 2016
    Messages
    126
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur développement produits
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2016
    Messages : 126
    Points : 71
    Points
    71
    Billets dans le blog
    1
    Par défaut ébauche de code
    Hello,

    voici une ébauche de code ne Français:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    POUR CHAQUE client dans Table
    	POUR CHAQUE date_commande dans Table   'voir apres le code
    		SI il y a deux commande a cette date FAIRE   'deux commande max
    			SI quantité_commande1 < quantité_commande2 FAIRE
    				no_ligne_commande1="1"
    				no_ligne_commande2="2"
    				ELSE: no_ligne_commande2="1"
    				      no_ligne_commande1="2"
    			FIN SI
    		FIN SI
    	SUIVANT date_commande
    SUIVANT client
    en effet la base peu etre de la forme:

    client(n°)/date/quantité(10 ou 100)/produit
    1/12-02-2014/10/pain
    1/12-02-2014/100/pain
    1/13-02-2014/10/pain
    1/13-02-2014/100/pain

    2/13-02-2014/10/pain
    2/13-02-2014/100/pain
    3/13-02-2014/10/pain
    4/14-02-2014/100/pain
    5/15-02-2014/100/pain

    resultat:
    client(n°)/date/quantité(10 ou 100)/produit/no_ligne
    1/12-02-2014/10/pain/1
    1/12-02-2014/100/pain/2
    1/13-02-2014/10/pain/1
    1/13-02-2014/100/pain/2

    2/13-02-2014/10/pain/1
    2/13-02-2014/100/pain/2
    3/13-02-2014/10/pain/1
    4/14-02-2014/100/pain/2
    5/15-02-2014/100/pain/2

    Merci,
    ICE

  5. #5
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 123
    Points : 12 169
    Points
    12 169
    Billets dans le blog
    5
    Par défaut
    Ah Ok, donc si c'est 100 c'est 2 si c'est 10 c'est 1...

    Donc pas besoin de tenir compte de la date ou d'un quelconque regroupement, selon moi :

    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
     
    Sub Compteur()
    Dim SQL                                                As String
    Dim oRS                                                As DAO.Recordset
    Dim straRow()                                            As String
    Dim strRow                                             As String
    Dim strTerminator                                      As String
        SQL = "SELECT * FROM TablePains ORDER BY 1;"
        Set oRS = CurrentDb.OpenRecordset(SQL, dbOpenDynaset)
        With oRS
            Do While Not .EOF
                strRow = .Fields(0).Value
                straRow = Split(strRow, "/")
                strTerminator = "/" & IIf(straRow(2) = 10, 1, 2)
                strRow = strRow & strTerminator
                Debug.Print strRow
                .MoveNext
            Loop
            .Close
        End With
    End Sub
    Non ?

    Argy
    Ce qui donne son sens à la communication, c´est la réponse que l´on obtient. Si vous n´obtenez pas la réponse voulue, communiquez différemment.

    Ils comptent sur vous...
    Web Site@Mail
    Tutoriels : Déployez vos applications Access 2010 à 2019 */* Réalisez un Assistant de présaisie...
    MDB Viewer : Visionneuse Access v4.0
    *** Je recherche des profils (2 ans min.) Java EE, Fullstack, Front, .Net, Mobile... pour CDI ***

  6. #6
    Membre régulier

    Homme Profil pro
    Ingénieur développement produits
    Inscrit en
    Février 2016
    Messages
    126
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur développement produits
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2016
    Messages : 126
    Points : 71
    Points
    71
    Billets dans le blog
    1
    Par défaut ça devrais marcher mais...
    hello,

    le code en lui même marcherai si mes valeur étaient tjs 10 et 100. Hélas....voici un screenshot des vrai valeur q'on peut trouver

    Nom : ex.PNG
Affichages : 117
Taille : 53,2 Ko

    comme tu peux le voir a une même date, j'ai deux ligne avec deux valeur dose_administrée qui change a chaque fois. de plus attention (il n'y en a pas ici) il peux y avoir plusieurs no_dossier a la même date...
    je pense donc qu'il faut reconsidérer mon code car je ne sais pas a partir de quelle valeur on peux dire que la dose_administrée est grande".


    Merci,
    ICE

  7. #7
    Membre éprouvé
    Inscrit en
    Août 2008
    Messages
    740
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 740
    Points : 1 045
    Points
    1 045
    Par défaut
    Bonjour,

    ci joint un exemple avec une macro de donnees: sur les evenements : Creation, suppression et changement de quantite, le systeme recalcule la colonne tri en passant 3 parametres: client, date et produit

    regarde si c'est ce que tu souhaites

    ProductionTriee.zip

  8. #8
    Membre régulier

    Homme Profil pro
    Ingénieur développement produits
    Inscrit en
    Février 2016
    Messages
    126
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur développement produits
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2016
    Messages : 126
    Points : 71
    Points
    71
    Billets dans le blog
    1
    Par défaut
    la table a l'air bonne mais je ne trouve pas la macro. ou alors je suis bigleux.

    ICE

  9. #9
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 123
    Points : 12 169
    Points
    12 169
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par IceCrime752 Voir le message
    hello,

    le code en lui même marcherai si mes valeur étaient tjs 10 et 100. Hélas....voici un screenshot des vrai valeur q'on peut trouver

    comme tu peux le voir a une même date, j'ai deux ligne avec deux valeur dose_administrée qui change a chaque fois. de plus attention (il n'y en a pas ici) il peux y avoir plusieurs no_dossier a la même date...
    je pense donc qu'il faut reconsidérer mon code car je ne sais pas a partir de quelle valeur on peux dire que la dose_administrée est grande".
    Ah bah oui, mais si tu ne dis pas tout aussi, hein !!!

    Donc ça doit aller mieux avec ce bloc :

    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
    Option Compare Database
    Option Explicit
     
     
    Sub Compteur()
    Dim SQL                                                As String
    Dim oDB                                                As DAO.Database
    Dim oRS1                                               As DAO.Recordset
    Dim oRS2                                               As DAO.Recordset
    Dim straRow()                                          As String
    Dim strRow                                             As String
    Dim strTerminator                                      As String
     
    Dim lngNoDossier                                       As Long
    Dim strDateTraitement                                  As String
    Dim F                                                  As Integer
    Dim intCounter                                         As Integer
     
        Set oDB = CurrentDb
        'Tous les dossiers par date
        SQL = "SELECT no_dossier, date_traitement FROM table_IceCrime752 GROUP BY no_dossier, date_traitement ORDER BY no_dossier, date_traitement;"
        Set oRS1 = oDB.OpenRecordset(SQL, dbOpenDynaset)
        With oRS1
            Do While Not .EOF
                lngNoDossier = .Fields(0).Value
                strDateTraitement = "#" & Format(.Fields(1).Value, "mm/dd/yyyy") & "#"
                intCounter = 0
                'Tous les enregsitrements par quantité ASC
                SQL = "SELECT  no_dossier, date_traitement, dose_administrée, libellé_commercial FROM table_IceCrime752 WHERE no_dossier = " & lngNoDossier & " ANd date_traitement = " & strDateTraitement & " ORDER BY dose_administrée ;"
                Set oRS2 = oDB.OpenRecordset(SQL, dbOpenDynaset)
                With oRS2
                    Do While Not .EOF
                        intCounter = intCounter + 1
                        strRow = ""
                        'Concaténation (pour le fun)
                        For F = 0 To 3
                            strRow = strRow & .Fields(F).Value & "/"
                        Next
                        'Ajout du compteur
                        strRow = strRow & intCounter
                        Debug.Print strRow
                        .MoveNext
                    Loop
                    .Close
                End With
                .MoveNext
            Loop
            .Close
        End With
        oDB.Close
        Set oRS2 = Nothing
        Set oRS1 = Nothing
        Set oDB = Nothing
     
    End Sub
    Ca donne :*

    1000013/13/03/2013/650/5-FLUOROURACILE/1
    1000013/13/03/2013/2050/5-FLUOROURACILE/2
    1000013/13/03/2013/3300/5-FLUOROURACILE/3
    1000013/16/03/2013/550/5-FLUOROURACILE/1
    1000013/16/03/2013/650/5-FLUOROURACILE/2
    1000013/16/03/2013/3300/5-FLUOROURACILE/3
    1000095/11/01/2012/550/5-FLUOROURACILE/1
    1000095/11/01/2012/650/5-FLUOROURACILE/2
    1000095/11/01/2012/3300/5-FLUOROURACILE/3
    1000095/16/03/2013/500/5-FLUOROURACILE/1
    1000095/16/03/2013/1800/5-FLUOROURACILE/2
    1000095/16/03/2013/2050/5-FLUOROURACILE/3
    1000095/24/03/2013/550/5-FLUOROURACILE/1
    1000095/24/03/2013/550/5-FLUOROURACILE/2
    1000095/24/03/2013/2050/5-FLUOROURACILE/3
    1000095/15/01/2016/550/5-FLUOROURACILE/1
    1000095/15/01/2016/650/5-FLUOROURACILE/2
    1000095/15/01/2016/3300/5-FLUOROURACILE/3
    1000095/30/01/2016/2050/5-FLUOROURACILE/1
    1000095/30/01/2016/3300/5-FLUOROURACILE/2
    1000095/01/03/2016/650/5-FLUOROURACILE/1
    1000095/01/03/2016/3300/5-FLUOROURACILE/2
    1000096/12/12/2013/550/5-FLUOROURACILE/1
    1000096/12/12/2013/650/5-FLUOROURACILE/2
    1000096/12/12/2013/2050/5-FLUOROURACILE/3
    1000096/15/01/2016/650/5-FLUOROURACILE/1
    1000096/15/01/2016/650/5-FLUOROURACILE/2
    1000096/15/01/2016/3300/5-FLUOROURACILE/3
    1000096/15/01/2016/3300/5-FLUOROURACILE/4
    1000096/20/02/2016/650/5-FLUOROURACILE/1
    1000096/20/02/2016/2050/5-FLUOROURACILE/2


    Argy

    * euh, c'est debug.print, je te laisse adapter...
    Ce qui donne son sens à la communication, c´est la réponse que l´on obtient. Si vous n´obtenez pas la réponse voulue, communiquez différemment.

    Ils comptent sur vous...
    Web Site@Mail
    Tutoriels : Déployez vos applications Access 2010 à 2019 */* Réalisez un Assistant de présaisie...
    MDB Viewer : Visionneuse Access v4.0
    *** Je recherche des profils (2 ans min.) Java EE, Fullstack, Front, .Net, Mobile... pour CDI ***

  10. #10
    Membre régulier

    Homme Profil pro
    Ingénieur développement produits
    Inscrit en
    Février 2016
    Messages
    126
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur développement produits
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2016
    Messages : 126
    Points : 71
    Points
    71
    Billets dans le blog
    1
    Par défaut
    yo argyronet,

    en fait je pensais que ça simplifirais la question mais en fait non....

    bon ton code n'a pas d'erreur mais il met un temps fous a s'executer (c'est tjs pas fini et j'ai vu ton message a 10h40...). est-ce que c'est normal ou bien je ne l'appelle pas correctement? j'utilise une macro pour l'appeler.

    Merci,
    ICE

  11. #11
    Membre régulier

    Homme Profil pro
    Ingénieur développement produits
    Inscrit en
    Février 2016
    Messages
    126
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur développement produits
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2016
    Messages : 126
    Points : 71
    Points
    71
    Billets dans le blog
    1
    Par défaut heu laisse tomber..
    après vérification, le code c'execute bien! c'est juste qu'il y a des 100.000 ligne donc.... bah ça prend du temps.

    je voudrais maintenant le rajouter dans un champ car, du moins comme je le fait via CTRL + G, ça ne me le fait pas...



    Un grand merci,
    ICE

  12. #12
    Membre éprouvé
    Inscrit en
    Août 2008
    Messages
    740
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 740
    Points : 1 045
    Points
    1 045
    Par défaut
    La macro est uniquement accessible en mode creation de la table

  13. #13
    Membre régulier

    Homme Profil pro
    Ingénieur développement produits
    Inscrit en
    Février 2016
    Messages
    126
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur développement produits
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2016
    Messages : 126
    Points : 71
    Points
    71
    Billets dans le blog
    1
    Par défaut ah ok
    oui en effet ça marche. je continue mes test et je regarde que la suite marche avant de mettre "résolu"

    mais en attendant, Merci a vous deux !!!!


    ICE

  14. #14
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 123
    Points : 12 169
    Points
    12 169
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par IceCrime752 Voir le message
    après vérification, le code c'execute bien! c'est juste qu'il y a des 100.000 ligne donc.... bah ça prend du temps.
    Où as-tu posé les index sur ta table ?
    Chez moi, en l'état, pour 2000 enregistrements, la procédure s'éxécute en 1,5 seconde.
    Donc il y a un loup quelque part...

    Si on fait une côte mal taillée, ça donne grosso modo 75 secondes pour 100000 lignes.

    Y a t-il un truc que tu as omis de préciser ?

    Argy
    Ce qui donne son sens à la communication, c´est la réponse que l´on obtient. Si vous n´obtenez pas la réponse voulue, communiquez différemment.

    Ils comptent sur vous...
    Web Site@Mail
    Tutoriels : Déployez vos applications Access 2010 à 2019 */* Réalisez un Assistant de présaisie...
    MDB Viewer : Visionneuse Access v4.0
    *** Je recherche des profils (2 ans min.) Java EE, Fullstack, Front, .Net, Mobile... pour CDI ***

  15. #15
    Membre régulier

    Homme Profil pro
    Ingénieur développement produits
    Inscrit en
    Février 2016
    Messages
    126
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur développement produits
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2016
    Messages : 126
    Points : 71
    Points
    71
    Billets dans le blog
    1
    Par défaut une erreur de ma part
    j'ai en fait rajouter une ligne pour pouvoir mettre le resultat dans un champs de la table que j'ai appeller "1_ou_2" et c'est ça qui fait ramer. sans cette ligne tout va bien.
    le probleme est que quand j'ai rajouter cette ligne, le champs "1_ou_2" ne contient que des deux....


    ICE

  16. #16
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 123
    Points : 12 169
    Points
    12 169
    Billets dans le blog
    5
    Par défaut
    Bah, il faut faire un UPDATE ou un INSERT au choix...

    Par exemple, tu fais un INSERT dans une nouvelle table avec la colonne supplémentaire.

    Ca ne devrait pas être trop consommateur.

    Argy
    Ce qui donne son sens à la communication, c´est la réponse que l´on obtient. Si vous n´obtenez pas la réponse voulue, communiquez différemment.

    Ils comptent sur vous...
    Web Site@Mail
    Tutoriels : Déployez vos applications Access 2010 à 2019 */* Réalisez un Assistant de présaisie...
    MDB Viewer : Visionneuse Access v4.0
    *** Je recherche des profils (2 ans min.) Java EE, Fullstack, Front, .Net, Mobile... pour CDI ***

  17. #17
    Membre régulier

    Homme Profil pro
    Ingénieur développement produits
    Inscrit en
    Février 2016
    Messages
    126
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur développement produits
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2016
    Messages : 126
    Points : 71
    Points
    71
    Billets dans le blog
    1
    Par défaut c'est ce que j'ai fais
    dès qu'on part sur du SQL, je me débrouille bien mais je ne sais pas dans quelle boucle mettre la requête car
    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
        Set oDB = CurrentDb
        'Tous les dossiers par date
        SQL = "SELECT no_dossier, date_traitement FROM Table_5FU GROUP BY no_dossier, date_traitement ORDER BY no_dossier, date_traitement;"
        Set oRS1 = oDB.OpenRecordset(SQL, dbOpenDynaset)
        With oRS1
            Do While Not .EOF
                lngNoDossier = .Fields(0).Value
                strDateTraitement = "#" & Format(.Fields(1).Value, "mm/dd/yyyy") & "#"
                intCounter = 0
                'Tous les enregsitrements par quantité ASC
                SQL = "SELECT  no_dossier, date_traitement, dose_administrée, libellé_commercial FROM Table_5FU WHERE no_dossier = " & lngNoDossier & " AND date_traitement = " & strDateTraitement & " ORDER BY dose_administrée, date_traitement, no_dossier;"
                Set oRS2 = oDB.OpenRecordset(SQL, dbOpenDynaset)
                With oRS2
                    Do While Not .EOF
                        intCounter = intCounter + 1
                        strRow = ""
                        'Ajout du compteur
                        strRow = strRow & intCounter
                        Debug.Print strRow
                        .MoveNext
                        'CurrentDb.Execute "UPDATE Table_5FU SET Table_5FU.1_ou_2 =" & strRow
                    Loop
                    .Close
                End With
                .MoveNext
                'CurrentDb.Execute "UPDATE Table_5FU SET Table_5FU.1_ou_2 =" & strRow
            Loop
            .Close
        End With
        oDB.Close
        Set oRS2 = Nothing
        Set oRS1 = Nothing
        Set oDB = Nothing
     
    End Sub
    a ces deux endroit, seul le dernier nombre qui a été créer par le compteur se met sur TOUTE les lignes.

    ICE

  18. #18
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 123
    Points : 12 169
    Points
    12 169
    Billets dans le blog
    5
    Par défaut
    Bien essaye plutôt ce bloc... comme je te l'ai précisé, une nouvelle table sera mieux

    un UPDATE sera trop lourd, même si c'est faisable...

    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
     
    Option Compare Database
    Option Explicit
     
     
    Sub Compteur()
    Dim SQLSelect                                          As String
    Dim SQLInsert                                          As String
    Dim SQLDelete                                          As String
    Dim oDB                                                As DAO.Database
    Dim oRS1                                               As DAO.Recordset
    Dim oRS2                                               As DAO.Recordset
    Dim straRow()                                          As String
    Dim strRow                                             As String
    Dim strTerminator                                      As String
     
    Dim lngNoDossier                                       As Long
    Dim strDateTraitement                                  As String
    Dim F                                                  As Integer
    Dim intCounter                                         As Integer
    Dim sngStart!
    Dim sngEnd!
    Dim sngGap!
    Dim L                                                  As Integer
     
        Set oDB = CurrentDb
        sngStart = Timer
        'Création de la table vierge
        On Error Resume Next
        'On efface tout d'abord
        SQLDelete = "DELETE * FROM Table_5FU_New;"
        oDB.Execute SQLDelete
        If Err <> 0 Then
            'La table n'existe pas, on la créée
            SQLSelect = "SELECT  no_dossier, date_traitement, dose_administrée, libellé_commercial, 0 AS Compteur  INTO Table_5FU_New FROM Table_5FU WHERE 1=0 ;"
            oDB.Execute SQLSelect
            oDB.TableDefs.Refresh
            Err.Clear
        End If
     
        On Error GoTo L_ErrCompteur
        'Tous les dossiers par date
        SQLSelect = "SELECT no_dossier, date_traitement FROM Table_5FU GROUP BY no_dossier, date_traitement ORDER BY no_dossier, date_traitement;"
        Set oRS1 = oDB.OpenRecordset(SQLSelect, dbOpenDynaset)
        With oRS1
            Do While Not .EOF
                lngNoDossier = .Fields(0).Value
                strDateTraitement = "#" & Format(.Fields(1).Value, "mm/dd/yyyy") & "#"
                intCounter = 0
                'Tous les enregsitrements par quantité ASC
                SQLSelect = "SELECT  no_dossier, date_traitement, dose_administrée, libellé_commercial FROM Table_5FU WHERE no_dossier = " & lngNoDossier & " ANd date_traitement = " & strDateTraitement & " ORDER BY dose_administrée ;"
                Set oRS2 = oDB.OpenRecordset(SQLSelect, dbOpenDynaset)
                With oRS2
                    Do While Not .EOF
                        L = L + 1
                        intCounter = intCounter + 1
                        SQLInsert = "INSERT INTO Table_5FU_New (no_dossier, date_traitement, dose_administrée, libellé_commercial, Compteur) "
                        SQLInsert = SQLInsert & "VALUES (" & .Fields(0).Value & ", #" & .Fields(1).Value & "#, " & .Fields(2).Value & ", '" & .Fields(3).Value & "', " & intCounter & ");"
                        oDB.Execute SQLInsert, dbFailOnError
    '                    strRow = ""
    '                    'Concaténation (pour le fun)
    '                    For F = 0 To 3
    '                        strRow = strRow & .Fields(F).Value & "/"
    '                    Next
    '                    'Ajout du compteur
    '                    strRow = strRow & intCounter
    '                    Debug.Print strRow
                        .MoveNext
                    Loop
                    .Close
                    intCounter = 0
     
                End With
                .MoveNext
            Loop
            .Close
        End With
        oDB.Close
        sngEnd = Timer
        sngGap = sngEnd - sngStart
        MsgBox "Temps : " & Fix(sngGap) & " s.", , "Nombre de lignes :" & L
     
     
        On Error GoTo 0
    L_ExCompteur:
        Set oRS2 = Nothing
        Set oRS1 = Nothing
        Set oDB = Nothing
        Exit Sub
     
    L_ErrCompteur:
        MsgBox Err.Description, 48, Err.Source
        Resume L_ExCompteur
     
    End Sub
    Argy
    Ce qui donne son sens à la communication, c´est la réponse que l´on obtient. Si vous n´obtenez pas la réponse voulue, communiquez différemment.

    Ils comptent sur vous...
    Web Site@Mail
    Tutoriels : Déployez vos applications Access 2010 à 2019 */* Réalisez un Assistant de présaisie...
    MDB Viewer : Visionneuse Access v4.0
    *** Je recherche des profils (2 ans min.) Java EE, Fullstack, Front, .Net, Mobile... pour CDI ***

  19. #19
    Membre régulier

    Homme Profil pro
    Ingénieur développement produits
    Inscrit en
    Février 2016
    Messages
    126
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur développement produits
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2016
    Messages : 126
    Points : 71
    Points
    71
    Billets dans le blog
    1
    Par défaut bon bah voila!!!
    Comment dire...: Ah oui, argyronet, MERCI INFINIMENT!

    le code fait EXACTEMENT ce que je voulais alors merci bcp pour tout. Un genie du net, mon ami tu es!


    A ceux qui viendrons sur la discution pour prendre l'idée, elle marche très très bien. pour faire simple c'est un comteur qui reprend a 0 a chaque fois q'un parametre change.


    Voila

    Merci,
    ICE

  20. #20
    Membre régulier

    Homme Profil pro
    Ingénieur développement produits
    Inscrit en
    Février 2016
    Messages
    126
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur développement produits
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2016
    Messages : 126
    Points : 71
    Points
    71
    Billets dans le blog
    1
    Par défaut Désolé
    Hello,

    Oui je sais!! j'ai mis résolu un peu vite... mais tout marchais bien jusqu'a ce que je rajoute un champ dans le code "code_protocole" et là.....

    j'ai rajouter tout ce qu'il falais pour que ça marche mais nn ça me met une erreur (faite le avancer en Debug pas-a-pas et vous verrez...)

    je passe de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set oRS2 = oDB.OpenRecordset(SQLSelect, dbOpenDynaset)
    a
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MsgBox Err.Description, 48, Err.Source
    sans faire tout ce qu'il y a au milieu. je comprend que c'est pour dire qu'il y a une erreur mais je ne la trouve pas...

    voici le code modifier

    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
    Option Compare Database
    Option Explicit
     
    Sub Compteur()
    Dim SQLSelect As String
    Dim SQLInsert As String
    Dim SQLDelete As String
    Dim oDB As DAO.Database
    Dim oRS1 As DAO.Recordset
    Dim oRS2 As DAO.Recordset
    Dim straRow() As String
    Dim strRow As String
    Dim strTerminator As String
    Dim lngNoDossier As Long
    Dim strCodeProtocole As String
    Dim strDateTraitement As String
    Dim F As Integer
    Dim intCounter As Integer
    Dim sngStart!
    Dim sngEnd!
    Dim sngGap!
    Dim L As Integer
     
        Set oDB = CurrentDb
        sngStart = Timer
        'Création de la table vierge
        On Error Resume Next
        'On efface tout d'abord
        SQLDelete = "DELETE * FROM Table_5FU_New;"
        oDB.Execute SQLDelete
        If Err <> 0 Then
            'La table n'existe pas, on la créée
            SQLSelect = "SELECT  no_dossier, code_protocole, date_traitement, dose_administrée, libellé_commercial, 0 AS Compteur  INTO Table_5FU_New FROM Table_5FU WHERE 1=0 ;"
            oDB.Execute SQLSelect
            oDB.TableDefs.Refresh
            Err.Clear
        End If
     
        On Error GoTo L_ErrCompteur
        'Tous les dossiers par date
        SQLSelect = "SELECT no_dossier, code_protocole, date_traitement FROM Table_5FU GROUP BY no_dossier, code_protocole, date_traitement ORDER BY no_dossier, date_traitement;"
        Set oRS1 = oDB.OpenRecordset(SQLSelect, dbOpenDynaset)
        With oRS1
            Do While Not .EOF
                lngNoDossier = .Fields(0).Value
                strCodeProtocole = .Fields(1).Value
                strDateTraitement = Format(.Fields(2).Value, "dd/mm/yyyy")
                'Debug.Print strCodeProtocole
                intCounter = 0
                'Tous les enregsitrements par quantité ASC
                SQLSelect = "SELECT no_dossier, code_protocole, date_traitement, dose_administrée, libellé_commercial FROM Table_5FU WHERE no_dossier = " & lngNoDossier & " AND code_protocole = " & strCodeProtocole & " AND date_traitement = " & strDateTraitement & " ORDER BY dose_administrée ;"
                Debug.Print SQLSelect
                Set oRS2 = oDB.OpenRecordset(SQLSelect, dbOpenDynaset)
                Debug.Print oRS2
                With oRS2
                    Do While Not .EOF
                        L = L + 1
                        intCounter = intCounter + 1
                        SQLInsert = "INSERT INTO Table_5FU_New (no_dossier, code_protocole, date_traitement, dose_administrée, libellé_commercial, Compteur) "
                        SQLInsert = SQLInsert & "VALUES (" & .Fields(0).Value & ", " & .Fields(1).Value & ", " & .Fields(2).Value & ", " & .Fields(3).Value & ", '" & .Fields(4).Value & "', " & intCounter & ");"
                        Debug.Print SQLInsert
                        oDB.Execute SQLInsert, dbFailOnError
                        .MoveNext
                    Loop
                    .Close
                    intCounter = 0
     
                End With
                .MoveNext
            Loop
            .Close
        End With
        oDB.Close
        sngEnd = Timer
        sngGap = sngEnd - sngStart
        MsgBox "Temps : " & Fix(sngGap) & " s.", , "Nombre de lignes :" & L
     
     
        On Error GoTo 0
    L_ExCompteur:
        Set oRS2 = Nothing
        Set oRS1 = Nothing
        Set oDB = Nothing
        Exit Sub
     
    L_ErrCompteur:
        MsgBox Err.Description, 48, Err.Source
        Resume L_ExCompteur
     
    End Sub

    Merci,
    ICE

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Plusieurs ajout dans une variable
    Par yugimega dans le forum C++
    Réponses: 12
    Dernier message: 26/11/2006, 22h54
  2. Ajout d'une variable dans une class fait planter
    Par Geoff-sk8 dans le forum C++
    Réponses: 4
    Dernier message: 11/10/2006, 14h27
  3. [ANT] Ajout d'une variable d'environement au PATH
    Par Feustine dans le forum ANT
    Réponses: 1
    Dernier message: 25/08/2005, 18h16
  4. [PL/SQL] ajout de deux variables
    Par seal dans le forum Langage SQL
    Réponses: 3
    Dernier message: 16/08/2005, 17h19
  5. Ajouter a une variable de type string, un entier
    Par Little-Freud dans le forum SL & STL
    Réponses: 12
    Dernier message: 05/03/2005, 19h33

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