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 :

FindNext et ajout de valeurs


Sujet :

VBA Access

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Inscrit en
    Mars 2012
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Mars 2012
    Messages : 7
    Par défaut FindNext et ajout de valeurs
    Bonjour à tous,

    Je suis bloquée depuis plusieurs jour sur mon code...
    J'ai une table nommée "Liste" qui contient :
    - Numéro
    - Nom
    - Email
    - Tag
    - Groupe

    Le champs "Tag" contient une liste de fichiers dans lesquels on retrouve une personne. (Ces noms de fichiers proviennent du nom des tables dans ma base)
    ex :
    Michael Dupond, a dans Tag : "Incident Internet (Promise, OOPRO) ; Incident Internet DNS, IAMP, MSAP, USSO (Wassup) et EUI ; Incident Internet MSAP Abroad ; Incident Internet PAS; Codir Liste" ... Etc

    Je veux qu'en parcourant ma table Liste, si je trouve les personnes qui dans Tag ont "Incident Internet", je mets alors dans le champs "Groupe" de la ligne correspondante : "Internet"
    Si ensuite je cherche les lignes qui contiennent "Codir Liste", j'ajouterai dans le champ "Groupe" : "Codir"
    Pour Michael Dupond, j'aurai donc le champ "Groupe" qui doit avoir :"Internet; Codir" .
    Michael appartient au groupe Internet et Codir


    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
    For Each tbl In dbs.TableDefs
     
    groupe = tbl.Name
    groupe = Replace(groupe, "_", " ")
    valTag = groupe
     
    Set r = dbs.OpenRecordset("Liste", dbOpenDynaset)
     
     
     
    Select Case groupe
     
         Case "Incident Axway liste Partenaire 1"
                        groupe = "Axway_1 "
     
                    Case "Incident CMC GDF"
                        groupe = "CMC_GDF "
     
                    Case "Incident BIV SIP"
                        groupe = "BIV_SIP "
     
                    Case "Incident CEO"
                        groupe = "CEO "
     
                    Case "Incident Internet DNS, IAMP, MSAP, USSO (Wassup) et EUI"
                        groupe = "DNS_IAMP_MSAP_USSO_EUI "
     
                    Case "Incident Internet PAS"
                        groupe = "PAS "
     
                    Case "Incident ANN CNNE"
                        groupe = "ANN_CNNE "
     
                    ' etc etc ...!
     
    End Select
     
                    'on recherche la 1ère correspondance dans le champ tag
                    ' valTag = Replace(tbl.Name, "_", " ")
     
                    r.FindFirst "Tag Like " & "'*" & valTag & "*'"
                    'On récupère la valeur dans la champ groupe
                    'Au 1er passage, tous le champ groupe est vide
                    valGroupe = r.Fields("Groupe").Value
     
     
                         If r.NoMatch Then
                               r.FindNext "Tag Like " & "'*" & valTag & "*'" 
     
                         Else
     
                          Do While Not r.NoMatch
                                       r.Edit
                                       r![groupe] = valGroupe & ";" & groupe
                                       r.Update                
                                       r.FindNext "Tag Like " & "'*" & valTag & "*'"
     
     
                               Loop
     
                         r.FindNext "Tag Like " & "'*" & valTag & "*'" 
     
                         End If
     
     
     
     
    Next tbl
     
      'suite du prog...

    J'ai bien une mise à jour du champ groupe, mais avec des valeurs peu cohérentes...
    Ex :

    Tag : Incident Axway liste DEPFS bis ; Karma Meteo Liste
    On obtient :
    Groupe : ;BIV_SIP ;EVITA ;MELODI ;Incident Pont de conférence;Réu_Flash ;

    Tag : Incident ANN CNNE
    On obtient :
    Groupe : ;ANN_CNNE

    Tag : Incident SPN
    On obtient :
    Groupe : ;PAS ;SNU ;SPN

    Il y'a un soucis au niveau du passage des lignes et des valeurs mises dans Groupe.
    Je suis passé également par des requêtes SQL, par des Seek, rien n'y fait, je n'y arrive pas !

    Si quelqu'un arrive à y voir clair.
    Ce n'est pas forcément simple à comprendre tout ça, donc n'hésitez pas si vous avez des questions. J'ai essayé de faire au plus clair !

    Merci à tous

  2. #2
    Membre Expert
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2012
    Messages
    1 887
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2012
    Messages : 1 887
    Par défaut
    Bonjour MorningMemories,
    Si je comprend bien ce que tu veux faire il faut que tu passes dans le champ tag comme un record set.
    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
    Dim rstListe As DAO.Recordset, rstTag As DAO.Recordset
    Set rstListe = dbs.OpenRecordset("Liste", dbOpenDynaset)
    While rstListe.EOF = False
    Debug.print rstListe("Nom")
            Set rstTag = .Fields("Tag").Value
            While rstTag.EOF = False
                Debug.Print rstTag
                rstTag.MoveNext
            Wend
            rstTag.Close
    rstListe.MoveNext
    Wend
    rstListe.Close
    Set rstListe = Nothing
    Set dbs = Nothing
    Et la tu peux faire le traitement que tu veux.

  3. #3
    Membre du Club
    Inscrit en
    Mars 2012
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Mars 2012
    Messages : 7
    Par défaut
    Bonjour Robert1957,

    Merci pour ta réponse
    Cependant, je ne comprends pas trop où je peux effectuer ma mise à jour du champ groupe dans le code que tu m'as donné... Peux-tu m'expliquer un peu ?

    Cela n'est pas très clair pour moi :/

    De plus, ton code génère une erreur. A la ligne "Set rstTag " il me dit : objet requis. Apparemment, après vérification, il ne veut pas de rstTag qui soit un recordset

  4. #4
    Membre Expert
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2012
    Messages
    1 887
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2012
    Messages : 1 887
    Par défaut
    Ouppps,
    J'ai fait de mémoire et j'avais oublié:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    While rstListe.EOF = False
    With rstListe
    ....
    End With
    rstListe.MoveNext
    Cela te permet de parcourir les données dans le champ "Tag". Pour chaque ligne du champ "Tag" tu peux faire le traitement comme tu veux. Un Select Case ferait l'affaire, tu déclares une variable dans laquelle tu inscrit le résultat de ton Select Case:
    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
     
    ....
    While rstTag.EOF = False
                Debug.Print rstTag
     
                If Variable = "" then
                Variable = Résultat de ton Select Case
                Esle
                Variable = Variable & ";" & Résultat de ton Select Case
                End if
     
                rstTag.MoveNext
            Wend
    rstListe.Edit
    rstListe("Groupe") = Variable
    rstListe.Update
    ....
    Bonne journée

  5. #5
    Membre du Club
    Inscrit en
    Mars 2012
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Mars 2012
    Messages : 7
    Par défaut
    En fait, j'avais bien ajouté le with rstListe

    Mais la ligne set rstTag = rstListe.Fields("Tag").Value pose problème parce que rstTag est déclaré en recordset...

    J'ai bien compris qu'il faut le déclarer en recordset, mais je ne peux donc pas utiliser restListe.Fields("Tag").Value...

    Une idée?

  6. #6
    Membre Expert
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2012
    Messages
    1 887
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2012
    Messages : 1 887
    Par défaut
    Bonjour MorningMemories,
    Est-ce que ton champ Tag est bien un champ multi value. C'est ce que je croyais au départ mais là j'ai un doute...

Discussions similaires

  1. ajouter une valeur dans une combobox
    Par decour dans le forum Access
    Réponses: 1
    Dernier message: 17/10/2005, 10h58
  2. Réponses: 5
    Dernier message: 27/09/2005, 17h25
  3. Ajouter un valeur dans une liste modifiable
    Par ancylia dans le forum Access
    Réponses: 1
    Dernier message: 22/09/2005, 12h50
  4. Popup ajoutant une valeur a un champ
    Par kalan dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 05/09/2005, 15h39
  5. [Tableaux]Ajouter des valeurs dans un tableau
    Par Antoine1183 dans le forum Collection et Stream
    Réponses: 13
    Dernier message: 03/04/2005, 13h41

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