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 :

Transférer des noms de champs en données


Sujet :

VBA Access

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 13
    Points : 7
    Points
    7
    Par défaut Transférer des noms de champs en données
    Bonjour,

    Je suis débutant... svp excusez mon ignorance...

    Je suis en Access 2000 et j'aimerais transférer des noms de champs en données (avec les données) dans une autre table:

    ex. noms de champs: A1 A2 B1 B2 B3
    .................données: 4 3 1 2 4

    J'aimerais créer une nouvelle table à peu près comme ceci:

    ex. noms de champs:
    nomc et resultat
    données:
    A1 4
    A2 3
    B1 1
    B2 2
    B3 4
    etc...

    Est-ce que ça peut se faire dans une requête également ?

    Merci beaucoup de me dépanner

  2. #2
    Membre confirmé
    Avatar de Petogaz
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    479
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 479
    Points : 580
    Points
    580
    Par défaut
    salut,

    en DAO c'est tout à fait possible. il y a un tuto de tofalu sur le forum sur DAO.

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 13
    Points : 7
    Points
    7
    Par défaut Merci mais...
    Merci Petogaz mais je n'ai pas trouvé à part un tutoriel sur DAO.

    J'aimerais avoir un exemple simple et concret si possible (trop vieux...le père)

    Merci encore

  4. #4
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Points : 4 297
    Points
    4 297
    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
     
     
    Sub anadecroise(source As String, cible As String, nbfix As Integer)
    'cette procèdure crée une table cible
    'à partir de la table source
    ' elle fait le travail inverse d'une requête analyse croisée
    'les  premières colonnes spécifiées par nbfix restent inchangées
    'la colonne (ipivot) suivante reprendra les intitulés des
    ' colonnes supérieures à nbfix
    'la colonne suivante (dpivot) contient les valeurs transposées
    'nb si on a des champs de type différents on fera tourner plusieurs fois la procédure en regoupant les champs de nature identique sur la partie droite de
    la table (en modification de table) 
    ' à chaque itération cible deviendra source
    Dim base As DAO.Database
    Dim champ As DAO.Field
    Dim depart As DAO.Recordset
    Dim departdef As DAO.Fields
    Dim boucle As Integer
    Dim typechamp As Integer
    Dim incohérent As Boolean
    Dim sql As String
    Dim sqlb As String
    If source = cible Then Exit Sub
    Set base = CurrentDb()
    'ici la procédure s'arrête si la table source n'existe pas
    Set depart = base.OpenRecordset(source)
    Set departdef = base.TableDefs(source).Fields
    'vérification du nombre de champ à transposer
    If nbfix + 2 > departdef.Count Then
    MsgBox "il doit y avoir au moins deux champs à transposer", vbCritical, "ERREUR"
    Exit Sub
    End If
    'vérification du type des champs de source
    typechamp = departdef(nbfix).Type
    incohérent = False
    For boucle = nbfix + 1 To departdef.Count - 1
    Set champ = departdef(boucle)
    If champ.Type <> typechamp Then incohérent = True
    Next boucle
    If incohérent Then
    MsgBox "tous les champs transposés doivent avoir le même type", vbCritical, "ERREUR"
    Exit Sub
    End If
    'création de la table cible et ajout de la première colonne à transposer
    sql = "SELECT "
    For boucle = 0 To nbfix - 1
    sql = sql & departdef(boucle).Name & ","
    Next boucle
    sql = sql & "'" & departdef(nbfix).Name & "' as ipivot"
    sql = sql & ", " & departdef(nbfix).Name & " as dpivot into " & cible & " from " & source & ";"
    DoCmd.RunSQL (sql)
    sql = "INSERT INTO " & cible & "("
    For boucle = 0 To nbfix - 1
    sql = sql & departdef(boucle).Name & ","
    Next boucle
    sql = sql & "ipivot,dpivot ) select "
    For boucle = 0 To nbfix - 1
    sql = sql & departdef(boucle).Name & ","
    Next boucle
    DoCmd.SetWarnings False
    'ajout des données suivantes
    For boucle = nbfix + 1 To departdef.Count - 1
    sqlb = sql & "'" & departdef(boucle).Name & "' as ipivot," & departdef(boucle).Name & " as dpivot from " & source & ";"
    DoCmd.RunSQL (sqlb)
    Next boucle
    DoCmd.SetWarnings True
    End Sub
    cela se lance par
    call anadecroise("matable","resultat",0)

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 13
    Points : 7
    Points
    7
    Par défaut Fantastique
    Merci Random, ça fonctionne au poil près.

    Le seul petit poil croche est que j'ai un champs texte parmi des champs numériques (c'est un sondage mais parmi les questions une demandait un commentaire) mais je trouverai une façon de contourner le problème probablement en créant une table spécifique utilisé en sous-formulaire pour ce champs texte et l'ajouter ensuite à la nouvelle table créée.

    Alors merci beaucoup et (sûrement) à la prochaine !

  6. #6
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Points : 4 297
    Points
    4 297
    Par défaut
    il y a beaucoup plus simple
    dans la fenêtre création/modification de table remonte ton champ texte en premier par un joli glisser déplacer ferme ta table
    et lance
    call anadecroise("matable","resultat",1)
    nb on n'est jamais trop vieux pour ce genre d'amusettes

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 13
    Points : 7
    Points
    7
    Par défaut Encore MERCI !!!
    Elle est pas belle la vie ? Mais oui elle est franchement belle ! ..maintenant...

    Tu me sauves du temps avec celle-là. ALors j'ai compris, tu mets tout tes champs d'autres types au début de la table et tu passes le paramètre sur la quantité que tu veux sauter.

    Merci encore Random et t'as raison y a pas d'age pour s'amuser

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

Discussions similaires

  1. Suppression des Noms de Champ générés par l'import de données externes
    Par DustDevil dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 21/11/2007, 14h06
  2. Réponses: 4
    Dernier message: 05/07/2006, 15h47
  3. [ODBC] Comment mettre à jour 2 bases ayant des noms de champs différents ???
    Par Alexlesilex dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 11/05/2006, 17h08
  4. Guillemets obligées autour des noms de champs et de tables
    Par What dans le forum Bases de données
    Réponses: 4
    Dernier message: 05/12/2005, 12h09
  5. Récupération des noms de champs d'une table
    Par Battomura dans le forum SQL
    Réponses: 2
    Dernier message: 24/03/2003, 10h00

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