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 :

Macro + Query sql + Suppressions de ligne + Protection de feuille = ERREUR


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2014
    Messages : 20
    Points : 12
    Points
    12
    Par défaut Macro + Query sql + Suppressions de ligne + Protection de feuille = ERREUR
    Bonjour à toutes et tous,

    Je vous écris car j'ai un problème un peu particulier et je ne comprend pas pourquoi ça ne marche pas , ce qui est rageant .

    Mon problème est donc à propos d'une macros, celle-ci permet de se connecter à une base de données (os 400) et donc de récupérer des données pour les mettre dans une feuille. Ensuite je dois traiter ses données dans une autre feuille qui contient un tableau croisé dynamique.
    Jusque la je n'ai pas eu beaucoup de problème ( bien que j'ai du faire 2 boutons pour arriver à mes fins). Aujourd'hui, il m'est demandé de protéger ces données récupérées (données comptable ..), et c'est la que j'ai mon problème .

    Voici ma fonction, qui est appelée par un premier bouton :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Sub chargement_des_donnees()
        Call nettoyer_page
        Sheets("Detail SO in process").Unprotect Password:="root"
        If Feuil1.Range("B1").Value <> "" Then
        Call refresh_sql
        End If
        Sheets("Detail SO in process").Protect Password:="root"
    End Sub
    nettoyer_page est une fonction qui comme son nom l'indique nettoie ma page à l'aide d'un Clear.Content .

    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
     
    Sub refresh_sql()
        Dim v_numSO As Long    
        v_numSO = Worksheets("Feuil1").Range("B1").Value
        Sheets("Detail SO in process").Select
     
        sqlstring = "maQuery"
     
        connstring = _
            "ODBC;DSN=********; UID=*****;"
        With ActiveSheet.QueryTables.Add(Connection:=connstring, _
                Destination:=Range("A2"), Sql:=sqlstring)
            .Refresh
        End With
     
    End Sub
    Puis une autre et dernière fonction qui est appelée par un deuxième bouton, logiquement après avoir chargé les données via le premier bouton.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Sub mise_en_page()
        Sheets("Detail SO in process").Unprotect Password:="root"
        Worksheets("Detail SO in process").Rows(2).EntireRow.Delete
        Worksheets("Feuil1").PivotTables("Tableau_croise_dynamique2").PivotCache.Refresh
        Sheets("Detail SO in process").Protect Password:="root"
    End Sub
    Et donc avec ce code je ne peux pas charger mes données dans ma feuille Détail SO, un message d'erreur me signale que l'action n'est pas possible car ma feuille est verrouillée. Le pire est que tout marche parfaitement lorsque je le fais en pas à pas.
    Je n'y comprend plus rien !!!!
    J'avais déjà le même genre de problème avec la suppression de ma ligne dans ma fonction mise_en_page, d’où le second bouton. Mais pas possible de ruser pour mettre un troisième bouton ça perdrais tout son sens.

    Enfin bref, toutes suggestions, remarques ou idées sont les bienvenues

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Vous avez peut-être une procédure événementielle (du type WorksheetChange, ...) sur votre feuille Détail SO qui protège la feuille en fin de procédure.

    A vérifier.

    Cordialement.

  3. #3
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2014
    Messages : 20
    Points : 12
    Points
    12
    Par défaut
    Bonjour,

    Merci de la réponse.
    Mais je n'ai aucune autres procédure à part celles présentées dans mon message ...

  4. #4
    Invité
    Invité(e)
    Par défaut
    Essayez quand même en encadrant vos procédures avec des :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Application.EnableEvents = False
    ....
    Application.EnableEvents = True
    Par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub chargement_des_donnees()
        Application.EnableEvents = False
        Call nettoyer_page
        Sheets("Detail SO in process").Unprotect Password:="root"
        If Feuil1.Range("B1").Value <> "" Then
        Call refresh_sql
        End If
        Sheets("Detail SO in process").Protect Password:="root"
       Application.EnableEvents = True
    End Sub
    Cordialement.
    Dernière modification par Invité ; 19/12/2014 à 19h24. Motif: Aucun besoin de citer l'intégralité du message précédent

  5. #5
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2014
    Messages : 20
    Points : 12
    Points
    12
    Par défaut
    Citation Envoyé par Eric KERGRESSE Voir le message
    Essayez quand même en encadrant vos procédures avec des :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Application.EnableEvents = False
    ....
    Application.EnableEvents = True
    Cordialement.
    J'ai toujours la même erreur ...
    Je ne pense pas que ce soit le code qui soit faux. A vrai dire j'ai l'impression que c'est ma requête qui fait une espèce de boucle bizarre, c'est étrange.
    Car lorsque j'essayais de supprimer ma deuxième ligne dans la même fonction, c'est toutes mes lignes qui étaient supprimer, évidemment ce n'est pas le cas en mode pas à pas...

  6. #6
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par cecjmii Voir le message
    J A vrai dire j'ai l'impression que c'est ma requête qui fait une espèce de boucle bizarre, c'est étrange.
    Car lorsque j'essayais de supprimer ma deuxième ligne dans la même fonction, c'est toutes mes lignes qui étaient supprimer, évidemment ce n'est pas le cas en mode pas à pas...
    Et avec cette syntaxe pour Sub refresh_sql ?

    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
     
    Sub refresh_sql()
     
    Dim ShDetailSoInProcess As Worksheet
    Dim v_numSO As Long
     
        v_numSO = Worksheets("Feuil1").Range("B1").Value
     
        Set ShDetailSoInProcess = Sheets("Detail SO in process")
       ' Sheets("Detail SO in process").Select
     
        sqlstring = "maQuery"
        connstring = "ODBC;DSN=********; UID=*****;"
     
        With ShDetailSoInProcess.QueryTables.Add(Connection:=connstring, Destination:=Range("A2"), Sql:=sqlstring)
            .Refresh
        End With
     
        Set ShDetailSoInProcess = Nothing
     
    End Sub
    Cordialement.

  7. #7
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2014
    Messages : 20
    Points : 12
    Points
    12
    Par défaut
    Malheureusement ce n'est toujours pas bon
    Merci de votre aide

  8. #8
    Invité
    Invité(e)
    Par défaut
    Dernière intervention

    L'aide sur QueryTable donne l'information suivante

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
    Dim qt As QueryTable
    sqlstring = "select 96Sales.totals from 96Sales where profit < 5"
    connstring = _
        "ODBC;DSN=96SalesData;UID=Rep21;PWD=NUyHwYQI;Database=96Sales"
    With ActiveSheet.QueryTables.Add(Connection:=connstring, _
            Destination:=Range("B1"), Sql:=sqlstring)
        .Refresh
    End With
    Où "sqlstring = "select 96Sales.totals from 96Sales where profit < 5" est la requête.

    Dans votre code, vous indiquez :

    Dans cette notation maquery n'est pas une variable.

    Vous devriez avoir :

    Si vous avez défini maquery comme variable string.


    Bon courage.

    Cordialement.

  9. #9
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2014
    Messages : 20
    Points : 12
    Points
    12
    Par défaut
    Merci pour l'idée mais j'ai une longue requête donc j'ai préférée mettre "maquery" pour simplifier la compréhension du code ...

Discussions similaires

  1. Macro automatique pour passer une ligne d''une feuille à l'autre
    Par ElPibeOro dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 06/04/2012, 11h58
  2. [SQL] Suppression de ligne
    Par juig7 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 29/02/2008, 17h43
  3. Réponses: 0
    Dernier message: 24/08/2007, 12h27
  4. [PL/SQL] suppression de ligne
    Par FeTi dans le forum Oracle
    Réponses: 2
    Dernier message: 06/04/2006, 10h35
  5. Réponses: 4
    Dernier message: 26/01/2006, 12h03

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