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 :

Verrouiller une plaque de cellule dynamique dans un classeur partagé


Sujet :

Macros et VBA Excel

Vue hybride

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

    Informations forums :
    Inscription : Avril 2005
    Messages : 196
    Par défaut Verrouiller une plaque de cellule dynamique dans un classeur partagé
    Bonjour,

    Je voudrais verrouiller un plage de cellule dynamique dans une feuille d'un classeur partagé.

    dans ce classeur j'ajoute des enregistrements ( une ligne = 1 enregistrement de 5 cellules ( A1,B1,C1,D1,E1) )

    Je voudrais que tout les les enregistrements ajouté soit verrouillé quand on active cette feuille.

    J'ai testé la macro ci-dessous, mais cela ne fonctionne plus en mode partagé. Est-ce que je souhaite faire est possible ?

    J'ai essayé aussi de passer par : révision\permettre la modification des plages \ nouvelle \ en essaynt de mettre une formule avec DECALER et NBVAL mais excel ne semble pas accepter ces formules a cet endroit.


    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
    Dim d As Integer
     
    d = Worksheets("DATA").Range("A65536").End(xlUp).Row
     
     
    ActiveSheet.Unprotect
        Cells.Select
        Selection.Locked = False
        Selection.FormulaHidden = False
     
        Range("A1:E" & d).Select
        Selection.Locked = True
        Selection.FormulaHidden = False
     ActiveSheet.Protect DrawingObjects:=False, Contents:=True, Scenarios:= _
            False, AllowFormattingCells:=True

  2. #2
    Membre Expert
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Septembre 2013
    Messages
    783
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Septembre 2013
    Messages : 783
    Par défaut
    Bonjour,

    Sauf erreur, vous ne pouvez pas modifier la structure d'un classeur partagé ...... donc le code du type
    doit planter je pense ....

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    196
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 196
    Par défaut
    Bonjour,

    C'est tout à fait, ca ne fonctionne pas avec ce type de code. Je ne sais pas en classeur partagé c'est possible du coup ....

  4. #4
    Membre Expert
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Septembre 2013
    Messages
    783
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Septembre 2013
    Messages : 783
    Par défaut
    Bonjour,

    Si partager un classeur se limite à des saisies de données, ça peut le faire.
    Dès que vous avez quelque-chose de plus croustillant (filtres, création de feuille, format conditionnel, protection, ajout de noms....), ça plante ... et nécessite de repasser le classeur en mode exclusif quitte à le remettre en mode 'partagé' après

    Je vous joints quelques exemples:

    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
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    Sub SHOW_WBK_SHARE_MOD()
    '=============================================================================
    ' Show this workbook shared mode
     
        Subname = "SHOW_WBK_SHARE_MOD"
     
        Dim Msgprompt As String, usr_status As Variant, cnt_usr As Integer
     
        ThisWorkbook.Activate
     
     
        usr_status = GET_WBK_USER(ThisWorkbook)
        cnt_usr = UBound(usr_status, 1)
     
        Msgprompt = Msgprompt & cnt_usr & " user(s) is/are sharing this workbook" & vbCrLf
        Msgprompt = Msgprompt & vbCrLf & DISPL_WBK_USR
     
        Msgprompt = "Workbook: " & ThisWorkbook.Name & " share mode: " & _
        ThisWorkbook.MultiUserEditing & vbCrLf & Msgprompt
        Msgbox Msgprompt, vbInformation, Subname
     
    End Sub
     
    Function DISPL_WBK_USR() As String
    '=============================================================================
    ' Display the users sharing the workbook informations
     
        Funcname = "DISPL_WBK_USR"
     
        Dim usr_status As Variant
        Dim Msgprompt As String, Shartyp As String
        Dim cnt_usr As Integer, RevNumber As Integer, colnum As Integer
     
        usr_status = GET_WBK_USER(ThisWorkbook)
     
        For cnt_usr = 0 To UBound(usr_status, 1)
     
            For colnum = 0 To 3
                Msgprompt = Msgprompt & usr_status(cnt_usr, colnum) & vbTab
            Next colnum
            Msgprompt = Msgprompt & vbCrLf
     
        Next cnt_usr
     
        cnt_usr = cnt_usr - 1
     
        If ThisWorkbook.RevisionNumber >= 1 Then Msgprompt = Msgprompt & vbCrLf & "Rev number: " & ThisWorkbook.RevisionNumber
     
        DISPL_WBK_USR = Msgprompt
     
    End Function
    Function GET_WBK_USER(Wbk As Workbook) As Variant
    '=============================================================================
    ' List the users sharing the workbook
     
        Funcname = "GET_WBK_USER"
     
        Dim Shartyp As String, cnt_usr As Integer, rownum As Integer
        Dim usr_status() As Variant, users As Variant
     
    ' Get the users informations
     
        users = Wbk.UserStatus
        ReDim usr_status(UBound(users, 1), 3)
     
        usr_status(0, 0) = "User name"
        usr_status(0, 1) = "Date"
        usr_status(0, 2) = "Time"
        usr_status(0, 3) = "Mode"
     
     
        For cnt_usr = 1 To UBound(users, 1)
            Select Case users(cnt_usr, 3)
                Case 1
                    Shartyp = "Exclusive"
                Case 2
                    Shartyp = "Shared"
            End Select
     
                ' Assign to the array for the return
            usr_status(cnt_usr, 0) = users(cnt_usr, 1)
            usr_status(cnt_usr, 1) = DateValue(users(cnt_usr, 2))
            usr_status(cnt_usr, 2) = TimeValue(users(cnt_usr, 2))
            usr_status(cnt_usr, 3) = Shartyp
     
        Next cnt_usr
     
        GET_WBK_USER = usr_status
     
    End Function

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    196
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 196
    Par défaut
    Bonjour,

    C'est exactement un çà, cela se résume juste à de la saisie de donnée dans ce classeur (WBDATA), le seule code existant dans ce classeur est pour la protection des données saisies.
    J'ai volontairement simplifié au maximum ce classeur.
    Merci pour les exemples VBA de partage/départage.

    A la lecture du code, si j'ai bien tout saisi, je me demande si un conflit ne pourrait pas exister, en cas de saisie quasi-simultané avec le classeur qui repasse en mode exclusif ?
    Si je poursuis dans ce raisonnement, comme j'entre des données dans ce classeur (WBDATA), via autre classeur (WBFORM) avec du code VBA, il faudrait que je gère dans le code du classeur (WBFORM) , le fait que celui-ci ne puisse pas faire l'ajout VBA dans le classeur ( WBDATA) , et donc que je ré exécute celui-ci jusqu'à le classeur (WBFORM) reprenne la main sur ( WBDATA),

  6. #6
    Membre Expert
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Septembre 2013
    Messages
    783
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Septembre 2013
    Messages : 783
    Par défaut
    en cas de saisie quasi-simultané avec le classeur qui repasse en mode exclusif
    => Oui en théorie, sauf si vous vérifiez avant que vous êtes le seul utilisateur (par exemple avec la fonction DISPL_WBK_USR à adapter)

    (...) classeur (WBFORM) reprenne la main sur ( WBDATA),
    => C'est à vous de voir, mais si les deux classeurs sont en mode partagés, ça va complexifier un peu.

    Dans tous les cas, vous pouvez tester pour vérifier si le nombre d'utilisateur est > 1

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

Discussions similaires

  1. [XL-2007] Sélection d'une plage de cellule dynamiquement
    Par patm dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 22/03/2011, 11h03
  2. [XL-2003] Insertion d'une plage de Cellule excel dans un email
    Par johnfluo dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 23/12/2009, 18h15
  3. Réponses: 2
    Dernier message: 13/10/2008, 16h07
  4. Coller une plage de cellules Excel dans Word
    Par ouskel'n'or dans le forum Contribuez
    Réponses: 0
    Dernier message: 21/09/2007, 00h32
  5. [VBA-E]Instancier une plage de cellules prises dans plusieurs feuilles
    Par ouskel'n'or dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 14/03/2007, 12h08

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