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 :

Bloquer UserForm et Verrouillage de page [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Femme Profil pro
    Etudiante technico commerciale
    Inscrit en
    Juin 2017
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 32
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Etudiante technico commerciale
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2017
    Messages : 6
    Par défaut Bloquer UserForm et Verrouillage de page
    Bonsoir à tous,

    Je suis toute nouvelle ici et sur l'utilisation d'Excel en VBA et j'aurai besoin de votre aide pour 2 petite choses

    Tout d'abord J'ai créee un Userform sous Excel, avec un bouton de validation qui recopie les données dans un tableau mais comment faire pour empêcher la validation tant que certaines TextBox ne sont pas remplies ?

    J'ai essayé : If TextBox1.Value = "" Then MsgBox "Valeur incorrecte": TextBox1.SetFocus: Exit Sub cependant si l'on entre un "espace" avec le clavier dans la TextBox et que l'on valide l'Userform se valide, est ce normale ? Je pensais que le If TextBox1.Value = "" allait empêcher ça moi

    De plus j'aurais besoin de vous pour un autre petit truc, j'aimerai vérouiller avec un mot de passe tout mon fichier excel sauf une colonne de valeur qui peut être variable en nombre de cellule, quelqu'un aurait un bout de code à me donner car je n'y arrive pas avec l'enregistreur ... La colonne est : Range((Cells(1,2),Cells(nb_colonnes,2)).

    merci d'avance et bonne soirée a vous

  2. #2
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Emmaaa Voir le message
    Tout d'abord J'ai créee un Userform sous Excel, avec un bouton de validation qui recopie les données dans un tableau mais comment faire pour empêcher la validation tant que certaines TextBox ne sont pas remplies ?
    Bonjour,

    Concernant la saisie dans le Textbox1, la procédure suivante empêche la saisie d'un espace sur le 1er caractère du TextBox. Il suffit d'ajouter cette procédure dans le code de votre Userform.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     
    Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
     
         If Len(TextBox1) = 0 Then
            Select Case Chr(KeyAscii)
                   Case Chr(32), Chr(160)
                        KeyAscii = 0
            End Select
         End If
     
    End Sub
    Pour information, vous pouvez utiliser le code ci-dessous pour permettre la saisie uniquement de certains caractères :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Private Sub TextBoxProjetNumero_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
            If InStr("1234567890,", Chr(KeyAscii)) = 0 Then KeyAscii = 0
    End Sub

    De plus j'aurais besoin de vous pour un autre petit truc, j'aimerai vérouiller avec un mot de passe tout mon fichier excel sauf une colonne de valeur qui peut etre variable en nombre de cellule, quelqu'un aurait un bout de code à me donner car je n'y arrive pas avec l'enregistreur ... La colonne est : Range((Cells(1,2),Cells(nb_colonnes,2))
    Quant au verrouillage, une piste avec 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
     
     
    Sub ProtectionFeuille(ByVal FeuilleDeSaisie As Worksheet, ByVal AireDeSaisie As Range)
     
        With FeuilleDeSaisie
     
            .Unprotect
            .Cells.Locked = True
            .Cells.FormulaHidden = True
     
            With AireDeSaisie
                .Locked = False
                .FormulaHidden = False
            End With
     
            .Protect
     
        End With
     
    End Sub
     
     
    Sub EssaiProtectionFeuille()
     
    Dim NombreDeLignes As Long
    Dim ShSaisie As Worksheet
    Dim AireADeproteger As Range
     
        Set ShSaisie = Sheets("Feuil1")
     
        With ShSaisie
     
             NombreDeLignes = 5
     
             Set AireADeproteger = .Range(.Cells(1, 2), .Cells(NombreDeLignes, 2))
             ProtectionFeuille ShSaisie, AireADeproteger
             Set AireADeproteger = Nothing
     
        End With
     
        Set ShSaisie = Nothing
     
    End Sub

  3. #3
    Nouveau membre du Club
    Femme Profil pro
    Etudiante technico commerciale
    Inscrit en
    Juin 2017
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 32
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Etudiante technico commerciale
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2017
    Messages : 6
    Par défaut
    Bonjour,

    Merci pour votre réponse

    Je n'ai pas encore regardé pour le verrouillage, je m'occupe d'abord de la saisie

    Vos deux codes marchent très bien en tout cas merci, cependant si j'effectue un copié/collé il ya quand meme moyen de rentrer certaines valeurs dans la TextBox, connaissez vous un moyen pas trop compliqué d'éviter cela ?

    Oui je sais je chipote un peu désolée mais je cherche vraiment à avoir un bon code sans "faille"

  4. #4
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Emmaaa Voir le message
    Vos deux codes marchent très bien en tout cas merci, cependant si j'effectue un copié/collé il ya quand meme moyen de rentrer certaines valeurs dans la TextBox, connaissez vous un moyen pas trop compliqué d'éviter cela ?
    Il vous faut garder le test de votre premier message pour valider.

  5. #5
    Nouveau membre du Club
    Femme Profil pro
    Etudiante technico commerciale
    Inscrit en
    Juin 2017
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 32
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Etudiante technico commerciale
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2017
    Messages : 6
    Par défaut
    Citation Envoyé par Eric KERGRESSE Voir le message
    Il vous faut garder le test de votre premier message pour valider.
    Je parle d'effectuer un ctrl+v dans la TextBox avec de mauvaise valeurs et rien n’empêche qu'elles soient valider apres de ce que je vois

    J'avais pensé à mettre queque chose comme :
    If Not IsNumeric(TextBox1.Value) Then MsgBox "Valeur incorrecte": TextBox1.SetFocus: Exit Sub

    Cependant je l'ai enlevé car j'ai besoin du point et apparemment le If Not IsNumeric ne me permet pas de l'utiliser ... auriez vous une solution ?

    De plus j'ai essayé votre code de verrouillage mais étant débutante j'ai quelque difficultés, a quel endroit suis je censé mettre votre code ? Y'a t'il quelque chose a changer ? J'aurais voulu le protéger avec un mot de passe, est ce le cas, comment faire ?

    Merci pour l'aide que vous m'apportez car je suis un peu perdue de mon coté

  6. #6
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Emmaaa Voir le message
    Je parle d'effectuer un ctrl+v dans la TextBox avec de mauvaise valeurs et rien n’empêche qu'elles soient valider apres de ce que je vois
    J'avais pensé à mettre queque chose comme :
    If Not IsNumeric(TextBox1.Value) Then MsgBox "Valeur incorrecte": TextBox1.SetFocus: Exit Sub
    Cependant je l'ai enlevé car j'ai besoin du point et apparemment le If Not IsNumeric ne me permet pas de l'utiliser ... auriez vous une solution ?
    De plus j'ai essayé votre code de verrouillage mais étant débutante j'ai quelque difficultés, a quel endroit suis je censé mettre votre code ? Y'a t'il quelque chose a changer ? J'aurais voulu le protéger avec un mot de passe, est ce le cas, comment faire ?
    Que cherchez vous à contrôler dans votre TextBox ? Uniquement des valeurs numériques ? Votre séparateur décimal est le point ?

    Quant au code pour le verrouillage, vous le mettez dans un module standard. Le verrouillage est relatif à l'onglet choisi. Si vous souhaitez mettre un mot de passe, il suffit d'ajouter ce mot de passe comme ci-dessous :

    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
     
    Sub ProtectionFeuille(ByVal FeuilleDeSaisie As Worksheet, ByVal AireDeSaisie As Range)
     
        With FeuilleDeSaisie
     
            .Unprotect ("Mon mot de passe")
            .Cells.Locked = True
            .Cells.FormulaHidden = True
     
            With AireDeSaisie
                .Locked = False
                .FormulaHidden = False
            End With
     
            .Protect ("Mon mot de passe")
     
        End With
     
    End Sub

  7. #7
    Nouveau membre du Club
    Femme Profil pro
    Etudiante technico commerciale
    Inscrit en
    Juin 2017
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 32
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Etudiante technico commerciale
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2017
    Messages : 6
    Par défaut
    Oui uniquement des valeurs numériques, avec le point comme séparateur ou alors point et virgule dans le meilleur des cas sauf qu'il faudrait que l'action d'entrer les deux en meme temps dans la textBox ne soit pas réalisable, je sais que ce n'est pas facile à faire donc je me contenterais du point seul, mais pas de virgule seule en tout cas.

    Comment choisir l'onglet dans ce cas, car ça ne me verrouille rien pour l'instant, y'a t'il des infos que je dois changer dans votre code car quand j'ouvre mon fichier Excel j'ai en fait plusieurs Userform qui s'ouvre a la suite et me remplisse mon tableau puis j'aimerai ensuite que tout cela se verrouille sauf la colonne de variable qui resterait à compléter sans mot de passe elle, le mot de passe s'appliquant juste pour déverrouiller toute la feuille

    Je commence a perdre espoir car malgré vos indications je n'y arrive pas ...

  8. #8
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Emmaaa Voir le message
    Oui uniquement des valeurs numériques, avec le point comme séparateur ou alors point et virgule dans le meilleur des cas sauf qu'il faudrait que l'action d'entrer les deux en meme temps dans la textBox ne soit pas réalisable, je sais que ce n'est pas facile à faire donc je me contenterais du point seul, mais pas de virgule seule en tout cas.
    En supposant que vous ayez un bouton pour valider la saisie et une variable public de type double, le code suivant vérifie les anomalies de saisie :

    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
     
    Private Sub BoutonValider_Click()
     
    Dim I As Integer, NbVirgules As Integer, NbPoints As Integer
    Dim MaValeur As String
    Dim AnomalieDeSaisie As String
     
            NbVirgules = 0
            NbPoints = 0
            MaValeur = ""
            AnomalieDeSaisie = "Anomalies de saisie constatées :" & Chr(10)
     
            If Len(TextBox1) > 0 Then
              For I = 1 To Len(TextBox1)
     
                  Select Case Mid(TextBox1, I, 1)
                         Case 0 To 9
                         'Case "0", "1", "2", "3", "4", "5", "6", "7", "8", "9)"
                              MaValeur = MaValeur & Mid(TextBox1, I, 1)
                         Case ","
                              MaValeur = MaValeur & Mid(TextBox1, I, 1)
                              NbVirgules = NbVirgules + 1
                              If NbVirgules > 1 Then AnomalieDeSaisie = AnomalieDeSaisie & "Virgules multiples" & Chr(10)
                         Case "."
                              MaValeur = MaValeur & ","
                              NbVirgules = NbVirgules + 1
                              If NbVirgules > 1 Then AnomalieDeSaisie = AnomalieDeSaisie & "Virgules multiples" & Chr(10)
                         Case Chr(32), Chr(160)
                              AnomalieDeSaisie = AnomalieDeSaisie & "Caractères blancs interdits" & Chr(10)
                         Case Else
                              AnomalieDeSaisie = AnomalieDeSaisie & Mid(TextBox1, I, 1) & Chr(10)
     
                  End Select
     
              Next I
     
              If AnomalieDeSaisie <> "Anomalies de saisie constatées :" & Chr(10) Then
                MsgBox AnomalieDeSaisie, vbCritical
                Exit Sub
     
              End If
     
            Else
     
                MsgBox "Vous devez saisir une valeur !", vbCritical
                Exit Sub
     
            End If
     
            ValeurTextBox1 = CDbl(MaValeur)
            MsgBox ValeurTextBox1
     
    End Sub

  9. #9
    Nouveau membre du Club
    Femme Profil pro
    Etudiante technico commerciale
    Inscrit en
    Juin 2017
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 32
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Etudiante technico commerciale
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2017
    Messages : 6
    Par défaut
    Merci beaucouuuup, ça marche parfaitement !
    je me suis juste permis d'enlever la MsgBox Valeur

    J'aimerais donc maintenant pouvoir verrouiller tout le fichier avec un mot de passe lorsque l'on appuie sur le bouton Valider du dernier Userform qui s'affiche à l'exception de la colonne de cellule qui peut être variable.
    Le code pour verrouiller/déverrouiller tout cela sera donc placé dans le bouton de cet Userform il me semble, le problème est cependant que la variable qui est Range((Cells(1,2),Cells(nb_colonnes,2)) est dans un autre UserForm avant celui la, j'ai donc pensé à mettre Public nb_colonnes As Integer dans une feuille module, de sorte à ce que la variable s'applique a toute le programme/feuille, est ce bien le cas ?

    Cependant je n'arrive toujours pas à verrouiller tout sauf la plage variable ... j'en deviens folle

  10. #10
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    le mieux plutôt que mouliner pour vérifier est d'empêcher la saisie d'autre chose qu'un numérique avec virgule comme décimale

    un peu comme ceci
    exemple 1 avec keypress
    autoriser que les numerique
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    autorisé = "1 2 3 4 5 6 7 8 9 ,"
    If Not autorisé Like "*" & Chr(KeyAscii) & "*" Then KeyAscii = 0
    If Chr(KeyAscii) = "," And TextBox1 Like "*,*" Then KeyAscii = 0
    End Sub
    exemple 2 avec keypress
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    If Chr(KeyAscii) = "," And TextBox2 Like "*,*" Then KeyAscii = 0
    If Not Chr(KeyAscii) Like "[0-9-,]" Then KeyAscii = 0
    End Sub
    bloquer le CTRL +V avec keydown
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    If KeyCode = 17 Then MsgBox " Ctrl+V interdit"
    End Sub
    ou tout avec keycode
    exemple 1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub TextBox2_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    If KeyCode = 17 Then MsgBox " Ctrl+V interdit"
    If KeyCode = 188 And TextBox2 Like "*,*" Then KeyCode = 0
    If KeyCode < 96 Or KeyCode > 105 And KeyCode <> 188 Then KeyCode = 0
    End Sub
    exemple 2 sans msgbox et possibilité d'utiliser les touche pour effacer et supprimer et le CTRL+V bloqué
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub TextBox2_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    If KeyCode = 8 Or KeyCode = 46 Then Exit Sub
    If KeyCode = 17 Then KeyCode = 188
    If KeyCode = 188 And TextBox2 Like "*,*" Then KeyCode = 0
    If KeyCode < 96 Or KeyCode > 105 And KeyCode <> 188 Then KeyCode = 0
    End Sub
    c'est bien d'avoir le choix
    je l'aurais un jour !! je l'aurais !!!
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  11. #11
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Emmaaa Voir le message
    Dès lors qu'une variable va être utilisée en dehors du Userform, il faut la déclarer Public dans un module standard.

    Quant à la protection, il vous faut protéger :

    • Vos onglets : pour protéger vos données sur les cellules verrouillées.
    • Votre classeur pour empêcher l'ajout d'onglets et ou de modifier la structure des fenêtres.

    Faites l'essai sur un classeur vierge manuellement pour voir comment cela fonctionne puis en utilisant l'enregistreur de macros.

    Les deux procédures protégeant l'onglet sont à mettre dans un module standard, il faut simplement appeler EssaiProtectionFeuille après validation. Vous pouvez également ne faire qu'une seule procédure.


    Pour Patrick : Merci pour ton Keycode = 17 pour empêcher le collage.

  12. #12
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    de rien eric et il y a bien d'autre méthodes encorepour bloquer le (copier/coller)

    comme par exemple vider le presse papier

    de cette manière
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    With CreateObject("htmlfile").parentwindow.clipboardData.setData("Text", ""): End With
    End Sub
    ou de cette manière la

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    With CreateObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}"): .SetText "": .PutInClipboard: End With
    End Sub
    a+
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  13. #13
    Nouveau membre du Club
    Femme Profil pro
    Etudiante technico commerciale
    Inscrit en
    Juin 2017
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 32
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Etudiante technico commerciale
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2017
    Messages : 6
    Par défaut
    Bonjour Eric KERGRESSE et Patricktoulon,

    Merci beaucoup à vous deux, j'ai finalement réussi à faire tout ce que je voulais grâce à votre aide !

    Bonne continuation

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

Discussions similaires

  1. [VBA-W]Insérer contenu variable dans page word
    Par jcaspar dans le forum VBA Word
    Réponses: 1
    Dernier message: 24/03/2006, 01h07
  2. VBA creation doc word - mise en page
    Par estampille dans le forum VBA Word
    Réponses: 4
    Dernier message: 18/01/2006, 12h04
  3. [VBA][Word] débutant suppression d'une page
    Par cyrcroix dans le forum VBA Word
    Réponses: 3
    Dernier message: 30/12/2005, 19h22
  4. Verrouillage de pages
    Par Tanahjampea dans le forum Linux
    Réponses: 2
    Dernier message: 09/12/2005, 23h08
  5. en vba bloquer le bouton précédent
    Par Pouyou le caribou dans le forum Access
    Réponses: 5
    Dernier message: 15/06/2005, 19h26

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