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 :

Problème boucle après recopie de fonction


Sujet :

VBA Access

  1. #1
    Membre actif
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 092
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 092
    Points : 268
    Points
    268
    Par défaut Problème boucle après recopie de fonction
    Bonjour à tous

    Lorsque je recopie cette fonction dans le module d'une nouvelle version de ma bdd, il me réclame de déclarer "n" alors que j'avais pas besoin dans le module d'origine puis plante à l’exécution.
    Je déclare "n" en tant qu'integer et il me sert au comptage des lignes.

    J'aimerai comprendre pourquoi cette boucle plante et pourquoi dans l'autre base il ne me demande pas de déclarer "n" svp... Mystère ?

    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
    Public Function OuvrirListeActionsClient()
     
        'Ouvre la liste des actions à facturer au client et l'insère dans le champ description de la ligne de facture ou bien le libellé de celle ci
     
        DoCmd.OpenForm ("sf groupes interventions"), , , "[numcontact]=screen.activeform.numcontact"
        Forms![sf groupes interventions].BtnAppliquerEtFermer.Visible = True
     
        'Efface toute sélection antérieure
        DoCmd.SetWarnings False
        DoCmd.RunSQL ("update t_rendezvous set t_rendezvous.sélectionner=false")
        DoCmd.SetWarnings True
     
        Forms![sf groupes interventions].AllowAdditions = False
     
     
     
    MsgBox ("Veuillez sélectionner les actions à inclure dans ce document"), vbOKOnly
     
    End Function
    Public Function SélectionListeActionsPourEcriture()
     
    DoCmd.RefreshRecord
     
    Dim Sélection As Recordset
    Dim ListeSélection As Variant
    Dim i As Integer
      Set Sélection = CurrentDb.OpenRecordset("SELECT t_rendezvous.horairedebut, t_rendezvous.horairefin, t_rendezvous.[sélectionner], t_rendezvous.DuréeAction, [Types actions].TypeAction FROM [Types actions] INNER JOIN t_rendezvous ON [Types actions].NumTypeAction = t_rendezvous.TypeAction WHERE (((t_rendezvous.[Sélectionner]) = True))ORDER BY t_rendezvous.horairedebut DESC;")
     
    If Sélection.BOF = True Then
      MsgBox "Aucun élément sélectionné", vbCritical
        Exit Function
      End If
     
      Sélection.MoveFirst
      ListeSélection = ""
     
     
        While Not Sélection.EOF
        For i = 1 To n
        i = 1 + n
        ListeSélection = ListeSélection & "- i" & DateValue(Sélection("horairedebut")) & "  > " & Sélection("TypeAction") & " " & " de " & Format(TimeValue(Sélection("horairedebut")), "hh:mm") & " à " & Format(TimeValue(Sélection("horairefin")), "hh:mm") & " (" & Sélection("duréeaction") & " min.)" & "<br>"
        Sélection.MoveNext
        Next i
      Wend
     
        ListeSélection = Left(ListeSélection, Len(ListeSélection) - 1)
        Forms("devis et factures").Libellé = Forms("devis et factures").Libellé & "<br>" & ListeSélection
     
      Sélection.Close
      Set Sélection = Nothing
     
        DoCmd.Close
     
     
        'Attribue le numéro de facture actuel aux actions sélectionnées et change l' état de l'action à "facturé"
        DoCmd.RunSQL ("update t_rendezvous set t_rendezvous.numfacture = forms![devis et factures]![numdocument],t_rendezvous.etataction='5' where (t_rendezvous.numcontact=forms![devis et factures]![numcontact] and t_rendezvous.sélectionner=true);")
     
     
        'Annule toute sélection antérieure
        DoCmd.RunSQL ("update t_rendezvous set t_rendezvous.sélectionner=false")
     
    End Function

  2. #2
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 007
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 007
    Points : 24 579
    Points
    24 579
    Par défaut
    Bonjour,

    Il faut toujours travailler avec le réglage :
    dans les modules.

    ça évite les problèmes.

    Cordialement,
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  3. #3
    Membre actif
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 092
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 092
    Points : 268
    Points
    268
    Par défaut
    Citation Envoyé par loufab Voir le message
    Bonjour,

    Il faut toujours travailler avec le réglage :
    dans les modules.

    ça évite les problèmes.

    Cordialement,
    Bonjour Loufab

    Merci pour ta réponse Loufab mais je suis toujours en Explicit !
    "n" a t'il vraiment besoin d'être déclaré ?

  4. #4
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 007
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 007
    Points : 24 579
    Points
    24 579
    Par défaut
    Donc si tu es en explicit il faut déclarer toutes les variables. Sinon tu l'enlèves.
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  5. #5
    Membre actif
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 092
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 092
    Points : 268
    Points
    268
    Par défaut
    J'ai déclaré "n" en integer et là ça plante comme si la boucle était infinie ...

  6. #6
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 007
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 007
    Points : 24 579
    Points
    24 579
    Par défaut
    Trace ton code avec une exécution pas-à-pas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    While Not Sélection.EOF
        For i = 1 To n
        i = 1 + n
        ListeSélection = ListeSélection & "- i" & DateValue(Sélection("horairedebut")) & "  > " & Sélection("TypeAction") & " " & " de " & Format(TimeValue(Sélection("horairedebut")), "hh:mm") & " à " & Format(TimeValue(Sélection("horairefin")), "hh:mm") & " (" & Sélection("duréeaction") & " min.)" & "<br>"
        Sélection.MoveNext
        Next i
    Wend
    Pourquoi ?
    F1 pour connaitre le fonctionnement d'un For !

    Cordialement,
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  7. #7
    Membre actif
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 092
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 092
    Points : 268
    Points
    268
    Par défaut
    Bon, j'ai changé pour i=i+n, et je délare n en integer ... rien n'y fait ça me fait tout planter !!!
    Le plus bizarre c'est que la fonction marchait parfaitement dans la copie de la bdd d'où elle vient ...

    Je ne vois pas d'où ça vient

  8. #8
    Membre expérimenté Avatar de bernardmichel
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2004
    Messages
    1 181
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 181
    Points : 1 591
    Points
    1 591
    Par défaut
    Hello !

    Je ne comprends pas ton utilisation de For..To..Next, ceci d'autant plus que tu n'utilises le "n" nulle part...

    Essaye d'utiliser cela et dis nous si cela répond à tes attentes:

    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
    Public Function SélectionListeActionsPourEcriture()
    Dim Sélection       As DAO.Recordset
    Dim ListeSélection  As Variant
    Dim i               As Integer
     
        DoCmd.RefreshRecord
     
      Set Sélection = CurrentDb.OpenRecordset("SELECT t_rendezvous.horairedebut, t_rendezvous.horairefin, t_rendezvous.[sélectionner], t_rendezvous.DuréeAction, " & _
                                              "[Types actions].TypeAction FROM [Types actions] INNER JOIN t_rendezvous ON [Types actions].NumTypeAction = t_rendezvous.TypeAction " & _
                                              "WHERE (((t_rendezvous.[Sélectionner]) = True))ORDER BY t_rendezvous.horairedebut DESC;")
     
        If Sélection.BOF = True Then
            MsgBox "Aucun élément sélectionné", vbCritical
            Exit Function
        End If
     
        Sélection.MoveLast
        Sélection.MoveFirst
        ListeSélection = ""
     
        i = 0
        While Not Sélection.EOF
          i = i + 1
          ListeSélection = ListeSélection & "- i" & DateValue(Sélection("horairedebut")) & "  > " & Sélection("TypeAction") & " " & " de " & _
                           Format(TimeValue(Sélection("horairedebut")), "hh:mm") & " à " & Format(TimeValue(Sélection("horairefin")), "hh:mm") & _
                           " (" & Sélection("duréeaction") & " min.)" & "<br>"
          Sélection.MoveNext
        Wend
     
        ListeSélection = Left(ListeSélection, Len(ListeSélection) - 1)
        Forms("devis et factures").Libellé = Forms("devis et factures").Libellé & "<br>" & ListeSélection
     
        Sélection.Close
        Set Sélection = Nothing
     
        DoCmd.Close
     
     
        'Attribue le numéro de facture actuel aux actions sélectionnées et change l' état de l'action à "facturé"
        DoCmd.RunSQL ("update t_rendezvous set t_rendezvous.numfacture = forms![devis et factures]![numdocument],t_rendezvous.etataction='5' " & _
                      "where (t_rendezvous.numcontact=forms![devis et factures]![numcontact] and t_rendezvous.sélectionner=true);")
     
     
        'Annule toute sélection antérieure
        DoCmd.RunSQL ("update t_rendezvous set t_rendezvous.sélectionner=false")
     
    End Function
    Cordialement.
    Nous n'héritons pas la Terre de nos ancêtres, nous l'empruntons à nos enfants, prenons-en soin !
    (proverbe amérindien)

  9. #9
    Membre actif
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 092
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 092
    Points : 268
    Points
    268
    Par défaut
    Bonjour BernardMichel

    Merci pour ta réponse,

    Malheureusement l'éditeur me dit "variable non définie" en pointant la ligne i=0
    le "Next i" n'est pas nécessaire ? si je le retire ça ne change rien

    S'agirait il d'un virus ?

  10. #10
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 007
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 007
    Points : 24 579
    Points
    24 579
    Par défaut
    F1 sur FOR pour comprendre comment fonctionne un FOR.

    Le problème est là.
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  11. #11
    Membre actif
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 092
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 092
    Points : 268
    Points
    268
    Par défaut
    Loufab,

    J'ai déjà regardé pour FOR il y a très peu d'explications ... Deplus on s'est débarassé de FOR et Next dans la dernière variante du code.
    Malgré que je déclare i en integer il me dit que la variable n'est pas définie, bizarre non ?

  12. #12
    Membre expérimenté Avatar de bernardmichel
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2004
    Messages
    1 181
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 181
    Points : 1 591
    Points
    1 591
    Par défaut
    Hello !

    Alors, je l'ai testé chez-moi, cela ne pose aucun problème faisant "Débogage | Compiler..."

    Je te remets le code VBA car j'ai fait une toute petite modif sur la ligne: ListeSélection = ListeSélection & "- " & i & Dat....

    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
     
    Public Function SélectionListeActionsPourEcriture()
    Dim Sélection       As DAO.Recordset
    Dim ListeSélection  As Variant
    Dim i               As Integer
     
        DoCmd.RefreshRecord
     
      Set Sélection = CurrentDb.OpenRecordset("SELECT t_rendezvous.horairedebut, t_rendezvous.horairefin, t_rendezvous.[sélectionner], t_rendezvous.DuréeAction, " & _
                                              "[Types actions].TypeAction FROM [Types actions] INNER JOIN t_rendezvous ON [Types actions].NumTypeAction = t_rendezvous.TypeAction " & _
                                              "WHERE (((t_rendezvous.[Sélectionner]) = True))ORDER BY t_rendezvous.horairedebut DESC;")
     
        If Sélection.BOF = True Then
            MsgBox "Aucun élément sélectionné", vbCritical
            Exit Function
        End If
     
        Sélection.MoveLast
        Sélection.MoveFirst
        ListeSélection = ""
     
        i = 0
        While Not Sélection.EOF
          i = i + 1
          ListeSélection = ListeSélection & "- " & i & DateValue(Sélection("horairedebut")) & "  > " & Sélection("TypeAction") & " " & " de " & _
                           Format(TimeValue(Sélection("horairedebut")), "hh:mm") & " à " & Format(TimeValue(Sélection("horairefin")), "hh:mm") & _
                           " (" & Sélection("duréeaction") & " min.)" & "<br>"
          Sélection.MoveNext
        Wend
     
        ListeSélection = Left(ListeSélection, Len(ListeSélection) - 1)
        Forms("devis et factures").Libellé = Forms("devis et factures").Libellé & "<br>" & ListeSélection
     
        Sélection.Close
        Set Sélection = Nothing
     
        DoCmd.Close
     
     
        'Attribue le numéro de facture actuel aux actions sélectionnées et change l' état de l'action à "facturé"
        DoCmd.RunSQL ("update t_rendezvous set t_rendezvous.numfacture = forms![devis et factures]![numdocument],t_rendezvous.etataction='5' " & _
                      "where (t_rendezvous.numcontact=forms![devis et factures]![numcontact] and t_rendezvous.sélectionner=true);")
     
     
        'Annule toute sélection antérieure
        DoCmd.RunSQL ("update t_rendezvous set t_rendezvous.sélectionner=false")
     
    End Function
    Honnêtement, je ne comprends pas pourquoi le "i" pose problème chez-toi ???
    Nous n'héritons pas la Terre de nos ancêtres, nous l'empruntons à nos enfants, prenons-en soin !
    (proverbe amérindien)

  13. #13
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 007
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 007
    Points : 24 579
    Points
    24 579
    Par défaut
    tu as tenté une décompilation/compactage ?

    http://blogaccess.free.fr/?p=75

    Issu du F1 sur le FOR :

    ...l'argument step prend par défaut la valeur 1.
    ...
    Une fois que toutes les instructions de la boucle ont été exécutées, l'argument step est ajouté à counter....
    Et surtout !

    Toute modification de la valeur de counter à l'intérieur de la boucle risque de rendre la lecture et la correction des erreurs du programme plus difficiles.
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  14. #14
    Membre actif
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 092
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 092
    Points : 268
    Points
    268
    Par défaut
    AAAAAARRRRGGGGHHHHH !

    Après compactage tout remarche comme avant !

    J'ai quand même des comportements bizarres dans l' éditeur et c'est pas la première fois que ça arrive, je pense que c'est un genre de virus.
    Il y avait pas longtemps le texte introduit dans l'éditeur était tronqué, l'intellisense ne marchait plus et certains champs n'étaient pas reconnus ...

    Merci pour votre aide

  15. #15
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 007
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 007
    Points : 24 579
    Points
    24 579
    Par défaut
    Attention ! la procédure que je t'ai donné n'est pas un simple compactage, il y a une décompilation + un compactage.

    En gros ça fait un gros nettoyage et remet le fichier à neuf. Des fois c'est trop tard et on perd des morceaux.
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

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

Discussions similaires

  1. Réponses: 21
    Dernier message: 25/11/2014, 11h18
  2. Problème de sortie de la boucle après la première itération
    Par zeusensa dans le forum Visual Studio
    Réponses: 1
    Dernier message: 20/02/2013, 13h21
  3. Problème champ après import d'excel vers access
    Par David M dans le forum Access
    Réponses: 6
    Dernier message: 16/10/2005, 11h53
  4. Problème de titre avec la fonction window.open
    Par kloss dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 18/04/2005, 18h34
  5. [C#] [MSDE] Connexion qui se ferme après appel de fonction
    Par trotters213 dans le forum Windows Forms
    Réponses: 11
    Dernier message: 23/03/2005, 16h30

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