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 :

Probleme dans une boucle


Sujet :

VBA Access

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    41
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Val de Marne (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 41
    Points : 17
    Points
    17
    Par défaut Probleme dans une boucle
    donc voila mon probleme j'effectue des calculs dsur des recordset et j'y ai mis une boucle ki va jusqu'a la fin de celui ci ou je compare la ligne precedente et si elle est differente alors l'incrementation dans la tables se fait mais le probleme c'est que le dernier calcul ne rentre pas en compte étant donné que la boucle vois qu'elle est a la fin du fichier et que je ne peux pas la comparé avec le fichier d'apres (vu qu'il n' en a pas ^^)

    voici un extrait de mon code:
    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
     
    While Not rst1.EOF
                    If source <> rst1.Fields("IDENTIFIANT INSTALLATION") Then
                        rst4.MoveFirst
                        Do      'ajout dans la table détailler
                            If Not IsNull(rst4.Fields("prestbase")) Then
                                If CDbl(Val(rst4.Fields("prestbase"))) = rst1.Fields("IDENTIFIANT INSTALLATION") Then
                                    MsgBox ("ajout ds détailler")
                                    rst3.AddNew
                                    rst3.Fields("prestation_id") = rst4.Fields("prestation_id")
                                    rst3.Fields("consoligne") = TOTconsoligne
                                    rst3.Fields("N__Facture") = rst5("NUMERO FACTURE")
                                    rst3.Fields("N__Compte_Opera") = rst5("COMPTE DE FACTURATION")
                                    rst3.Update
                                    TOTabtprest = 0
                                    TOTconsoligne = 0
                                    TOTaccesPrest = 0
                                    TOTdiversPrest = 0
                                    TOTremisePrest = 0
                                    Exit Do
                                Else: rst4.MoveNext
                                End If
                            Else: rst4.MoveNext
                            End If
                        Loop While Not rst4.EOF
                    Else:
                            TOTconsoligne = rst1.Fields("montant appel") + TOTconsoligne                
                    End If
                MsgBox (rst1.Fields("IDENTIFIANT INSTALLATION"))
                source = rst1.Fields("IDENTIFIANT INSTALLATION")
                rst1.MoveNext
                Wend

  2. #2
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Localisation : Sénégal

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 229
    Points : 1 579
    Points
    1 579
    Par défaut
    C'est pas très clair tout ca

    Citation Envoyé par Baya44
    donc voila mon probleme j'effectue des calculs dsur des recordset et j'y ai mis une boucle ki va jusqu'a la fin de celui ci ou je compare la ligne precedente
    Tu compares la ligne précédente à quoi?

    et si elle est differente alors l'incrementation dans la tables se fait
    ??
    Amicalement

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    41
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Val de Marne (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 41
    Points : 17
    Points
    17
    Par défaut
    A la fin de la boucle je mémo la valeur souhaite puis je la compare dans le tour suivant avec la nouvelle valeur, si elle sont differente alors les donnée sont balancé dans la table, sinon la boucle continu et ainsi de suite

  4. #4
    Expert éminent

    Avatar de Maxence HUBICHE
    Homme Profil pro
    Développeur SQLServer/Access
    Inscrit en
    Juin 2002
    Messages
    3 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur SQLServer/Access

    Informations forums :
    Inscription : Juin 2002
    Messages : 3 842
    Points : 9 197
    Points
    9 197
    Par défaut
    Déjà, vires donc les : derrière ELSE, et fais des renvois à la ligne.
    Ils ne servent à rien d'autre qu'à semer le trouble dans ton code.

    Ensuite, ton code parait bien compliqué.
    Si je ne m'abuse, il sert à consolider des données (synthèse de plusieurs lignes) en fonction d'Identifiants.

    Une requête ne suffirait-elle pas ?

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    41
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Val de Marne (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 41
    Points : 17
    Points
    17
    Par défaut
    Citation Envoyé par Maxence HUBICHE
    Déjà, vires donc les : derrière ELSE, et fais des renvois à la ligne.
    Ils ne servent à rien d'autre qu'à semer le trouble dans ton code.

    Ensuite, ton code parait bien compliqué.
    Si je ne m'abuse, il sert à consolider des données (synthèse de plusieurs lignes) en fonction d'Identifiants.

    Une requête ne suffirait-elle pas ?
    Heu oui c'est bien une synthese de plusieurs lignes. et pour la requete elle serait trop compliké pour moi... et je precise que les clés ne sont pas du meme type... et certains tuples ne sont que du txt

  6. #6
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Localisation : Sénégal

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 229
    Points : 1 579
    Points
    1 579
    Par défaut
    Dans ce cas je ne vois pas le problème

    ...
    If source <> rst1.Fields("IDENTIFIANT INSTALLATION") Then
    ...
    ici source quotient bien la valeur de la ligne précédante et rst1.Fields("IDENTIFIANT INSTALLATION") contient la valeur de la ligne en cours. A la fin du fichier rst1.Fields("IDENTIFIANT INSTALLATION") et le dernier et est bel et bien comparer à la ligne précédente contenue dans Source !

    En plus avec ca

    ...
    Loop While Not rst4.EOF
    tu risque de ne jamais sortir de ta boucle.

    Je me perds dans tes recordset rst1, rst3, rst4 et rst5. Je trouves tout ca bien compliqué.
    Amicalement

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    41
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Val de Marne (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 41
    Points : 17
    Points
    17
    Par défaut
    Citation Envoyé par DMboup
    tu risque de ne jamais sortir de ta boucle.

    Je me perds dans tes recordset rst1, rst3, rst4 et rst5. Je trouves tout ca bien compliqué.
    sisi je sort bien de ma boucle mais les dernier champs n'est pas inseré, et pour les recordset dsl c'est temporaire, une fois que ca tourne je change, promi ^^

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    90
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 90
    Points : 111
    Points
    111
    Par défaut
    ben à la sortie de ta boucle tu vérifie si TOTconsoligne<>0

    Si oui alors ca veut dire qu'il y en a une que tu n'as pas pris en compte et donc il faut le rajouter sur le dernier record avant le EOF que tu sauves dans la variable "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
    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
     
    While Not rst1.EOF
    	If source <> rst1.Fields("IDENTIFIANT INSTALLATION") Then
    		rst4.MoveFirst
                    Do      'ajout dans la table détailler
                    	If Not IsNull(rst4.Fields("prestbase")) Then
                            	If CDbl(Val(rst4.Fields("prestbase"))) = rst1.Fields("IDENTIFIANT INSTALLATION") Then
                                    	MsgBox ("ajout ds détailler")
                                    	rst3.AddNew
                                    	rst3.Fields("prestation_id") = rst4.Fields("prestation_id")
                                    	rst3.Fields("consoligne") = TOTconsoligne
                                    	rst3.Fields("N__Facture") = rst5("NUMERO FACTURE")
                                    	rst3.Fields("N__Compte_Opera") = rst5("COMPTE DE FACTURATION")
                                    	rst3.Update
                                    	TOTabtprest = 0
                                    	TOTconsoligne = 0
                                    	TOTaccesPrest = 0
                                    	TOTdiversPrest = 0
                                    	TOTremisePrest = 0
                                    	Exit Do
                                	End If
                            End If
    			rst4.MoveNext
                    Loop While Not rst4.EOF
    	Else
            	TOTconsoligne = rst1.Fields("montant appel") + TOTconsoligne                
           End If
           MsgBox (rst1.Fields("IDENTIFIANT INSTALLATION"))
           source = rst1.Fields("IDENTIFIANT INSTALLATION")
           rst1.MoveNext
    Wend
    if TOTconsoligne<>0 then
    	rst4.MoveFirst
    	Do      'ajout dans la table détailler
    		If Not IsNull(rst4.Fields("prestbase")) Then
                    	If CDbl(Val(rst4.Fields("prestbase"))) = source Then
                            	MsgBox ("ajout ds détailler")
                                    rst3.AddNew
                                    rst3.Fields("prestation_id") = rst4.Fields("prestation_id")
                                    rst3.Fields("consoligne") = TOTconsoligne
                                    rst3.Fields("N__Facture") = rst5("NUMERO FACTURE")
                                    rst3.Fields("N__Compte_Opera") = rst5("COMPTE DE FACTURATION")
                                    rst3.Update
                                    TOTabtprest = 0
                                    TOTconsoligne = 0
                                    TOTaccesPrest = 0
                                    TOTdiversPrest = 0
                                    TOTremisePrest = 0
                                    Exit Do
    			End If
                    End If
    		rst4.MoveNext
    	Loop While Not rst4.EOF
    end if
    ou un truc du genre

    @+
    rafu0n3r

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    41
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Val de Marne (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 41
    Points : 17
    Points
    17
    Par défaut
    c pas bete comme idée je vais verifié ca
    je vous tien au courant

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    41
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Val de Marne (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 41
    Points : 17
    Points
    17
    Par défaut
    bon a priori ca l'ajoute, j'ai juste un pti pb de doublon mais ca devrai pas etre trop dur a trouvé
    encore merci a vous tous et vos contribution

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    41
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Val de Marne (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 41
    Points : 17
    Points
    17
    Par défaut
    Citation Envoyé par Maxence HUBICHE
    Déjà, vires donc les : derrière ELSE, et fais des renvois à la ligne.
    Ils ne servent à rien d'autre qu'à semer le trouble dans ton code.

    Ensuite, ton code parait bien compliqué.
    Si je ne m'abuse, il sert à consolider des données (synthèse de plusieurs lignes) en fonction d'Identifiants.

    Une requête ne suffirait-elle pas ?
    Bon je croi que tu a raison au final je me prend la tete pour rien surtout que les données étant mélangé...

    donc ma requete sql:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT Cegetel.[IDENTIFIANT INSTALLATION], Sum(Cegetel.[MONTANT APPEL]) AS [SommeDeMONTANT APPEL]
    FROM Cegetel
    GROUP BY Cegetel.[IDENTIFIANT INSTALLATION];
    mais je n'arrive pas a la faire fonctionné sous vba, est il possible d'utilisé une requete créer sous access ou faut il que je passe sous vba et meme avec les FAQ j'ai pas réussi a la faire fonctionner

  12. #12
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Localisation : Sénégal

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 229
    Points : 1 579
    Points
    1 579
    Par défaut
    Et si tu commencait par nous ce que tu veux faire (résultat) et avec quoi (table, requete, code vba)?
    Amicalement

  13. #13
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Localisation : Sénégal

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 229
    Points : 1 579
    Points
    1 579
    Par défaut
    Je crois que le plus simple c'est de nous dire ce que tu veux comme résultat et quel source tu veux utliser pour y arriver.

    Ensuite tu peux montrer ce que tu as déjà commencer. Et on verra bien.
    Amicalement

  14. #14
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    41
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Val de Marne (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 41
    Points : 17
    Points
    17
    Par défaut
    j'ai une table cegetel(avec le num de tel et le montant par num pour chaque appel) que je veux mettre dans une table détailler qui est lier a une table prestation ou l'on trouve le fameux num de tel(type txt car pas que des num)
    donc je veux "juste" avoir le total par numéro et les mettre dans ma table détailler, le tout via vba...

    Si besoin d'info sup demandé moi

  15. #15
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Localisation : Sénégal

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 229
    Points : 1 579
    Points
    1 579
    Par défaut
    Par VBA tu peux soit utiliser un recordset soit une seule requête INSERT INTO.

    Le recordset étant plus rapide voila un modél.
    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
     
    Dim mbd As Database, TableDestination As RecordSet, DOrigine As Recordset
     
    Set mbd=currentdb()
    set TableDestination=mbd.OpenRecordSet("Ta Table de destination")
     
    set DOrigine=mbd.OpenRecordSet("SELECT [IDENTIFIANT INSTALLATION], Sum(Cegetel.[MONTANT APPEL]) AS [SommeDeMONTANT APPEL] FROM Cegetel GROUP BY Cegetel.[IDENTIFIANT INSTALLATION];")
     
    Do Until DOrigine.EOF
         TableDestination.AddNew
         TableDestination("Champ1")=DOrigine("[IDENTIFIANT INSTALLATION]")
         TableDestination("Champ2")=DOrigine("[SommeDeMONTANT APPEL]")
         TableDestination.Update
     
    DOrigine.MoveNext
    Loop
    TableDestination.Close
    DOrigine.Close
    Set mbd=nothing
    Amicalement

  16. #16
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    41
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Val de Marne (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 41
    Points : 17
    Points
    17
    Par défaut
    J'ai une erreur d'execution n°91:
    variable objet ou de bloc with non defini sur la ligne ou se trouve l'instruction SQL...

  17. #17
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Localisation : Sénégal

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 229
    Points : 1 579
    Points
    1 579
    Par défaut
    J'ai moi saisi à la volet. Tu peux montrer ce que tu as?
    Amicalement

  18. #18
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    41
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Val de Marne (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 41
    Points : 17
    Points
    17
    Par défaut
    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
     
    Private Sub test()
     
    Dim Dorigine As recordset
    Dim mbd As dao.Database
    Dim detailler As dao.recordset
     
     
    Set Dorigine = mbd.OpenRecordset("SELECT cegetel.[IDENTIFIANT INSTALLATION], Sum(Cegetel.[MONTANT APPEL]) AS [SommeDeMONTANT APPEL] FROM Cegetel GROUP BY Cegetel.[IDENTIFIANT INSTALLATION];")
     
                    Do Until Dorigine.EOF
                        detailler.AddNew
                        detailler("Prestation_ID") = Dorigine("[IDENTIFIANT INSTALLATION]")
                        detailler("Consoligne") = Dorigine("[SommeDeMONTANT APPEL]")
                        detailler.Update
     
                        Dorigine.MoveNext
                    Loop
                    detailler.Close
                    Dorigine.Close
                    Set mbd = Nothing
     
    End Sub
    voila mon code comme souhaité

  19. #19
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Localisation : Sénégal

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 229
    Points : 1 579
    Points
    1 579
    Par défaut
    Tu as oublié d'initialise mbd et detailler
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    set mbd=currentdb()
    set detailler=mbd.OpenRecordset("Ta Table destination")
    Amicalement

  20. #20
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    41
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Val de Marne (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 41
    Points : 17
    Points
    17
    Par défaut
    que c*n....

    Merci je rajoute qq truc ca et la mais a priori ca devrai marché bcp mieu!

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

Discussions similaires

  1. Probleme dans une boucle for, faisant appel a une fonction
    Par mapotam dans le forum Shell et commandes GNU
    Réponses: 3
    Dernier message: 22/01/2010, 21h41
  2. probleme dans une boucle
    Par youhibadelphi dans le forum Débuter
    Réponses: 30
    Dernier message: 20/12/2009, 12h11
  3. probleme dans une boucle
    Par moinegourmand dans le forum Débuter
    Réponses: 6
    Dernier message: 17/01/2009, 08h54
  4. probleme dans une boucle do while
    Par oldscrout dans le forum Débuter
    Réponses: 2
    Dernier message: 30/12/2008, 17h02
  5. Probleme dans une boucle while pour remplir une JTable
    Par sky88 dans le forum Composants
    Réponses: 3
    Dernier message: 27/03/2008, 14h01

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