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

Macros et VBA Excel Discussion :

compatibilité excel 2016 64 Bits - 2010 32 Bits Méthode ADO


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2016
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2016
    Messages : 14
    Points : 14
    Points
    14
    Par défaut compatibilité excel 2016 64 Bits - 2010 32 Bits Méthode ADO
    bonjours à tous

    je reviens vers vous suite à un problème sur une macro qui fonctionne parfaitement sous excel 2016 64 Bits mais pas sous excel 2010 32 Bits.

    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
     
    Sub RequeteClasseurFerme(dev As String, val As String)
        On Error Resume Next
        Dim Cn As ADODB.Connection
        Dim fichier As String
        Dim NomFeuille As String, texte_SQL As String
        Dim Rst As ADODB.Recordset
     
        'Définit le classeur fermé servant de base de données
        fichier = "Y:\R&D\Ressources techniques\Bdb Nomenclature\Base de données Nomenclature.xlsx"
        'Nom de la feuille dans le classeur fermé
        NomFeuille = "Base"
     
        Set Cn = New ADODB.Connection
     
        '--- Connexion ---
        With Cn
            .Provider = "Microsoft.Jet.OLEDB.4.0"
            .ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" _
                & fichier & ";Extended Properties=""Excel 12.0;HDR=YES;"""
            .Open
        End With
        MsgBox Cn.State
        '----------------
           'Définit la requête.
        '/!\ Attention à ne pas oublier le symbole $ après le nom de la feuille.
        texte_SQL = "SELECT * " & _
                    "FROM [Feuil1$]" & _
                    "WHERE Valeurs='" & val & "' AND Device='" & dev & "'"
     
                    ',
        ' Valeurs='" & val1 & "'"
        '
        ' AND Valeurs='" & val1 & "'
        MsgBox texte_SQL
        Set Rst = New ADODB.Recordset
        Set Rst = Cn.Execute(texte_SQL)
        MsgBox Rst.CacheSize
     
        If Not (Rst.EOF) Then
        Dim test As Variant
            Workbooks("Nomenclature Vièrge").Worksheets("Nomenclature").Range("A1").CopyFromRecordset Rst
            '--- Fermeture connexion ---
            Cn.Close
            Set Cn = Nothing
        Else
            '--- Fermeture connexion ---
            Cn.Close
            Range(Cells(1, 1), Cells(1, 8)).ClearContents
            Set Cn = Nothing
            Range("B1") = val
            Range("A1") = dev
            'Workbooks("Nomenclature Vièrge").Worksheets("Nomenclature").Range("A1").Select
            new_entree.Show
            Call Module.RequeteClasseurFerme_Excel2007(dev, val)
        End If
    End Sub
    Dans les 2 cas le Cn.state renvoie 1 l’accès à la base est donc correct, et le Rst.CacheSize renvoie 1 aussi donc il y a bien une ligne de réponse dans la requête. Le probléme est que dans excel 2010 la réponse ne se colle pas dans le classeur.

    Merci pour votre aide

    Hermes

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Il ne faut pas utiliser les référence dans ton projet vba mais CreateObject!
    Retire la référence ADODB de ton projet!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Dim Cn As Object
    Dim fichier As String
    Dim NomFeuille As String, texte_SQL As String
    Dim Rst As Object
     
    Set Cn = CreateObject("ADODB.Connection")
     Set Rst = CreateObject("ADODB.Recordset")
     Rst.open  texte_SQL, Cn

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2016
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2016
    Messages : 14
    Points : 14
    Points
    14
    Par défaut
    Bonjour rdurupt,

    Merci pour avoir pris le temps de me répondre... cependant ce n'est pas la bonne solution le résultat est parfaitement identique.
    Petite précision en fin de code il y a une vérification si la recherche à aboutie (présence d'un résultat) sinon on accède à un formulaire pour une nouvelle entré. La macro reconnait si la recherche à aboutit ou non ! mais la copie ne se fait pas je pense au niveau de CopyFromRecordset...

    Cordialement

    Hermes

  4. #4
    Invité
    Invité(e)
    Par défaut
    Essais de cette manière!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    With cn
            .CommandTimeout = 500
            .ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" _
                & NomFichier & ";" & "Extended Properties=""Excel 12.0;HDR=YES;IMEX=1;"";"
            .Open
        End With

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2016
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2016
    Messages : 14
    Points : 14
    Points
    14
    Par défaut
    Pas de changement ... ;(

    problème résolut :
    Dans Excel 2016 le ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Workbook("Nomenclature vierge").Worksheets("Nomenclature").Range("A1").CopyFromRecordset Rst
    est correct mais pas dans 2010 on ne peux pas rappeler le fichier dans lequel on. Est donc correct :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Worksheets("Nomenclature").Range("A1").CopyFromRecordset Rst
    Cordialement

    Hermes

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

Discussions similaires

  1. [XL-2010] Excel 2010 32 bits sous Windows 10 64 bits
    Par Batybaty dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 21/02/2016, 18h29
  2. Excel 2010 64 bits vers Oracle 11g
    Par ducho dans le forum Connexions aux bases de données
    Réponses: 0
    Dernier message: 12/09/2012, 15h16
  3. [2010] Passage Office 2010 64 bits vers 32 bits
    Par Harry Covair dans le forum Microsoft Office
    Réponses: 2
    Dernier message: 29/05/2012, 22h19
  4. Réponses: 2
    Dernier message: 28/01/2011, 14h41
  5. [2010] Problèmes Microsoft Office 2010 64 bits
    Par francis64 dans le forum Microsoft Office
    Réponses: 2
    Dernier message: 15/04/2010, 08h54

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