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 :

[Access] Concaténer plusieurs colonnes de plusieurs enregistrements


Sujet :

VBA Access

  1. #1
    Membre régulier

    Inscrit en
    Juin 2006
    Messages
    320
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 320
    Points : 97
    Points
    97
    Par défaut [Access] Concaténer plusieurs colonnes de plusieurs enregistrements
    Bonjour à tous,
    je souhaitre rédihger une requête sur 2 tables (pour simplifier...):
    la 1e décrit des dossiers et la 2e défini les parcelles pour chaque dossier.
    Un dossier pouvant concerner 1 à n parcelles.

    J'aiu réussi à collecter toutes les infos mais il me duplique le dossier autant de fois qu'il y a de parcelles. Je cherche à créer un export vers un fichier excel qui me ferai une synthèse du genre:
    dossier1 | infos diverses... | parcelle1-section-lieudit ; parcelle2-section-lieudit |
    dossier2 | infos diverses... | parcelleX-section-lieudit ; parcelleY-section-lieudit |


    Bref, concaténer toutes les infos de toutes les parcelles en une colonne pour chaque dossier (là, je ne sais pas si je suis claire).

    Le tout en VBA sous access 2000... Dois-je faire un group by dossier mais alors comment concaténer les enregsitrements?)?

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 099
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 099
    Points : 28 390
    Points
    28 390
    Par défaut
    Question régulièrement posée, la dernière fois ici.

  3. #3
    Membre régulier

    Inscrit en
    Juin 2006
    Messages
    320
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 320
    Points : 97
    Points
    97
    Par défaut
    ne serait-il pas possible de faire une concaténation des 3 colonnes et un GROUP BY id_dossier?

  4. #4
    Membre régulier

    Inscrit en
    Juin 2006
    Messages
    320
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 320
    Points : 97
    Points
    97
    Par défaut
    Ok, j'ai un plan B: comme je cherche à exporter le tout dans une feuille excel, il suffit de bidouiller cette feuille.

    Néanmoins, il y a un truc qui me chiffonne: c'est long sur quelques enregistrements mais alors sur la base en entier ça n'en fini pas.
    Je suis sûre qu'il y a moyen de simplifier le code suivant mais je ne suis pas encore aguérrie pour ce qui est de la manipulation d'excel:
    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
            With XL_App
                With XL_feuille
                     Remplissage de la feuille....
                     For Each ObjCell In Range("K1", Range("K1").EntireColumn.Find(What:="*", SearchDirection:=xlPrevious)).Cells
                        If ObjCell.Value = "Parcelle  de la section  () - " Then ObjCell.Value = ""
                    Next
                    nbrLignes = Range("K1", Range("K1").EntireColumn.Find(What:="*", SearchDirection:=xlPrevious)).Cells.Count
                    For i = 7 To nbrLignes
                        ligneEnCours = i
                        For j = 7 To nbrLignes
                            ' si la ligne est différente,
                            'si le n° de dossier est le même et
                            'si la date d'évènement est la même,
                            'alors on a un diplicata du dossier rien que pour définir les parcelles.
                            If j <> ligneEnCours And _
                                .Cells(i, 12).Value = .Cells(j, 12).Value And _
                                .Cells(i, 8).Value = .Cells(j, 8).Value Then
                                ' dans ce cas, il faut prendre la valeur de la ligne en j, la concaténer à la ligne i puis virer j
                                .Cells(i, 11).Value = .Cells(i, 11).Value & .Cells(j, 11).Value
                                .Rows(j).Delete
                                j = j - 1
                                nbrLignes = nbrLignes - 1
                            End If
                        Next j
                    Next i
                    .Columns(12).Delete
                End With
                .ActiveWorkbook.SaveAs "S:\S1\Public\SIG\BASE_DE_DONNEES\EXPORT_ADMINISTRATIONS.xls"
                .ActiveWorkbook.Close
                .Quit
            End With
    Vous auriez un tuyau pour éviter de parcourir ligne après ligne toutes les lignes pour chaque ligne (ok c'est pas clair mais c'est que ce doit être simplifiable)?

  5. #5
    Membre régulier

    Inscrit en
    Juin 2006
    Messages
    320
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 320
    Points : 97
    Points
    97
    Par défaut
    Et zut!
    Voilà que maintenant le code me donne un message d'erreur alors que je relançait mon code pour vérifier le résultat une dernière fois:
    Erreur d'éxecution '1004':
    La méthode Range de l'objet '_Global' a échoué.
    J'ai pas touché à mon code!! J'comprend rien!
    Aaaaarg!!

  6. #6
    Membre émérite

    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 683
    Points : 2 579
    Points
    2 579
    Par défaut
    Ouvre un nouveau sujet dans la rubrique appropriée, ça ne relève plus d'SQL.

  7. #7
    Xo
    Xo est déconnecté
    Expert confirmé
    Avatar de Xo
    Inscrit en
    Janvier 2005
    Messages
    2 701
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 701
    Points : 4 238
    Points
    4 238
    Par défaut
    Sujet déplacé, merci de ne pas poster vos soucis avec Excel dans le forum SQL

  8. #8
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 040
    Points
    20 040
    Par défaut
    Citation Envoyé par Miss Ti
    Et zut!
    Voilà que maintenant le code me donne un message d'erreur alors que je relançait mon code pour vérifier le résultat une dernière fois:

    J'ai pas touché à mon code!! J'comprend rien!
    Aaaaarg!!
    sur quelle ligne...?

  9. #9
    Membre régulier

    Inscrit en
    Juin 2006
    Messages
    320
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 320
    Points : 97
    Points
    97
    Par défaut
    Je vais recréer un sujet pour la simplification du code (il ne s'agit plus du même sujet).

    bbil: ça bloquait sur le Range:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For Each ObjCell In Range("K1", Range("K1").EntireColumn.Find(What:="*", SearchDirection:=xlPrevious)).Cells
    Mais ce matin, je le relance et ça ne bloque plus....
    Pourtant ObjCell est bien défini avec Je comprend RIEN et je voudrais savoir pourquoi parce que ce genre de bug ne me plaît pas trop...

  10. #10
    Membre régulier

    Inscrit en
    Juin 2006
    Messages
    320
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 320
    Points : 97
    Points
    97
    Par défaut
    Crotte de bique!!
    Ca déconne à nouveau sur la fonction Range.
    Pourquoi? Mais pourquoi?

  11. #11
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 040
    Points
    20 040
    Par défaut
    remplace tes
    Range("K1" dans ton With.. par des .Range("K1"

Discussions similaires

  1. Réponses: 1
    Dernier message: 28/01/2013, 12h08
  2. Réponses: 1
    Dernier message: 12/11/2012, 16h35
  3. Réponses: 6
    Dernier message: 12/12/2008, 06h56
  4. SQL séparation 1 colonne en plusieurs colonnes
    Par flo123456 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 09/04/2008, 14h32
  5. Réponses: 5
    Dernier message: 07/11/2006, 11h16

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