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 :

Exclure des cellules d'une macro


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 45
    Par défaut Exclure des cellules d'une macro
    Bonjour,
    en fait, j'ai une macro sur une plage de cellules.
    Je voudrais savoir s'il est possible d'exclure une cellule de la plage de cellules par exemple : la macro bloque une modification (saisie d'un chiffre dans une cellule) mais lutilisateur veut quand meme rentrer et valider sa saisie, donc un déblocage de la modif par un userform pourrait être proposé, l'utilisateur valide la modification malgré le blocage, et la cellule concernée est exclue de la plage sur laquelle doit s'exécuter la macro pour que la modif ne sefface pas lors de la réouverture du fichier ??
    Merci !

  2. #2
    Expert confirmé
    Avatar de Oliv-
    Homme Profil pro
    solution provider
    Inscrit en
    Mars 2006
    Messages
    4 093
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : solution provider

    Informations forums :
    Inscription : Mars 2006
    Messages : 4 093
    Billets dans le blog
    20
    Par défaut
    Salut,
    Tu dois pouvoir utiliser la propriété "format de cellule"/Protection/verrouillée

    comme par défaut les cellules sont verrouillées tu peux la dévérouiller si c'est une valeur "manuelle" à exclure de ton traitement

    dans ton userform

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if modification then selection.Locked = False
    dans ta macro

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if NOT selection.Locked = False then
    '...MON TRAITEMENT
    end if
    Have a nice day. Oliv'
    Votre réponse est peut être dans mon blog !
    https://www.developpez.net/forums/blogs/191381-oliv-/

  3. #3
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 184
    Billets dans le blog
    53
    Par défaut
    Bonjour,

    Ta macro me semble être un ersatz de l'outil Validation de données d'excel non ?
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 45
    Par défaut re aide !
    Je vous mets le fichier exemple pour que vous compreniez.
    prenons la personne 4 et la 5, qui ne peuvent pas etre absente simultanèment.
    tapez X en C14 et Y en C15. Lors de la saisie du Y une fenetre souvre. si "ok" alors annulation de la saisie de Y. mais je voudrais que faire un forcage de la saisie soit possible apres avoir cliqué sur "validation" et entrer le mot de passe "MDP" et conserver ces modifications.
    est ce possible ?
    pouvez vous me donner des pistes svp ?
    merci pour votre aide !!
    Fichiers attachés Fichiers attachés

  5. #5
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 184
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    J'ai jeté un coup d'oeil à ton classeur et je confirme ce que j'avais pensé lorsque j'ai lu ta question.
    Tu as refait en VBA l'équivalent de l'outil natif d'Excel qui se nomme Validation de données
    J'ai essayé de décoder ce que tu voulais faire mais franchement je touche pas à un truc pareil.
    J'ai d'abord cru que cela venait simplement d'une orthographe de variable parce-que j'ai vu que tu utilises une variable qui se nomme autorisation dans UserForm1 alors que dans le code ci-dessous tu utilises une variable nommée autorise et qui n'apparaît nulle part ailleurs.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
                    If N > 0 And c <> "" Then
                        UserForm1.Show
                            If Autorise = False Then
                            c.Value = ""
                            End If
                    End If
    Et ton problème vient de là concernant l'effacement de la valeur de la cellule (c.Value = "").
    Je me suis donc dit bingo l'erreur est là, je remplace Autorise par Autorisation et on emballe.
    Hélas, trois fois hélas à partir de là la boîte de dialogue boucle donc je ne vais pas plus loin.
    Ce que tu cherches à développer, tu peux le faire avec les outils natifs d'Excel, sauf si le mot de passe est obligatoire, ce qui n'est pas prévu dans la validation de données.
    Certes, je ne dis pas que c'est facile parce-que ton problème demande de connaître des fonctions d'excel un peu plus poussée mais franchement l'étude des fonctions et méthodes du VBA n'est -ce pas encore plus complexe ?
    Petit conseil, étudie mieux les possibilités qu'offre Excel et si vraiment tu veux développer en VBA parce-que c'est une passion ce que je peux parfaitement comprendre, ou si la contrainte est telle que ce n'est pas possible sans le VBA, alors commence par analyser convenablement ce que tu souhaites faire et utilise l'option Explicit qui t'oblige à nommer tes variables ce qui t'aurait permis de voir immédiatement ce problème et sûrement d'autres encore.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  6. #6
    Membre actif
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 45
    Par défaut re
    oui le mot de passe est obligatoire
    mais je ne maitrise pas assez excel et le vba pour bien comprendre les problemes que tu as mis en évidence :s dsl

  7. #7
    Expert confirmé
    Avatar de Oliv-
    Homme Profil pro
    solution provider
    Inscrit en
    Mars 2006
    Messages
    4 093
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : solution provider

    Informations forums :
    Inscription : Mars 2006
    Messages : 4 093
    Billets dans le blog
    20
    Par défaut
    essaye comme cela.

    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 Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
        Dim c As Range, v As Range
        Dim Pers   As String
        Dim Jr     As Integer
        Dim N      As Byte
     
        With Sh
            If Target.Column > 1 And Target.Column < 24 And Autorisation = False Then
                For Each c In Target
                    Jr = c.Column
                    Pers = .Cells(c.Row, 1)
                    For Each v In .Range("A14:A15,A18:A20,A27:A28,A29:A30,A31:A32,A33:A34")
                        If v.Value = Pers Then
                            Application.EnableEvents = False
                            .Cells(v.Row, Jr) = c
                            Application.EnableEvents = True
                        End If
                        N = Verif(Jr)
                        If N > 0 And c <> "" Then
                            If Autorisation = False Then UserForm1.Show
     
                            If Autorisation = False Then
     
                                c.Value = ""
                            End If
                        End If
                    Next v
                Next c
            End If
            Autorisation = False
        End With
    End Sub

    cette partie là doit être identique
    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
     
     
    Option Explicit
     
    Private Sub CommandButton1_Click()
    ' Continuer
        If Me.CommandButton1.Caption = "Validation" Then
            Me.Height = 165
            Me.TextBox1.Top = 64
            Me.CommandButton1.Top = 102
            Me.CommandButton2.Top = 102
            Me.Label1.Caption = "Mot de passe"
            Me.CommandButton1.Caption = "Valider"
            Me.TextBox1.SetFocus
        Else
            If Me.TextBox1 = MotDePasse Then
                Autorisation = True
            End If
            Unload Me
        End If
    End Sub
     
    Private Sub CommandButton2_Click()
    ' Annuler
        Unload Me
    End Sub
     
    Private Sub Label1_Click()
     
    End Sub
     
    Private Sub UserForm_Initialize()
        Autorisation = False
    End Sub
    Have a nice day. Oliv'
    Votre réponse est peut être dans mon blog !
    https://www.developpez.net/forums/blogs/191381-oliv-/

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 24/02/2014, 16h48
  2. [Toutes versions] Protection sur une partie des cellules provoque une erreur à l'éxécution de la macro
    Par Invité dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 31/01/2012, 16h36
  3. Positionner des cellules dans une page
    Par BBe8127 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 01/10/2005, 11h25
  4. Exclure des enregistrements d'une requête
    Par beegees dans le forum Access
    Réponses: 2
    Dernier message: 20/06/2005, 14h01
  5. Colorier le fond des cellules d'une stringrid
    Par ORLIK dans le forum C++Builder
    Réponses: 7
    Dernier message: 09/11/2004, 22h22

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