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 :

Alimenter table automatiquement selon critère - avec boucle


Sujet :

VBA Access

  1. #1
    Futur Membre du Club
    Femme Profil pro
    agent informatique et réseaux
    Inscrit en
    Février 2015
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : agent informatique et réseaux

    Informations forums :
    Inscription : Février 2015
    Messages : 5
    Points : 5
    Points
    5
    Par défaut Alimenter table automatiquement selon critère - avec boucle
    bonjour,
    J'ai un script vba qui me permet d'ajouter (par clic bouton) un nombre d'enregistrements dans une table selon un chiffre présent dans un formulaire.
    Si le formulaire indique "nombre de cartons" = 3 ; alors le script ajoute 2 lignes de plus dans la table.
    Mon script fonctionne seulement sur un formulaire à enregistrement unique.
    Je n'arrive pas à l'adapter avec une boucle qui vérifie tous les enregistrements du formulaire (et donc de la table).
    La boucle fait son travail, mais ne rentre pas dans ma partie "addnew" lorsqu'elle rencontre la valeur "nombre de cartons" > 1.
    Si quelqu'un pouvait m'aider, ce serait super!

    Voici mon code avec la boucle qui ne fonctionne pas :

    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
    Option Compare Database
     
    Private Sub btn_ajouts_cartons_Click()
        ' Quelques variables
        Dim rst As DAO.Recordset
        Dim lngNum As Long
        Dim NbCarton As Integer
        'NbCartons = rst("Nb_cartons").Value
        NbCartons = Me.Nb_cartons.Value
    '    Dim NbCartons As Long
     
        ' Ouvrir la table en lecture/écriture
        Set rst = CurrentDb.OpenRecordset("tbl_import", dbOpenDynaset)
     
        'Boucler jusqu'à la fin de la table
        Do While Not rst.EOF
     
        If NbCartons > 1 Then
     
        'Do While NbCartons > 1
     
        ' Boucler sur le nombre de cartons
        For lngNum = 0 To Me.Nb_cartons - 2
            ' Créer un enregistrement dans la table
            rst.AddNew
     
            ' Alimenter les champs
            rst("Titre") = Me.Titre
            rst("KundeNr") = Me.KundeNr
            rst("Exemplaires") = Me.Exemplaires
            rst("Ville") = Me.Ville
            rst("Nb_cartons") = Me.Nb_cartons
            rst("Quantite") = Me.Quantite
            rst("Nb_solde") = Me.Nb_solde
            rst("Tri") = Me.Tri
            ' Valider
            rst.Update
        Next
     
        End If
     
        rst.MoveNext
         Loop
     
        rst.Close
        Set rst = Nothing
        MsgBox "Opération terminée !", vbInformation
     
    End Sub


    voici une image du formulaire:

    Nom : image formulaire multiple.png
Affichages : 294
Taille : 29,6 Ko

  2. #2
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 594
    Points : 282 192
    Points
    282 192
    Par défaut
    Bonjour et bienvenue chez nous,

    Dans tous les cas que tu montres, il y a seulement 1 carton

    Donc, rien ne se passe dans ta boucle !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     If NbCartons > 1 Then  !!!!!
    SVP ne m'envoyez pas de messages privés pour poser des questions techniques, vous n'aurez pas de réponse !

  3. #3
    Futur Membre du Club
    Femme Profil pro
    agent informatique et réseaux
    Inscrit en
    Février 2015
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : agent informatique et réseaux

    Informations forums :
    Inscription : Février 2015
    Messages : 5
    Points : 5
    Points
    5
    Par défaut
    Bonjour ClaudeLELOUP,
    ben si, l'image du formulaire est le reflet de ma table. En enregistrement numéro 4, il y a bien 3 cartons.
    Donc j'aimerais que lorsque ma boucle arrive à l'enregistrement 4, elle m'ajoute 2 enregistrements identiques dans ma table.
    Je pense que ma boucle est mal construite ou bien je n'utilise pas la boucle adéquate.
    Il y a très longtemps que je n'ai plus fait de développement. Et les boucles ont toujours été difficiles pour moi.

  4. #4
    Expert confirmé Avatar de nico84
    Homme Profil pro
    Consultant/développeur ERP
    Inscrit en
    Mai 2008
    Messages
    3 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant/développeur ERP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 3 087
    Points : 5 203
    Points
    5 203
    Par défaut
    Bonjour,

    C'est rst!NbCartons qu'il faut tester si j'ai bien compris !
    Par ailleurs si tu ajoutes des lignes dans la table que tu es en train de parcourir je ne suis pas sûr que cela se passe bien car rst ne peut pas pointer à la fois sur la ligne lue et la ligne insérée

    -> parcourir me.recordsetclone et insérer par currentdb.execute "insert into..."
    Utilisez Planet, gestion d'entreprise gratuite pour TPE / PME

  5. #5
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 594
    Points : 282 192
    Points
    282 192
    Par défaut
    En enregistrement numéro 4, il y a bien 3 cartons.
    Zut, je regardais la colonne Nombre cartons solde !

    Je suppose que "tbl_import" est la source de ton formulaire.

    Le code que du montres va lire tous les enregistrements, mais ton formulaire va rester immobile. En d’autres mots les Me.xxx ne contiennent pas ce que tu crois.

    S’il s’agit d’ajouter des enregistrements au départ de ce que contient "tbl_import", utilise plutôt une requête ajout.


    P.-S. nico84

    Tu as posté pendant que je rédigeais !
    On dit presque la même chose...
    SVP ne m'envoyez pas de messages privés pour poser des questions techniques, vous n'aurez pas de réponse !

  6. #6
    Expert confirmé Avatar de nico84
    Homme Profil pro
    Consultant/développeur ERP
    Inscrit en
    Mai 2008
    Messages
    3 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant/développeur ERP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 3 087
    Points : 5 203
    Points
    5 203
    Par défaut
    Oui Claude j'ai été plus rapide

    Pour aller plus loin, il me semble curieux de dupliquer des lignes à tour de bras
    Tel que l'algorithme est présenté, les nouvelles lignes ayant aussi plusieurs cartons risquent de faire des petits et ainsi de suite à l'infini
    Utilisez Planet, gestion d'entreprise gratuite pour TPE / PME

  7. #7
    Futur Membre du Club
    Femme Profil pro
    agent informatique et réseaux
    Inscrit en
    Février 2015
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : agent informatique et réseaux

    Informations forums :
    Inscription : Février 2015
    Messages : 5
    Points : 5
    Points
    5
    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
    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
    Private Sub ajout_soldes_Click()
    Dim rst As Recordset
    Dim rst2 As Recordset
    Dim i As Integer
    Dim n2 As Integer
    Dim valeur As Integer
    Set rst = CurrentDb.OpenRecordset("tbl_import")
     
    Do Until rst.EOF
    Set rst2 = CurrentDb.OpenRecordset("tbl_import_incrementee_soldes")
     
        If Not IsNull(rst![Nb_solde]) Then
            For i = 1 To rst![Nb_solde]
                rst2.AddNew
                    rst2![Titre] = rst![Titre]
                    rst2![KundeNr] = rst![KundeNr]
                    rst2![Exemplaires] = rst![Exemplaires]
                    rst2![Ville] = rst![Ville]
                    rst2![Nb_solde] = rst![Nb_solde]
                    rst2![Qte_solde] = rst![Qte_solde]
                    rst2![Tri] = rst![Tri]
                    rst2![Total_cartons] = rst![Total_cartons]
                    rst2![Poids_net] = rst![Poids_net]
                rst2.Update
            Next i
        End If
     
    rst.MoveNext    ' Enregistrement suivant
    Loop
     
    ' Fermeture et libération des objets
    '
    rst.Close
    rst2.Close
    Set rst = Nothing
    Set rst2 = Nothing
     
    MsgBox "Cartons Soldes ajoutés !", vbInformation
    End Sub
     
     
    Private Sub btn_ajouts_cartons_multiples_Click()
    Dim rst As Recordset
    Dim rst2 As Recordset
    Dim i As Integer
    Dim n2 As Integer
    Dim valeur As Integer
    Set rst = CurrentDb.OpenRecordset("tbl_import")
     
    Do Until rst.EOF
    Set rst2 = CurrentDb.OpenRecordset("tbl_import_incrementee")
     
        If Not IsNull(rst![Nb_cartons]) Then
            For i = 1 To rst![Nb_cartons]
                rst2.AddNew
                    rst2![Titre] = rst![Titre]
                    rst2![KundeNr] = rst![KundeNr]
                    rst2![Exemplaires] = rst![Exemplaires]
                    rst2![Ville] = rst![Ville]
                    rst2![Nb_cartons] = rst![Nb_cartons]
                    rst2![Quantite] = rst![Quantite]
                    rst2![Tri] = rst![Tri]
                    rst2![Total_cartons] = rst![Total_cartons]
                    rst2![Poids_net] = rst![Poids_net]
                rst2.Update
            Next i
        End If
     
    rst.MoveNext    ' Enregistrement suivant
    Loop
     
    ' Fermeture et libération des objets
    '
    rst.Close
    rst2.Close
    Set rst = Nothing
    Set rst2 = Nothing
     
    MsgBox "Cartons ajoutés !", vbInformation
    End Sub
    bonjour à tous et merci beaucoup de vous être intéressés à mon problème. Vous m'avez donné des pistes.
    J'ai trouvé la solution hier soir et je poste le code de mes 2 instructions.
    En fait, par clic bouton, je copie tous les enregistrements correspondant à des cartons dans une nouvelle table "tbl_import_incrementee" et si je trouve un nb de cartons supérieur à 1, je duplique les enregistrement autant de fois.
    Par un autre clic bouton, je fais la même chose avec les cartons soldes (qui se trouvent dans la partie droite de ma table import. Le code va copier dans une nouvelle table "tbl_import_incrementee_soldes".
    Ensuite, au moyen d'une requête ajout, j'insère les enregistrements des 2 tables dans une 3ème table.
    Et de là, je peux faire un état (en fait, ce sont des fichettes. Pour chaque carton ou carton solde, j'ai besoin d'une fichette).
    Et mes fichettes sont créées dans le même ordre de production en atelier. Je n'ai plus qu'à imprimer.
    Bonne journée à tous.

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

Discussions similaires

  1. lecture d'une table avec boucle + variable à alimenter et à réinitialiser
    Par paris11 dans le forum Développement de jobs
    Réponses: 5
    Dernier message: 22/05/2014, 16h14
  2. [AC-2010] Alimneter une table avec les champs d'une autre table selon critères
    Par tibao276 dans le forum Access
    Réponses: 2
    Dernier message: 28/02/2014, 21h26
  3. [AC-2003] Exporter Tables & Requêtes selon critères
    Par stsym dans le forum VBA Access
    Réponses: 2
    Dernier message: 13/06/2011, 05h13
  4. [MySQL] Afficher le contenu d'une table MYSQL selon un critère bien défini
    Par Webnadou dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 28/09/2007, 21h38

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