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 :

Séparation via Split(colonne, VbLf) et ajout des données séparées dans une colonne


Sujet :

VBA Access

  1. #1
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2012
    Messages : 49
    Points : 30
    Points
    30
    Par défaut Séparation via Split(colonne, VbLf) et ajout des données séparées dans une colonne
    Bonjour

    J'ai une table qui a été directement importée d'Outlook.

    Cette table "test" comprend une colonne Adresse.

    La colonne adresse est peut-être de cette forme (Adresse est de type Texte et un champs comrpend plusieurs lignes dû à l'importation des donénes d'Outlook vers une table Access) :

    --------------------
    Adresse
    --------------------
    l1 | Immeuble B
    | 18 rue ***
    |BP 0000
    --------------------
    l2 | 19 rue ***
    --------------------
    l3 | 20 rue ***
    | BP 0000
    --------------------

    Mon objectif, séparer un champs en champs en 3 (séparateur : saut de ligne) et récuperer ces 3 parties dans 3 colonnes respectives et cela pour chaque ligne de ma table.

    Ex : l1 de ma colonne Adresse
    Colonne Adresse1, première ligne 1 -> Immeuble B
    Colonne Adresse 2, première ligne 1 -> 18 rue ****
    Colonne Adresse3, première ligne 1 -> BP 0000

    Pour cela, j'ai utiliser la fonction split avec le séparateur vbLf : séparation à chaque saut de ligne.

    Je récupère les données sépararer dans un tableau de String et ensuite j'ajoute mes données dans les colonnes ADRESSE1, ADRESSE2, ADRESS3 toujours dans ma table "test"

    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
     
    Sub Separe()
            'Charger la référence Microsoft DAO 3.6 Object Library
     
            Dim rst As DAO.Recordset
            Set rst = CurrentDb.OpenRecordset("test")
     
            While Not rst.EOF
                 rst.Edit
     
                Dim tableau1() As String
     
                tableau1 = Split(rst(6), vbLf)
                DoCmd.RunSQL "INSERT INTO test(ADRESSE1) Values( " & tableau1(1) & ")"            
                DoCmd.RunSQL "INSERT INTO test(ADRESSE2) Values( " & tableau1(2) & ")"            
                DoCmd.RunSQL "INSERT INTO test(ADRESSE3) Values( " & tableau1(3) & ")"             rst.Update
                Erase tableau1
                rst.MoveNext
            Wend
            rst.Close
            Set rst = Nothing
     
    End Sub
    J'ai recherché sur le net sans succès et j'ai essayé ce code mais il ne fonctionne pas : mes colonnes ADRESSE1, ADRESS2, ADRESSE 3 restent vides.

    J'ai également une erreur d'exécution 3075 qui est lancée :

    Erreur de syntaxe (opérateur absent) dans l'expression "BP 940 N"
    "BP 940" est une données contenue dans un champs de ma colonne Adresse.
    Je pense que les sauts lignes (lors de la saisie sur Outlook) sont mal gérés une fois importés dans une table Access.

    J'espère avoir été le plus clair possible.

    Merci pour votre aide d'autant plus que le problème ne semble pas évident à résoudre.

  2. #2
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    191
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2012
    Messages : 191
    Points : 324
    Points
    324
    Par défaut
    Bonjour,

    Etant donné que tu fais un insert avec une valeur et non une référence à une table, la syntaxe que tu devrais utiliser est:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "INSERT INTO test(ADRESSE1) Values( " & tableau1(1) & ")"
    Cordialement.

  3. #3
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2012
    Messages : 49
    Points : 30
    Points
    30
    Par défaut
    Merci beaucoup pour ta réponse !

    C'est un problème auquel j'aurais été également confronté.

    Par contre, les colonnes ADRESSE1, ADRESSE2 et ADRESSE 3 restent vides et l'erreur d'exécution 3075 est toujours lancée :

    Erreur de syntaxe (opérateur absent) dans l'expression "BP 940 N"
    Je ne sais pas comment répondre à cette erreur.

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    191
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2012
    Messages : 191
    Points : 324
    Points
    324
    Par défaut
    Comme c'est une chaîne de caractère, ajoute de cote simple ' pour entourer ta variable. Ca m'est déjà arrivé assez souvent .

    Exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "INSERT INTO matable(champ1) VALUES( ' " & mavariable & " ' )"

  5. #5
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2012
    Messages : 49
    Points : 30
    Points
    30
    Par défaut
    Merci, j'ai appliqué ce nouveau changement.

    A présent, j'ai message qui m'informe de l'ajout d'une ligne...
    Mais, lorsque je consulte ma table les colonnes ADRESSE1, ADRESSE2, ADRESSE 3 restent vides.

    Juste après ce message, j'ai une erreur d'exécution 9 qui est lancée

    L'indice n'appartient pas à la selection
    Pourtant, ma fonction split est bien censée séparer par le séparateur 'retour chariot/saut ligne', chaque élement et l'ajouter à mon tableau et ensuite pour l'indice 0 , ma variable tableau1(0) vient s'ajouter à ma colonne ADRESSE1 etc.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     DoCmd.RunSQL "INSERT INTO test(ADRESSE1, ADRESSE2, ADRESSE3) Values( ' " & tableau1(0) & " ',  ' " & tableau1(1) & " ' , ' " & tableau1(2) & " '  )"
    Je me demande si mon code est correct même si pour moi, je ne vois pas d'erreur apparente.

  6. #6
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    191
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2012
    Messages : 191
    Points : 324
    Points
    324
    Par défaut
    En théorie, c'est effectivement ce qu'il devrait se passer avec ton code. Cependant, si ton split ne te retourne que deux valeurs, c'est normal que pour l'indice tableau(2) tu ais cette erreur d'exécution. as-tu vérifier que tu avais bien trois valeurs dans ton tableau à l'issue du split?

  7. #7
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2012
    Messages : 49
    Points : 30
    Points
    30
    Par défaut
    Ah mince, oui, tu as raison, il ne doit renvoyer que deux valeurs.

    (J'ai zapé que je devais à l'issu de cette première séparation, faire un deuxième appel de la fonction split pour avoir au final 3 valeurs. Je verrais ça dans un deuxième temps.)

    Même lorsque je limite mon code ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
          DoCmd.RunSQL "INSERT INTO test(ADRESSE1, ADRESSE2) Values( ' " & tableau1(0) & " ',  ' " & tableau1(1) & " ')"
    J'ai toujours la même erreur 9 qui est lancé avec :

    L'indice n'appartient pas à la selection
    Mes colonnes ADRESSE1 & 2 restent vide.

    Sais-tu pourquoi le message m'informe d'un mauvais indice. Mon tableau commence bien à l'indice 0 et je n'ai que 2 valeurs qui sont ajoutées donc 2 lignes de créer.

    Décidément, je bloque facilement.

    En tous les cas merci pour le temps que tu consacres à m'aider !

  8. #8
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    191
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2012
    Messages : 191
    Points : 324
    Points
    324
    Par défaut
    La seule explication que jevois serait qu'il ne trouve pas le caractère spécifié dans la fonction split. Tu n'aurais alors qu'une seule valeur dans ton tableau.
    Essaye en limitant l'insert à l'adresse1 et voitce qu'il se passe.Normalement tu ne devrais pas avoir de problème.

  9. #9
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2012
    Messages : 49
    Points : 30
    Points
    30
    Par défaut
    Non, ça ne fonctionne pas non plus.



    J'ai testé cela, je ne sais pas ce que tu en penses ?
    Ce code ci m'envoie une erreur d'execution 94 :

    Utilisation incorrecte de Null
    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
     
    Sub Separation()
            'Charger la référence Microsoft DAO 3.6 Object Library
     
             Dim tableau1() As String, i As Integer
            Dim rst As DAO.Recordset
            Set rst = CurrentDb.OpenRecordset("test")
     
            While Not rst.EOF
                 rst.Edit
     
                tableau1 = Split(rst(6), vbLf)
     
                For i = 0 To UBound(tableau1)
                rst(22) = tableau1(i)
                Next i
     
                'DoCmd.RunSQL "INSERT INTO test(ADRESSE1) Values(' " & tableau1() & " ')"
                rst.Update
                rst.MoveNext
            Wend
            rst.Close
            Set rst = Nothing
     
    End Sub

  10. #10
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    191
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2012
    Messages : 191
    Points : 324
    Points
    324
    Par défaut
    Qu'est ce que tu souhaites obtenir dans ton recordset rst et qu'est-ce que tu obtiens? Le problème peut se situer à ce niveau la.
    Essaye de reprendre ton code pour insérer uniquement dans adresse1 en splitant une chaîne de caractère quelconque du style "toto".

  11. #11
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2012
    Messages : 49
    Points : 30
    Points
    30
    Par défaut
    Même avec ce test simple, j'ai la même erreur.

    Dans mon rst(6) (enregistrement actif de ma colonne Adresse)

    Dans mon rst(22) (enregistrement actif de ma colonne ADRESS1)

    (En fait, le code n'est pas bon).

    J'aurais aimé pour le premier enregistrement de ma colonne Adresse, grâce à la fonction split qui par le délimiteur vbLf sépare les valeurs mon champs à chaque saut de ligne et que mon tableau1 récupère toutes valeurs et ainsi de suite pour les autres enregistrement.

    Ensuite que les valeurs récupérées par tableau1 soient ajoutées à ma colonne ADRESSE1 et cela indice par indice.

    Dans mon premier post, j'avais illustré la forme de ma colonne Adresse.

    Merci pour le temps consacrer à m'aider, surtout avec mes explications qui en sont forcément très claires.

  12. #12
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    191
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2012
    Messages : 191
    Points : 324
    Points
    324
    Par défaut
    Je t'avoue que j'ai plus trop d'idées, donc juste une petite chose plutôt que de faire un recorset sur l'ensemble de ta table test, tu pourrais peut être simplifier en le faisant uniquement sur ta colonne Adresse. Après je ne vois pas trop ce qu'il faudrait changer. Eventuellement tu pourrais recréer ta fonction étape par étape en vérifiant que tu as bien la valeur attendu au bon moment dans chaque variable.
    Dsl de ne pas pouvoir résoudre ton problème .

  13. #13
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2012
    Messages : 49
    Points : 30
    Points
    30
    Par défaut
    Décidément, je n'arrive à rien avec cette fonction.

    Ce n'est pas grave, je vais bien finir par trouver une solution.

    Un grand merci pour le temps que tu as passé à m'aider surtout que ce n'est pas la première fois ^^

  14. #14
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2012
    Messages : 49
    Points : 30
    Points
    30
    Par défaut
    Je sens que je ne suis plus trop loin de ce que je souhiate. Si quelqu'un voit comment résoudre l'erreur lancée...

    J'ai réussi à avancer sur ma situation initiale mais j'ai une erreur de lancée :

    [QUOTE]Membre de méthode ou données introuvable [QUOTE] et cette ligne est mise en surbrillance :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Indice = rst(6).Fields.count - 1


    Voici 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
    33
    34
    35
    36
    37
    38
    39
     
    Sub Separe()
            'Charger la référence Microsoft DAO 3.6 Object Library
            Dim rst As DAO.Recordset
            Set rst = CurrentDb.OpenRecordset("test")
     
            Dim Boucle As Integer
            Dim Indice As Integer
     
    'Initialisation du Recordset pour justement tenter de pas avoir l'erreur citée plus haut
            rst.MoveLast
            rst.MoveFirst
            Indice = rst(6).Fields.Count - 1
     
     
            While Not rst.EOF
     
     
                For Boucle = 0 To Indice Step 3
     
                   Dim Chaine As String
     
                   Chaine = CStr(rst(6).Fields(Boucle).Value)
                   DoCmd.RunSQL "INSERT INTO test(ADRESSE1) Values( ' " & Chaine & "')"
     
                   Chaine = CStr(rst(6).Fields(Boucle + 1).Value)
                   DoCmd.RunSQL "INSERT INTO test(ADRESSE2) Values( ' " & Chaine & "')"
     
                   Chaine = CStr(rst(6).Fields(Boucle + 2).Value)
                   DoCmd.RunSQL "INSERT INTO test(ADRESSE3) Values( ' " & Chaine & "')"
     
                Next Boucle
     
                rst.MoveNext
            Wend
     
            Set rst = Nothing
     
    End Sub
    Merci pour votre aide
    Cordialement,

Discussions similaires

  1. [Python 2.X] ajouter des données volumineuse dans une table oracle
    Par bernards111 dans le forum Général Python
    Réponses: 2
    Dernier message: 09/10/2014, 15h55
  2. Réponses: 2
    Dernier message: 23/12/2012, 15h46
  3. Convertir des données présentes dans une colonne
    Par padawan31 dans le forum MySQL
    Réponses: 1
    Dernier message: 16/07/2009, 11h11
  4. [JTable] ajout d'un bouton dans une colonne
    Par Blast dans le forum Composants
    Réponses: 7
    Dernier message: 15/03/2007, 17h33
  5. Ajouter des nouvelles données dans une table
    Par Lingo dans le forum Access
    Réponses: 7
    Dernier message: 27/10/2006, 13h58

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