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 :

[VBA-E+SQL] Message d'erreur et excel qui plante


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 91
    Points : 41
    Points
    41
    Par défaut [VBA-E+SQL] Message d'erreur et excel qui plante
    Bonjour à tous ,

    j'ai fais une procédure afin de compter le nombre de fois qu'est présent chaque numéro de référence dans une autre feuille et que ce nombre de fois soit mis sur la même ligne que cette référence d'où ce code :

    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
    Private Sub RemplissageSynthèse4()
     
    Application.ScreenUpdating = False
     
    ThisWorkbook.Worksheets("SYNTHESE").Activate
     
    Dim CodeTemporaire As String
    'Déclaration de la connexion
    Dim Conn As ADODB.Connection
     
    'Déclaration du Recordset
    Dim rsT As ADODB.Recordset
     
     
    Dim Fichier As String, Direction As String, rSQL As String
     
    Direction = ThisWorkbook.Path
    Fichier = "OUTIL HD TRAVAIL.xls"
     
        'Instanciation de la connexion
        Set Conn = New ADODB.Connection
     
        'Paramétrage & Ouverture
        With Conn
        .Provider = "Microsoft.Jet.OLEDB.4.0"
        .ConnectionString = "Data Source=" & Direction & "\" & Fichier & _
        ";Extended Properties=Excel 8.0;"
        .Open
        End With
     
        'Instanciation du Recordset
        Set rsT = New ADODB.Recordset
     
        rsT.ActiveConnection = Conn
     
        i = 2
     
        Do While Not IsEmpty(Cells(i, 1))
     
            CodeTemporaire = Cells(i, 1)
     
            'Insertion de la requête SQL dans rSQL
            rSQL = "SELECT Count([CDCOURTI]) FROM [HD$] WHERE [CDCOURTI]='" & CodeTemporaire & "'"
     
            With rsT
            .ActiveConnection = Conn
            .Open rSQL, Conn
            End With
     
     
            'Copie des données
            Cells(i, 9).CopyFromRecordset rsT
            rsT.Close
            rSQL = ""
            CodeTemporaire = ""
     
            i = i + 1
     
        Loop
     
     
        Conn.Close
     
     Application.ScreenUpdating = True
    End Sub
    Le résultat renvoyé est bon seulement au bout d'une vingtaine de seconde excel m'affiche que "la liaison avec la feuille est perdue" ainsi que "Memoire insufisante pour continuer" (j'ai 512 mo et tout n'est pas utilisé lors de l'execution dixit le gestionnaire des taches)
    Quelqu'un a t-il une idée de solution au problème ???

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 46
    Points : 55
    Points
    55
    Par défaut
    En général le message "Mémoire insuffisante" apparait quand par exemple tu fais plusieurs connection sur une base sans fermer la précédente ou quand tu es dans une boucle sans fin, ...

    as-tu réellement besoin de .ActiveConnection = Conn dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    With rsT 
            .ActiveConnection = Conn 
            .Open rSQL, Conn 
            End With
    Puisque à priori tu initialises cette propriété avant ta boucle ?

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 91
    Points : 41
    Points
    41
    Par défaut
    j'ai essayé en lemettant hors de la boucle et sa pose le même problème :-/

  4. #4
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Août 2005
    Messages
    3 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2005
    Messages : 3 317
    Points : 20 144
    Points
    20 144
    Par défaut
    bonsoir

    as tu essayé

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ...
    rsT.Close
    Set rsT = Nothing
    ...

    bon wee kend
    michel

  5. #5
    Membre habitué
    Inscrit en
    Novembre 2005
    Messages
    130
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 130
    Points : 166
    Points
    166
    Par défaut
    salut Deejoh

    Test ceci

    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
    Private Sub RemplissageSynthèse4() 
     
    Application.ScreenUpdating = False 
     
    ThisWorkbook.Worksheets("SYNTHESE").Activate 
     
    Dim CodeTemporaire As String 
    'Déclaration de la connexion 
    Dim Conn As ADODB.Connection 
     
    'Déclaration du Recordset 
    Dim rsT As ADODB.Recordset 
     
     
    Dim Fichier As String, Direction As String, rSQL As String 
     
    Direction = ThisWorkbook.Path 
    Fichier = "OUTIL HD TRAVAIL.xls" 
     
        'Instanciation de la connexion 
        Set Conn = New ADODB.Connection 
     
        'Paramétrage & Ouverture 
        With Conn 
        .Provider = "Microsoft.Jet.OLEDB.4.0" 
        .ConnectionString = "Data Source=" & Direction & "\" & Fichier & _ 
        ";Extended Properties=Excel 8.0;" 
        .Open 
        End With 
     
        'Instanciation du Recordset 
        Set rsT = New ADODB.Recordset 
        rsT.ActiveConnection = Conn 
     
        i = 2 
     
        Do While Not IsEmpty(Cells(i, 1)) 
     
            CodeTemporaire = Cells(i, 1) 
     
            'Insertion de la requête SQL dans rSQL 
            rSQL = "SELECT Count([CDCOURTI]) FROM [HD$] WHERE [CDCOURTI]='" & CodeTemporaire & "'" 
     
            With rsT 
               .source = rSql
               .open        
            End With         
     
            'Copie des données 
            Cells(i, 9).CopyFromRecordset rsT 
            rsT.Close 
            rSQL = "" 
            CodeTemporaire = "" 
            i = i + 1 
        Loop     
        Conn.Close 
    Set rsT = nothing
    Set Conn = Nothing
     
     Application.ScreenUpdating = True 
    End Sub
    @+

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 91
    Points : 41
    Points
    41
    Par défaut
    ça marche GENIAL merci beaucoup

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

Discussions similaires

  1. [VBA] Disparition des messages d'erreur
    Par spaiku dans le forum VBA Access
    Réponses: 3
    Dernier message: 14/04/2008, 14h52
  2. [VBA] modifier 1 message d'erreur
    Par tomas dans le forum VBA Access
    Réponses: 4
    Dernier message: 25/04/2007, 14h53
  3. Réponses: 3
    Dernier message: 30/03/2007, 14h48
  4. inportation *.sql = message d' erreur
    Par Blaireau dans le forum Outils
    Réponses: 3
    Dernier message: 04/02/2007, 22h14
  5. [ASE][T-SQL]Message d'erreur pendant INSERT
    Par Benjamin78 dans le forum Sybase
    Réponses: 3
    Dernier message: 23/03/2006, 10h38

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