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

VB.NET Discussion :

XLS.Feuille.Unprotect marche pas


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Septembre 2003
    Messages
    401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Septembre 2003
    Messages : 401
    Par défaut XLS.Feuille.Unprotect marche pas
    Bonjour,

    Je dois traiter un fichier excel qui contient des protections.
    Si je tente de lire directement j'obtiens des valeurs incohérentes
    Si je déprotège à la main je récupère les bonnes valeurs

    Je n'arrive pas à déprotéger correctement la feuille via le code car j'ai toujours une valeur incohérente dans la variable val.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     Dim Feuille As Worksheet = objWorkbook.Worksheets.Item("F1")
     Feuille.Unprotect("PWD")
     Dim val = Feuille.Range("A1").Value
    Une soluce ou une idée ?

    ps : Office 2010

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    301
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 301
    Par défaut
    Bonjour,

    Si "PWD" est le nom de ta feuille
    Essai plutôt avec
    Feuille.Unprotect()

    ou

    Feuille.Unprotect(1)
    Si ta feuille est la première de ton classeur.
    verifier si les cellules en question ne sont pas elles aussi protégées

    A+

  3. #3
    Membre très actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Septembre 2003
    Messages
    401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Septembre 2003
    Messages : 401
    Par défaut
    PWD => était le mot de pass

    j'ai tenté avec Feuille(1).Unprotect("MonPassword") mais ça change rien au problème

    j'ai tenté ça, idem ça change rien, pas d'erreur mais la lecture renvoie toujours
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    For Each Feuille As Worksheet In objWorkbook.Worksheets
        With Feuille
            .Unprotect(PWD_Feuille)
            .Cells.Locked = False
        End With
    Next
    Pour rappel :
    une donnée incohérente (ex: -12316431 au lieu de "Toto")
    Si je déprotège à la main je récup bien "Toto"

  4. #4
    Membre expérimenté
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    301
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 301
    Par défaut
    Bonjour,

    La protection se trouve à quel niveau, Classeur, feuille ou cellule.
    Dans certaines version d'Excel elle peu même être multiple (cellules et feuille).
    Le problème du résultat incohérent peu venir du "formatage" de la cellule (ex. une date qui devient un nombre).

    A+

    Bernard

  5. #5
    Membre très actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Septembre 2003
    Messages
    401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Septembre 2003
    Messages : 401
    Par défaut
    la valeur c'est du texte et si c'était un problème de formatage j'aurais aussi le pb sans la protection hors ce n'est pas le cas. De plus j'ai vérifié il n'y a pas de format appliquer dessus.

    Et le client ne sait plus s'il a fait une action particulière pour protéger les feuilles !

    Edit
    la valeur retourné est toujours : -214682625900

  6. #6
    Membre expérimenté
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    301
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 301
    Par défaut
    Bon il faut que je trouve un moment pour faire un essai.
    En attendant, voici un bout de code issu d'un de mes programmes.
    Dans mon cas, j'importe des données d'un programme vers Excel pour créer une fiche technique. J'ais rajouté le dévérouillage de la feuille.

    Programme en VB2005 et fichier en Excel 2000

    J'espère que cela pourras t'aider.
    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
    Private Sub CalCone1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ExcelCone1.Click
     
            Dim Xlsapp As Excel.Application
            Dim XlsBook As Excel.Workbook
            Dim Xlsheet As Excel.Worksheet
     
            Xlsapp = New Excel.Application
            XlsBook = Xlsapp.Workbooks.Open(Application.StartupPath & "\Matrice\Dev-Cone1.xls")
            Xlsheet = XlsBook.Worksheets(1)
            Xlsheet.Unprotect()
     
            Xlsheet.Cells(5, 4) = Val(TextBox1.Text)
            Xlsheet.Cells(6, 4) = Val(TextBox2.Text)
            Xlsheet.Cells(7, 4) = Val(TextBox3.Text)
            Xlsheet.Cells(8, 4) = Val(TextBox4.Text)
            Xlsheet.Cells(9, 4) = Val(TextBox5.Text)
     
            Xlsheet.Cells(12, 4) = TextBox6.Text
            Xlsheet.Cells(13, 4) = TextBox7.Text
     
            .........................
     
            Xlsapp.Visible = True
     
            MsgBox("Fin de l'import Excel" & Chr(13) & "Valider pour terminer", MsgBoxStyle.Exclamation, "Export Excel")
     
            Xlsapp.Quit()
            Xlsapp = Nothing
            XlsBook = Nothing
            Xlsapp = Nothing
     
        End Sub
    A+

  7. #7
    Membre très actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Septembre 2003
    Messages
    401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Septembre 2003
    Messages : 401
    Par défaut
    Merci de ton aide
    sauf erreur de ma part j'vois pas de différence avec ce que je fais déjà :
    (sauf que toi tu accèdes à la page par l'index (que j'ai aussi tester mais sans succès))
    Citation Envoyé par ricil78 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     Dim Feuille As Worksheet = objWorkbook.Worksheets.Item("F1")
     Feuille.Unprotect("PWD")
     Dim val = Feuille.Range("A1").Value  'val contient -12316431 au lieu de "Toto" au lieu de "Toto"

  8. #8
    Membre expérimenté
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    301
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 301
    Par défaut
    Voici un essai qui marche
    Sur une form je place 1 textbox et un bouton pour l'import

    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
    Public Class Form1
     
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim Xlsapp As Excel.Application
            Dim XlsBook As Excel.Workbook
            Dim Xlsheet As Excel.Worksheet
            Dim Val1 As String
     
            Xlsapp = New Excel.Application
            XlsBook = Xlsapp.Workbooks.Open(Application.StartupPath & "\Matrice\Essai.xls")
            Xlsheet = XlsBook.Worksheets(1)
            Xlsheet.Unprotect("PWD")
     
            Val1 = Xlsheet.Range("A1").Value
            TextBox1.Text = Val1
     
            Xlsapp.Visible = True
     
            Xlsapp.Quit()
            Xlsapp = Nothing
            XlsBook = Nothing
            Xlsapp = Nothing
     
        End Sub
    End Class
    A+

  9. #9
    Membre très actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Septembre 2003
    Messages
    401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Septembre 2003
    Messages : 401
    Par défaut
    sans méchanceté aucune : je comprend pas ton message !

    car dans mon cas le Val1 aura quand même une valeur -12316431 au lieu de "Toto" !!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Val1 = Xlsheet.Range("A1").Value

  10. #10
    Membre expérimenté
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    301
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 301
    Par défaut
    Dans mon cas tout marche correctement, je récupère bien le contenu de la cellule, que ce soit du texte ou des nombres.

    As-tu essayé avec un autre fichier Excel pour vérifier si ton code marche ?

  11. #11
    Membre très actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Septembre 2003
    Messages
    401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Septembre 2003
    Messages : 401
    Par défaut
    Oui et c'est là que se trouve mon problème
    Si je prend le même fichier excel et que je fait moi même les protections à la main mon code fonctionne très bien.
    Si je traite directement un de ces fichiers excel ça marche pas !

    Donc le client à du faire une manip que je dois absolument trouvé. mais pour arranger le truc, il ne se rappel plus laquelle !
    il y a des centaines de fichier excel à traiter, perso je me vois mal les faire un par un.

  12. #12
    Membre expérimenté
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    301
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 301
    Par défaut
    Je n’ais plus vb sous la main donc pas de test possible.

    Cependant, quelques idées en vrac :

    -Essai de créer un fichier excel de toute pièce pour vérifier ton code.
    -Vérifie si le mot de passe ne comporte pas de caractères spéciaux qui pourrait bloquer VB du style ‘ % & ….
    -Vérifie si ton mot de passe dans VB est identique à celui d’excel, notamment pour les majuscules et les minuscules

    Bon je sais, c’est un peut bateau comme réponse, mais il y a peu je me suis énervé avec un prog qui plantait à cause d’une erreur de frappe sur un chemin de fichier, la plaisanterie ma fais perdre 2H et ma coûté une surdose de caféine.

  13. #13
    Membre très actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Septembre 2003
    Messages
    401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Septembre 2003
    Messages : 401
    Par défaut
    Je compatis !

    sinon pour mon malheurs, j'ai déjà testé tout ça (avant de poster) et ça fonctionne à chaque fois.
    c'est bien ça qui me rend fou !
    Je sais vraiment pas ce qu'il a pu faire avec son fichier pour que ça bloque comme ça !!

  14. #14
    Membre expérimenté
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    301
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 301
    Par défaut
    La, j’avoue que je sèche …
    Autre hypothèse, les fichiers ont-ils été créés avec la même version d’Excel que tu utilise ?
    La valeur retournée me fait penser à un code d’erreur. As-tu essayé de la gérée en exception ?

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

Discussions similaires

  1. PB VBA : ecriture dans une feuille active => marche pas !
    Par MeHo_ dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 14/01/2008, 16h47
  2. 'SHOW TABLES' marche pas sous postgresql !?
    Par fet dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 13/05/2004, 09h28
  3. Réponses: 9
    Dernier message: 07/05/2003, 12h57
  4. [GifDecoder] marche pas dans applet avec IE
    Par formentor dans le forum Applets
    Réponses: 2
    Dernier message: 06/05/2003, 10h43
  5. Sysdate qui marche pas ??
    Par StouffR dans le forum Langage SQL
    Réponses: 4
    Dernier message: 28/08/2002, 13h23

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