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 :

Empêcher la modification d'une cellule [XL-2003]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    533
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 533
    Par défaut Empêcher la modification d'une cellule
    Bonjour,

    Pour situer, je suis en plein dans une boucle ... j'écris dans ma cellule N35 (selon la boucle ça peut être O35, P35, Q35, R35) la date système et j'aimerais arriver à bloquer la sélection dans la cellule N39 (selon la boucle ça peut être respectivement O39, P39, Q39, R39). Mais je ne vois pas comment faire... j'ai essayé plusieurs propositions dans les fils de discussion des forums que j'ai pu trouver mais je n'arrive pas à aboutir un code...

    Voici ma boucle :

    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
    If Range("N36").Value = True Then
        nomCel = "N"
        Call RecuperationComplete(typeA, nomCel, formA)
        chbValiderN36.Value = False
        Range("N35").Value = Date
        ******************************
    ElseIf Range("O36").Value = True Then
        nomCel = "O"
        Call RecuperationComplete(typeA, nomCel, formA)
        chbValiderO36.Value = False
        Range("O35").Value = Date
       ******************************
    ElseIf Range("P36").Value = True Then
        nomCel = "P"
        Call RecuperationComplete(typeA, nomCel, formA)
        chbValiderP36.Value = False
        Range("P35").Value = Date
        ******************************
    ElseIf Range("Q36").Value = True Then
        nomCel = "Q"
        Call RecuperationComplete(typeA, nomCel, formA)
        chbValiderQ36.Value = False
        Range("Q35").Value = Date
        ******************************
    ElseIf Range("R36").Value = True Then
        nomCel = "R"
        Call RecuperationComplete(typeA, nomCel, formA)
        chbValiderR36.Value = False
        Range("R35").Value = Date
       ******************************
    End If
    J'aimerai faire mon bloquage de cellule là où j'ai mis les ******************************


    J'espère que j'ai été assez claire...

    Merci d'avance

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 130
    Par défaut
    Salut juju1988 et le forum
    Un extrait de code ne nous aide pas. Le code entier, oui.
    Pour ce que j'en comprends, tu peux essayer avec SelectionChange :
    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
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    On Error GoTo Sel_Erreur
    Dim Plage As Range, Cel As Range
    Application.EnableEvents = False
    If Not (Intersect(Target, Range("N39:R39")) Is Nothing) Then
        For Each Cel In Target
            If Intersect(Cel, Range("N39:R39")) Is Nothing Then
                If Plage Is Nothing Then
                    Set Plage = Cel
                Else
                    Set Plage = Union(Plage, Cel)
                End If
            Else
                If Plage Is Nothing Then
                    Set Plage = Cel.Offset(1, 0)
                Else
                    Set Plage = Union(Plage, Cel.Offset(1, 0))
                End If
            End If
        Next Cel
        Plage.Select
    End If
    Sel_Sortie:
        Application.EnableEvents = True
        Exit Sub
    Sel_Erreur:
        MsgBox Err.Description, vbOKOnly, "erreur n°" & Err.Number
        Resume Sel_Sortie
    End Sub
    Ouais, je sais, c'est complexe, mais faut bien que je m'amause

    Gestion des erreurs : rendue obligatoire (à mon sens), puisqu'on utilise une instruction de portée application : faut remettre la gestion des évènements, mais si excel détecte une erreur.

    Si on sélectionne une cellule de O39 à R39, la sélection saute en O40 à R40. Même si c'est une sélection multiple.
    A+

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Bonjour.

    Qu'entends-tu par "empêcher la modification d'une cellule"? La verrouiller, empêcher la sélection? Permettre la sélection mais pas la modification à la main?
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    533
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 533
    Par défaut
    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
    66
    'Procédure qui valide les colonnes ajoutées par le labo
    'On valide les colonnes qui ont une checkbox cochée
     
    Private Sub Valider_Final_Autre_Click()
     
    Dim typeA As String
    Dim nomCel As String
    Dim formA As Integer
     
    Application.ScreenUpdating = False
     
    Call Ouvre
     
    'Attribution type analyse en fonction de la sélection du traitement
    If Range("E4") = "Régénération" Then
        typeA = "Régé"
    ElseIf Range("E4") = "React" Then
        typeA = "React"
    ElseIf Range("E4") = "Valorisation" Then
        typeA = "Valorisation"
    ElseIf Range("E4") = "Recyclage" Then
        typeA = "Recyclage"
    ElseIf Range("E4") = "Présulfuration" Then
        typeA = "Presulf"
    ElseIf Range("E4") = "Régé + React" Then
        typeA = "Régé + React"
    Else
        typeA = "Régé + Présulf"
    End If
     
    formA = 4
     
    If Range("N36").Value = True Then
        nomCel = "N"
        Call RecuperationComplete(typeA, nomCel, formA)
        chbValiderN36.Value = False
        Range("N35").Value = Date
    ElseIf Range("O36").Value = True Then
        nomCel = "O"
        Call RecuperationComplete(typeA, nomCel, formA)
        chbValiderO36.Value = False
        Range("O35").Value = Date
    ElseIf Range("P36").Value = True Then
        nomCel = "P"
        Call RecuperationComplete(typeA, nomCel, formA)
        chbValiderP36.Value = False
        Range("P35").Value = Date
    ElseIf Range("Q36").Value = True Then
        nomCel = "Q"
        Call RecuperationComplete(typeA, nomCel, formA)
        chbValiderQ36.Value = False
        Range("Q35").Value = Date
    ElseIf Range("R36").Value = True Then
        nomCel = "R"
        Call RecuperationComplete(typeA, nomCel, formA)
        chbValiderR36.Value = False
        Range("R35").Value = Date
    End If
     
    Windows("exemple.xls").Activate
    ActiveWorkbook.Save
    ActiveWorkbook.Close
     
    Application.ScreenUpdating = True
     
    End Sub
    Voici mon code en entier...

    Merci pour ton aide Gorfael je vais essayer ta solution et je vous tient au courant.

    Pierre : Dans la cellule N39 ... l'utilisateur a la possibilité de sélectionner un intitulé de colonne, et j'aimerai que ce ne soit pas possible... qu'il ne puisse pas changer le contenu de cette cellule de quelque façon que ce soit...

    J'ai mis en place ton code qui fonctionne à peu près... En effet si c'est la cellule N36 j'aimerai que seule la cellule N39 soit bloquée... et réciproquement pour O36, P36, Q36, R36... Et là cela me bloque tout d'un coup...
    Pourrais tu m'expliquer un peu ton code... Je débute en vb et j'ai un peu de mal à comprendre le code des autres lol...

    Petite précision ... Ce code doit fonctionner quand j'ai une date en N35 ... et réciproquement O35, P35, Q35, R35...

  5. #5
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 130
    Par défaut
    Salut juju1988 et le forum
    Il faut garder à l'esprit que si le demandeur connaît son besoin, le dépanneur ne peut se fier qu'à ce qui est inscrit dans les postes. Et que s'il y a deux interprétations possibles, la loi de Murphy nous rappelle que ce ne sera pas la bonne intuition qui prévaudra.

    Ce que je crois comprendre :
    Pour les colonnes O à R, si la ligne 35 contient une date, il faut interdire la sélection, colonne par colonne de la ligne 39.
    A+

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    533
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 533
    Par défaut
    Oui je suis désolée c'était la fin de la journée la semaine dernière je n'avais plus les yeux en face des trous et n'ai pas été assez claire désolée...

    Oui c'est ça si c'est en N35 qu'il y'a une date il faut interdire la sélection/modification en N39
    Si c'est en O35 qu'il y a une date il faut interdire la sélection/modification en O39...
    Et ainsi de suite pour P35/P39, Q35/Q39, R35/R39...

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

Discussions similaires

  1. Empêcher la modification d'une colonne
    Par strikerm59 dans le forum SQL
    Réponses: 2
    Dernier message: 14/12/2007, 10h12
  2. Empêcher la modification d'une table
    Par Kloun dans le forum Sécurité
    Réponses: 3
    Dernier message: 16/10/2007, 23h27
  3. Code pour empêcher la modifcation d'une cellule
    Par gaefor dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 17/08/2007, 06h55
  4. [OpenOffice][Tableur] [macro] Evenements : modif d'une cellule dans calc
    Par Eruil dans le forum OpenOffice & LibreOffice
    Réponses: 1
    Dernier message: 23/04/2007, 17h26
  5. Stringgrid: empêcher d'écrire dans une cellule
    Par didier17062006 dans le forum C++Builder
    Réponses: 1
    Dernier message: 12/11/2006, 16h16

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