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 :

Fonction Split et boucle For next [AC-2003]


Sujet :

VBA Access

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Août 2005
    Messages
    660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Août 2005
    Messages : 660
    Par défaut Fonction Split et boucle For next
    Bonjour,

    J’ai une table Activités (rs3) dont le champ Discipline contient ces valeurs :
    Gym
    Tir à l’arc

    et une autre Table Import (rs1) dont le champ Activites contient des valeurs concaténés :
    Gym, Tir à l’arc

    Je voudrais mettre à jour la table Activités (rs3) en supprimant la valeur Tir à l’arc.

    J’utilise la fonction Split, mais j’ai un problème pour parcourir le tableau.

    Dans le cas présent :

    Si dans la table Import (rs1) je supprime :
    Tir à l’arc

    Dans la table Activités (rs3) c’est Gym qui est supprimé à la place de Tir à l’arc

    Je joins le 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
    '--- Boucle sur la table rs3 activités
         Do While Not rs3.EOF
     
    '--- Détermine le nombre de chaînes dans un tableau
         TabVar = Split((rs3("Discipline")), ",")
     
    '--- Balaye le tableau
         For intI = UBound(TabVar) To LBound(TabVar)
     
    '--- Rechercher si le numéro  existe
         If blnCibleVide Then
             blnExistePas = True
          Else
             rs1.FindFirst "[Numero]='" & Nz((rs3![NuméroLicence])) & "' AND " & _
                           "[Activites]=" & Chr(34) & Trim(TabVar(intI)) & Chr(34)
             blnExistePas = rs1.NoMatch
        End If
     
    '--- N'existe pas  on ajoute
         If blnExistePas Then
            Debug.Print "Egale : ne rien faire" 
        Else
           Debug.Print "Différent : supprime l’enregistrement "                            
        End If
        Next
        rs3.MoveNext
        Loop
    Merci pour votre aide.

    Salutations

  2. #2
    Modérateur

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

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 410
    Par défaut
    Pourquoi ne pas faire une requête de suppression :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    delete * from [Activités] where [NomTonChampActivite]="Tir à l'arc"
    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  3. #3
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Août 2005
    Messages
    660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Août 2005
    Messages : 660
    Par défaut
    Bonsoir Marot_r

    Merci de m’avoir répondu.

    Toutes mes excuses car je m’aperçois que j’ai omis de donner quelques explications.

    Les données de la table Import (rs1) proviennent d’une table que j’importe, et à au moment de l’importation, je ne sais pas si des valeurs dans le champ Activités (concaténé) on été retirées. Ces pour cela que je dois déterminer celui ou ceux qui ont été supprimés pour mettre à jour mon autre table.

    Salutations

  4. #4
    Expert confirmé
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Par défaut
    Bonjour,

    Voila ce que j'ai compris :

    Tu as une table Activités (rs3 dans le code VBA) dans laquelle on a un enregistrement par licencié et par activité.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    NuméroLicence  Discipline
    -------------  ------------------
    123            Gym
    123            Judo
    123            Tir à l'arc
    Tu as une table Import (rs1 dans le code VBA) dans laquelle on a un enregistrement par licencié et où les activités sont concaténées.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    NuméroLicence  Activités
    -------------  ------------------
    123            Gym, Karaté, Tir à l'arc
    Dans ton code tu boucles sur la table Activités (rs3) pour vérifier si le couple {Licencié, Discipline} existe dans la table Import (rs1).
    Cependant, tu utilises la fonction Split sur le champ Discipline de la table Activités (rs3).
    Ce champ ne contient pas la concaténation de plusieurs activités. Ou bien est-ce un champ à plusieurs valeurs ?

    A+

  5. #5
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Août 2005
    Messages
    660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Août 2005
    Messages : 660
    Par défaut
    Bonjour LedZepII.

    Merci pour ta réponse, et content de te rencontrer sur ce post.

    Tu as raison, je me suis planté lamentablement, le split doit se faire
    sur la table Import (rs1).

    Mais alors rs1.FindFirst est faux aussi, je suis complètement perdu.


    Salutations

  6. #6
    Expert confirmé
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Par défaut
    Re-bonjour,

    Voici ci-dessous comment je coderai.
    Je rappelle la logique :
    On parcourt les {Licencié, Discipline} de la table Activités et on vérifie que {Licencié, Discipline} existe dans la table Import.
    A partir de ligne 29, blnExistePas reflète l'état de la vérification.
    J'insiste la dessus, car les commentaires que j'ai ajoutés au delà de la ligne 29 ont l'air en contradiction avec tes Debug.Print.
    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
    '--- Boucle sur la table rs3 activités
         Do While Not rs3.EOF   ' table Activités
     
    '--- Rechercher si le numéro existe
         If blnCibleVide Then
            blnExistePas = True
         Else
            ' Le numéro de licencié est-t-il dans rs1 ?
            rs1.FindFirst "[Numero]='" & Nz(rs3![NuméroLicence]) & "'"         
            If rs1.NoMatch = True Then
               ' Non, le numéro de licencié n'est pas dans rs1
               blnExistePas = True
            Else
               ' Oui, Numéro de licencié trouvé. On parcourt ses activités.
               ' ... Eclater les activités concaténées en tableau
                TabVar = Split((rs1("Discipline")), ",")
                ' ... Balaye le tableau            
                blnExistePas = True ' Par défaut on suppose que l'activité n'existe pas dans rs1
                For intI = UBound(TabVar) To LBound(TabVar)
                    If Trim(TabVar(intI)) = rs3("Activites") Then
                       ' Si on a trouvé l'activité on met blnExistePas à Faux
                       blnExistePas = False
                       Exit For
                    End If
                Next 
            End If
         End If
     
    '--- N'existe pas  on ajoute
         If blnExistePas Then
            ' L'activité de rs3 n'existe pas dans rs1
            Debug.Print "Egale : ne rien faire" 
         Else
            ' L'activité de rs3 existe dans rs1
           Debug.Print "Différent : supprime l’enregistrement "                            
         End If     
     
         rs3.MoveNext
         Loop
    A+

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

Discussions similaires

  1. les boucles for..next
    Par dispa dans le forum Windows Forms
    Réponses: 3
    Dernier message: 27/06/2007, 14h23
  2. boucle for next ? peut être mais comment
    Par caro2552 dans le forum VBA Access
    Réponses: 11
    Dernier message: 07/02/2007, 20h26
  3. [VB.net] Boucle for next avec un tableau
    Par grand_prophete dans le forum Windows Forms
    Réponses: 4
    Dernier message: 31/05/2006, 11h08
  4. [VB6] Problème contrôle Timer et boucle For-Next ...
    Par Stéphane BEHMENBURG dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 01/12/2005, 17h36
  5. Réponses: 3
    Dernier message: 03/11/2005, 19h22

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