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 remplacement FctSplit [AC-97]


Sujet :

VBA Access

  1. #1
    Membre habitué
    Homme Profil pro
    Inscrit en
    Août 2007
    Messages
    184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2007
    Messages : 184
    Points : 188
    Points
    188
    Par défaut fonction remplacement FctSplit
    Bonjour à tous,

    Sous Access97, je souhaiterais utiliser le code VBA de la FAQ
    qui permet de lier des tables en VBA dans une base de données protégée par un mot de passe.

    http://access.developpez.com/faq/pag...kTablePassword

    Dans ce code, il y a la fonction Split.
    Sous Access97, j'utilise la fonction de remplacement FctSplit
    trouvée ici
    http://access.developpez.com/sources...onctionSplit97


    J'obtient le message suivant :

    Erreur de compilation. Impossible d'affecter à un tableau
    sur la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strNomsTables = FctSplit(Left(strTemp, Len(strTemp) - 1), "|")
    C'est justement ce qu'est censé faire la fonction Split et ici son "clone" de remplacement FctSplit. Non ?
    Avez vous une piste à m'indiquer .
    D'avance merci.
    fevec

  2. #2
    Expert éminent
    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
    Points : 7 759
    Points
    7 759
    Par défaut
    Bonjour,

    Ça fonctionne chez moi, mais je n'ai plus 97. C'est peut-être pour ça.

    Piste 1. Essayer de changer la déclaration de la fonction.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Public Function FctSplit(ByVal strg As String, Sep As String) As String()
    Piste 2. Laisser la déclaration d'origine
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Public Function FctSplit(ByVal strg As String, Sep As String) As Variant
    et changer celle de strNomsTables, comme dans l'exemple de FctSplit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim strNomsTables As Variant
    Piste 3. Se passer de FctSplit en remplaçant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    'Parcours l'ensemble des tables de la base de données protégée
    'et stocke leur nom
    For Each oTblSource In oDbSource.TableDefs
        'ignore les tables system
        If (oTblSource.Attributes And dbSystemObject) = 0 Then
            strTemp = strTemp & oTblSource.Name & "|"
        End If
    Next
    'Ferme la base de données sources (impératif pour la liaison)
    oDbSource.Close: Set oDbSource = Nothing
    'parcours le tableau de noms de tables
    strNomsTables() = FctSplit(Left(strTemp, Len(strTemp) - 1), "|")
    For i = 0 To UBound(strNomsTables)
    par
    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
    'Parcours l'ensemble des tables de la base de données protégée
    'et stocke leur nom
    i = 0
    For Each oTblSource In oDbSource.TableDefs
        'ignore les tables system
        If (oTblSource.Attributes And dbSystemObject) = 0 Then
            ReDim Preserve strNomsTables(i)
            strNomsTables(i) = oTblSource.Name
            i = i + 1
        End If
    Next
    'Ferme la base de données sources (impératif pour la liaison)
    oDbSource.Close: Set oDbSource = Nothing
    'parcours le tableau de noms de tables
    For i = 0 To UBound(strNomsTables)
    A+

  3. #3
    Membre habitué
    Homme Profil pro
    Inscrit en
    Août 2007
    Messages
    184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2007
    Messages : 184
    Points : 188
    Points
    188
    Par défaut
    bonjour,
    Merci LedZeppII,

    C'est la piste 2 qui fonctionne.
    Piste 2. Laisser la déclaration d'origine

    Code :
    Public Function FctSplit(ByVal strg As String, Sep As String) As Variantet changer celle de strNomsTables, comme dans l'exemple de FctSplit

    Code :
    Dim strNomsTables As Variant
    enfin presque, toutes les tables sont liées, sauf celles dont le nom est > 27 caractères. (la base dorsale est sous SQL Serveur)
    J'ai un erreur 3125, sur les tables dont le nom est > 27 caractères, je suis donc obligé de tester avec la condition de longueur et de n'importer que les tables dont le nom est <27 caractères
    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
     
    For i = 0 To UBound(strNomsTables)
     If Len(strNomsTables(i)) > 27 Then
       Debug.Print "table non ajoutée liée " & strNomsTables(i)
    Else
     
      'Crée une nouvelle table dans la base de données courante
      Set oTbl = oDb.CreateTableDef(strNomsTables(i))
      'Lie les deux tables
      oTbl.Connect = strConnect
      oTbl.SourceTableName = ReplaceT(strNomsTables(i), "dbo.", "")
      'Ajoute la table à la base de données
      oDb.TableDefs.Append oTbl
      Debug.Print "table liée n° " & i & " - " & oTbl.SourceTableName
     
      End If
    Next i
    Ce message d'erreur n'existe pas en Access2002, j'en conlus que c'est une imperfection d'Access97.

    C'est le seconde fois (après le pb de "trop de base de données ouverte") que je détecte une "anomalie" sur Access97... (et qui disparait sous Access2003)

    Cela m'incite à penser sérieusement à réaliser le passage vers AC-2003, ce que je n'avais pas envisager jusqu'alors car tout fonctionnait.

    Merci.
    Je marque Résolu
    fevec

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

Discussions similaires

  1. fonction remplace en vb.net
    Par dieudo dans le forum VB.NET
    Réponses: 3
    Dernier message: 28/02/2008, 11h41
  2. Fonction remplacer
    Par ANTMA dans le forum Excel
    Réponses: 2
    Dernier message: 07/12/2007, 16h40
  3. Fonction "Remplacer" Code VBA Access
    Par Lorenzole+bo dans le forum VBA Access
    Réponses: 6
    Dernier message: 27/09/2007, 21h17
  4. [vba E] fonction remplacer
    Par Bruno02 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 23/04/2007, 03h11
  5. Fonction remplace
    Par isamourgeo dans le forum Access
    Réponses: 3
    Dernier message: 15/03/2006, 20h48

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