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 :

Problème vba excel


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Avril 2012
    Messages : 34
    Par défaut Problème vba excel
    Bonjour à tous,
    j'ai fait un programme sous vba excel qui permet d'afficher un certains nombre d'info venant de base de donnée sql server.Pour cela j'ai établi une connectionn vers sql server et j'ai aussi fait la requete sql me permettant d'afficher les informations dont j'ai besoin en changeant un num de serie sur une case excel dans j'ai moi meme spécifié l'emplacement. vOILA MON PROGRAMME
    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
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    'D'abord pour accéder à une base de donnée SQL Server, il faut se connecter à cette source de donnée
    'Utiliser un recordset pour accéder aux données
    'Le recordset est l'objet qui parcourt le résultat d'une requête SQL
    'Ajouter les références requises pour pouvoir déclarer l'objet de connection: Microsft DAO 3.6 Object Library et Microsoft Data Object 2.8 Library
     
    Sub FP56_5G2()
     
    Dim cN As ADODB.Connection 'Declarer l'objet de connexion
    Dim rs As ADODB.Recordset 'Declarer le recordset
    Dim Z As Integer
    Dim SerialNumber As Integer 'numéro de série appareil
     
    Worksheets("FP56").Range("A9").CurrentRegion.Borders.LineStyle = xlNone 'efface bordures
    Worksheets("FP56").Range("A10:N50").ClearContents 'efface données
    Worksheets("FP56").Range("E10:E50").FormatConditions.Delete 'efface format conditionnel
    Worksheets("FP56").Range("I10:I50").FormatConditions.Delete
    Worksheets("FP56").Range("I10:I50").Font.ColorIndex = xlColorIndexAutomatic
    Worksheets("FP56").Range("E10:E50").Font.ColorIndex = xlColorIndexAutomatic
    Worksheets("FP56").Range("A9").CurrentRegion.Font.ColorIndex = xlColorIndexAutomatic 'efface la couleur du texte
     
        Set cN = New ADODB.Connection 'Instnacier l'objet de connexion
        Set rs = New ADODB.Recordset 'Instancier l'objet de connection
        dbPath = Path
    'Définir une connexion string(chaine de connection) et l'affecter à la connexion
    'Cette chaine doit renseigner sur le provider( fournisseur de BDD ou SGBD), le nom de la BDD et les paramètres de Login et mot de passe(optionnels)
     
    SerialNumber = Worksheets("FP56").Range("C4").Value
    Application.ScreenUpdating = False
    Z = 10
     
     'connection à la base de données
        cN.ConnectionString = "Provider=SQLOLEDB;Data Source=VERPACWS016\ENTERPRISE;Initial Catalog=enterprise; User ID=sa;Password=Alpha2000;"
        cN.Open 'Ouvrir la connexion en utilisant l'objet de connexion instancié et la connection string
     
    'Selection des enregistrements en fonction du numéro de série de l'appareil et de l'échantillon
    rs.Open "select T.[Sample Name],T.[Start Time], T.Method, T.[Instrument Serial],RD.xValue " _
          & "from  dbo.tempresultsgrid_950ece74eeff4749bf7c08b8d3632653 as T " _
          & "inner join dbo.ResultData as RD on T.result_id=RD.result_id " _
          & "inner join dbo.Result as R on R.result_id= T.result_id " _
          & "inner join dbo.xVariable as V on RD.variable_id=V.variable_id " _
          & "inner join dbo.Instrument as I on R.instrument_id=I.instrument_id " _
          & "where V.identifier in('FP56_EFP1Flash') " _
          & "and I.instrumenttype_id = cast('73354290-e09a-4c17-aa26-43a4b579e1db'as uniqueidentifier) " _
          & " and T.[Sample Name]='P-XYLENE' " _
          & " and T.[Instrument Serial]=" & SerialNumber & " order by T.[Start Time] DESC", cN, adOpenKeyset, adLockOptimistic
     
        If Not rs.EOF Then
            While Not rs.EOF
                Worksheets("FP56").Cells(Z, 1).Value = rs.Fields("Sample Name").Value
                Worksheets("FP56").Cells(Z, 2).Value = rs.Fields("xValue").Value
                Worksheets("FP56").Cells(Z, 3).Value = rs.Fields("Start Time").Value
                Worksheets("FP56").Cells(Z, 4).Value = rs.Fields("Method").Value
                rs.MoveNext
                Z = Z + 1
            Wend
        End If
    rs.Close
    cN.Close
    Set rs = Nothing
    Set cN = Nothing
     
    'Selection des enregistrements en fonction du numéro de série de l'appareil et de l'echantillon
    Z = 23
    cN.Open
    rs.Open "select T.[Sample Name],T.[Start Time], T.Method, T.[Instrument Serial],RD.xValue " _
          & "from  dbo.tempresultsgrid_950ece74eeff4749bf7c08b8d3632653 as T " _
          & "inner join dbo.ResultData as RD on T.result_id=RD.result_id " _
          & "inner join dbo.Result as R on R.result_id= T.result_id " _
          & "inner join dbo.xVariable as V on RD.variable_id=V.variable_id " _
          & "inner join dbo.Instrument as I on R.instrument_id=I.instrument_id " _
          & "where V.identifier in('FP56_EFP1Flash') " _
          & "and I.instrumenttype_id = cast('73354290-e09a-4c17-aa26-43a4b579e1db'as uniqueidentifier) " _
          & " and T.[Sample Name]='CRM 256-51' " _
          & " and T.[Instrument Serial]=" & SerialNumber & " order by T.[Start Time] DESC", cN, adOpenKeyset, adLockOptimistic
     
        If Not rs.EOF Then
            While Not rs.EOF
                Worksheets("FP56").Cells(Z, 1).Value = rs.Fields("Sample Name").Value
                Worksheets("FP56").Cells(Z, 2).Value = rs.Fields("xValue").Value
                Worksheets("FP56").Cells(Z, 3).Value = rs.Fields("Start Time").Value
                Worksheets("FP56").Cells(Z, 4).Value = rs.Fields("Method").Value
                rs.MoveNext
                Z = Z + 1
            Wend
        End If
    rs.Close
    cN.Close
    Set rs = Nothing
    Set cN = Nothing
     
     
    End Sub
    Quand je compile il y'a une erreur venant apparemment du 2eme cN.Open mais je ne vois pas tro pourquoi et comment y remédier. Voila le message d'erreur
    Erreur d'exécution '91'
    Variable objet ou variable de bloc With non définie
    Merci d'avance pour vos réponses

  2. #2
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 678
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 678
    Par défaut
    hello,

    tu attribues à la ligne 60 de ton code
    Aussi si tu veux "réouvrir" une connexion, il faut reconstruire son tout

    2 possibilités donc :
    - soit tu ne mets pas la variable à Nothing
    - soit tu repeuples les données nécessaires à une nouvelle ouverture
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Migrer les applications VBA Access et VBA Excel vers la Power Platform
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Coffrets disponibles de mes ouvrages : https://www.editions-eni.fr/jean-philippe-andre
    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Avril 2012
    Messages : 34
    Par défaut
    Merci pour ta réponse jpcheck mais j'ai enlevé la ligne 60 de mon code donc ma variable n'est plus à Nothing et je n'arrive toujours pas à réouvrir une nouvelle connexion.Il y'a la même erreur et qu'est ce que tu veux dire par repeuplé les données necessaire à une nouvelle ouverture

  4. #4
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 678
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 678
    Par défaut
    Là où DAO laissait plus de marge de manoeuvre, ADODB impose une création des variables avec un New la plupart du temps :
    un peu de lecture à ce sujet http://ledzeppii.developpez.com/fonctionnalite-rs-ado/
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Migrer les applications VBA Access et VBA Excel vers la Power Platform
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Coffrets disponibles de mes ouvrages : https://www.editions-eni.fr/jean-philippe-andre
    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  5. #5
    Membre averti
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Avril 2012
    Messages : 34
    Par défaut
    J'ai lu le lien que tu a posté jpcheck mais je ne vois toujours pas comment remédier au pb.Tu ne peux pas simplement me dire ce que je dois ajouter ou enlever de mon programme pour qu'il n'y ait plus cet erreur stp?je desespere vraiment la

  6. #6
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 678
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 678
    Par défaut
    Si fermer la connexion pose problème, laisse la ouverte

    les lignes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    cN.Close
    Set cN = Nothing
    pouvant passer à la trappe en milieu de code
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Migrer les applications VBA Access et VBA Excel vers la Power Platform
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Coffrets disponibles de mes ouvrages : https://www.editions-eni.fr/jean-philippe-andre
    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  7. #7
    Membre averti
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Avril 2012
    Messages : 34
    Par défaut
    Sa ne marche pas, toujours la meme erreur

  8. #8
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 678
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 678
    Par défaut
    Quel est ton code actuel ?

    Si tu ne fermes pas la connexion, inutile de faire un cN.Open à nouveau
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Migrer les applications VBA Access et VBA Excel vers la Power Platform
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Coffrets disponibles de mes ouvrages : https://www.editions-eni.fr/jean-philippe-andre
    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  9. #9
    Membre averti
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Avril 2012
    Messages : 34
    Par défaut
    Si j'ai bien compris c'est bien sa que je dois faire
    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
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    'D'abord pour accéder à une base de donnée SQL Server, il faut se connecter à cette source de donnée
    'Utiliser un recordset pour accéder aux données
    'Le recordset est l'objet qui parcourt le résultat d'une requête SQL
    'Ajouter les références requises pour pouvoir déclarer l'objet de connection: Microsft DAO 3.6 Object Library et Microsoft Data Object 2.8 Library
     
    Sub FP56_5G2()
     
    Dim cN As ADODB.Connection 'Declarer l'objet de connexion
    Dim rs As ADODB.Recordset 'Declarer le recordset
    Dim Z As Integer
    Dim SerialNumber As Integer 'numéro de série appareil
     
    Worksheets("FP56").Range("A9").CurrentRegion.Borders.LineStyle = xlNone 'efface bordures
    Worksheets("FP56").Range("A10:N50").ClearContents 'efface données
    Worksheets("FP56").Range("E10:E50").FormatConditions.Delete 'efface format conditionnel
    Worksheets("FP56").Range("I10:I50").FormatConditions.Delete
    Worksheets("FP56").Range("I10:I50").Font.ColorIndex = xlColorIndexAutomatic
    Worksheets("FP56").Range("E10:E50").Font.ColorIndex = xlColorIndexAutomatic
    Worksheets("FP56").Range("A9").CurrentRegion.Font.ColorIndex = xlColorIndexAutomatic 'efface la couleur du texte
     
        Set cN = New ADODB.Connection 'Instnacier l'objet de connexion
        Set rs = New ADODB.Recordset 'Instancier l'objet de connection
        dbPath = Path
    'Définir une connexion string(chaine de connection) et l'affecter à la connexion
    'Cette chaine doit renseigner sur le provider( fournisseur de BDD ou SGBD), le nom de la BDD et les paramètres de Login et mot de passe(optionnels)
     
    SerialNumber = Worksheets("FP56").Range("C4").Value
    Application.ScreenUpdating = False
    Z = 10
     
     'connection à la base de données
        cN.ConnectionString = "Provider=SQLOLEDB;Data Source=VERPACWS016\ENTERPRISE;Initial Catalog=enterprise; User ID=sa;Password=Alpha2000;"
        cN.Open 'Ouvrir la connexion en utilisant l'objet de connexion instancié et la connection string
     
    'Selection des enregistrements en fonction du numéro de série de l'appareil et de l'échantillon
    rs.Open "select T.[Sample Name],T.[Start Time], T.Method, T.[Instrument Serial],RD.xValue " _
          & "from  dbo.tempresultsgrid_52ea9d0214714ca58adddcfb8587b1ef as T " _
          & "inner join dbo.ResultData as RD on T.result_id=RD.result_id " _
          & "inner join dbo.Result as R on R.result_id= T.result_id " _
          & "inner join dbo.xVariable as V on RD.variable_id=V.variable_id " _
          & "inner join dbo.Instrument as I on R.instrument_id=I.instrument_id " _
          & "where V.identifier in('FP56_EFP1Flash') " _
          & "and I.instrumenttype_id = cast('73354290-e09a-4c17-aa26-43a4b579e1db'as uniqueidentifier) " _
          & " and T.[Sample Name]='P-XYLENE' " _
          & " and T.[Instrument Serial]=" & SerialNumber & " order by T.[Start Time] DESC", cN, adOpenKeyset, adLockOptimistic
     
        If Not rs.EOF Then
            While Not rs.EOF
                Worksheets("FP56").Cells(Z, 1).Value = rs.Fields("Sample Name").Value
                Worksheets("FP56").Cells(Z, 2).Value = rs.Fields("xValue").Value
                Worksheets("FP56").Cells(Z, 3).Value = rs.Fields("Start Time").Value
                Worksheets("FP56").Cells(Z, 4).Value = rs.Fields("Method").Value
                rs.MoveNext
                Z = Z + 1
            Wend
        End If
     
    'Selection des enregistrements en fonction du numéro de série de l'appareil et de l'échantillon
    Z = 23
    rs.Open "select T.[Sample Name],T.[Start Time], T.Method, T.[Instrument Serial],RD.xValue " _
          & "from  dbo.tempresultsgrid_52ea9d0214714ca58adddcfb8587b1ef as T " _
          & "inner join dbo.ResultData as RD on T.result_id=RD.result_id " _
          & "inner join dbo.Result as R on R.result_id= T.result_id " _
          & "inner join dbo.xVariable as V on RD.variable_id=V.variable_id " _
          & "inner join dbo.Instrument as I on R.instrument_id=I.instrument_id " _
          & "where V.identifier in('FP56_EFP1Flash') " _
          & "and I.instrumenttype_id = cast('73354290-e09a-4c17-aa26-43a4b579e1db'as uniqueidentifier) " _
          & " and T.[Sample Name]='CRM 256-51' " _
          & " and T.[Instrument Serial]=" & SerialNumber & " order by T.[Start Time] DESC", cN, adOpenKeyset, adLockOptimistic
     
        If Not rs.EOF Then
            While Not rs.EOF
                Worksheets("FP56").Cells(Z, 1).Value = rs.Fields("Sample Name").Value
                Worksheets("FP56").Cells(Z, 2).Value = rs.Fields("xValue").Value
                Worksheets("FP56").Cells(Z, 3).Value = rs.Fields("Start Time").Value
                Worksheets("FP56").Cells(Z, 4).Value = rs.Fields("Method").Value
                rs.MoveNext
                Z = Z + 1
            Wend
        End If
     
     
     
    End Sub
    Apparemment je suppose que le pb vient du 2ème rs.Open.....

  10. #10
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 678
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 678
    Par défaut
    effectivement, autant la connexion peut etre gardée ouverte, autant le recordset doit être clos puis réouvert
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Migrer les applications VBA Access et VBA Excel vers la Power Platform
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Coffrets disponibles de mes ouvrages : https://www.editions-eni.fr/jean-philippe-andre
    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  11. #11
    Membre averti
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Avril 2012
    Messages : 34
    Par défaut
    Laisse tomber jpcheck j'ai finalement trouvé la solution.T'avais raison.En fait quand je compilais je click toujours sur debugg du coup meme quand j'effectuais des changements cela ne changeait rien.C'est con comme truc mais falliat y penser.En tout cas merci
    A+

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

Discussions similaires

  1. problème VBA Excel rempalcer rechercheV
    Par sharox dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 20/11/2013, 09h03
  2. [XL-2000] Problème VBA Excel : Doublon ou Dictionnaire
    Par arnomuch dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 01/02/2011, 13h40
  3. Problème VBA EXCEL - WORD - presse papier
    Par kiwi01 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 03/01/2010, 09h17

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