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 :

Verrouillage cellules après saisie


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    autre
    Inscrit en
    Février 2013
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : autre
    Secteur : Services à domicile

    Informations forums :
    Inscription : Février 2013
    Messages : 23
    Par défaut Verrouillage cellules après saisie
    Bonjour,

    je fais un tableau qui sera utilisé par plusieurs personnes, afin d'éviter tout effacement involontaire, j'aimerai qu'une ligne complète soit verrouillée après la saisie d'une date dans une des cellules.

    En gros, mon utilisateurs remplit l'ensemble des informations, il termine en indiquant la date de son enregistrement ce qui verrouille la ligne complète pour éviter toute nouvelle saisie dessus.

    Est-ce possible?

  2. #2
    Membre éprouvé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2007
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 896
    Par défaut
    Bonjour,

    On va faire plus général : si une cellule contient une formule elle n'est pas déverrouillée : (à adapter selon tes besoins)

    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
     
    Private Sub Worksheet_Change(ByVal Target As Range) 
        Const nbcol As Long = 10 
        Dim col As Long 
        'activation protection générale 
        If Target = [A1] And [A1] = "" Then ActiveSheet.Unprotect 
        ' protection des lignes 
        If Target.Column = 1 And Target.Row > 1 Then 
            ActiveSheet.Unprotect 
            If LCase(Target) = "x" Then 
                Target.Offset(0, 1).Resize(1, nbcol).Locked = True 
            Else 
                For col = 1 To nbcol 
                    If Left(Target.Offset(0, col).Formula, 1) <> "=" Then Target.Offset(0, col).Locked = False 
                Next col 
            End If 
        End If 
        If [A1] = "x" Then ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True 
    End Sub
    Testes ce code et tiens nous au courant

  3. #3
    Membre averti
    Femme Profil pro
    autre
    Inscrit en
    Février 2013
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : autre
    Secteur : Services à domicile

    Informations forums :
    Inscription : Février 2013
    Messages : 23
    Par défaut
    Merci pour cette réponse.

    J'avoue mon incompétence complète à adapter ce code à ma situation. Je débute totalement et suis perdue.

    Puis-je mettre en pièce jointe le tableau pour une meilleure vision?

  4. #4
    Membre éprouvé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2007
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 896
    Par défaut
    Bien au contraire, avec un fichier joint c'est plus facile.

  5. #5
    Membre averti
    Femme Profil pro
    autre
    Inscrit en
    Février 2013
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : autre
    Secteur : Services à domicile

    Informations forums :
    Inscription : Février 2013
    Messages : 23
    Par défaut
    Le voici donc en pièce jointe. je voudrais pouvoir remplir chacune de mes cellules et à partir du moment où une date est saisie dans la cellule S, la ligne est verrouillée. Possible?

    Merci beaucoup.
    Fichiers attachés Fichiers attachés

  6. #6
    Membre émérite Avatar de keygen08
    Homme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations forums :
    Inscription : Octobre 2012
    Messages : 545
    Par défaut
    Bonjour

    au plus simple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub Worksheet_Change(ByVal Target As Range)
    ActiveSheet.Unprotect
        If Range("s" & Target.Row).Text <> "" Then
            Target.EntireRow.Locked = True
    ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
        End If
    End Sub
    Il faut savoir que la protection des cellule n'est effective que si la feuille elle meme est protegée.
    J'ai donc sur ton fichier, déprotéger toutes les cellules, reproteger les lignes qui ne doivent pas etre modifié.
    Par la suite, losque je modifie la valeur de cellule S, la macro s'applique est verrouille la ligne qui vient d'être écrite.
    Je ne joint pas le fichier car je pense que @NEC vas te soigner cela au petit oignon.

  7. #7
    Membre averti
    Femme Profil pro
    autre
    Inscrit en
    Février 2013
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : autre
    Secteur : Services à domicile

    Informations forums :
    Inscription : Février 2013
    Messages : 23
    Par défaut
    c'est gentil merci. J'aime comprendre et apprendre, alors je teste ça quand même de mon côté^^

    Je viens de tester le code, c'est exactement ce que je voulais et ça fonctionne à merveille!! Merci!

  8. #8
    Membre éprouvé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2007
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 896
    Par défaut
    Voilà, chez moi ça fonctionne.
    Dis moi
    Fichiers attachés Fichiers attachés

  9. #9
    Membre averti
    Femme Profil pro
    autre
    Inscrit en
    Février 2013
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : autre
    Secteur : Services à domicile

    Informations forums :
    Inscription : Février 2013
    Messages : 23
    Par défaut
    j'ai toujours la même erreur: espace pile insuffisant.

  10. #10
    Membre éprouvé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2007
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 896
    Par défaut
    Je n'ai pas ce message. Explique moi dans quelle cellule cela se produit

  11. #11
    Membre éprouvé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2007
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 896
    Par défaut
    La pile est une zone de mémoire dont la taille augmente ou diminue de manière dynamique en fonction des besoins du programme en cours d'exécution. Ses limites ont été dépassées.

    Pour corriger cette erreur
    1.Vérifiez que les procédures ne sont pas imbriquées trop profondément.

    2.Assurez-vous que les procédures récursives se terminent correctement.

    3.Si les variables locales requièrent davantage d'espace que la quantité disponible, essayez de déclarer certaines variables au niveau du module. Vous pouvez également déclarer toutes les variables de la procédure comme statiques en faisant précéder le mot clé Property, Sub ou Function de Static. Vous pouvez aussi utiliser l'instruction Static pour déclarer des variables statiques individuelles à l'intérieur de procédures.

    4.Étant donné que les chaînes de longueur fixe utilisent davantage d'espace de pile que les chaînes de longueur variable, redéfinissez certaines chaînes de longueur fixe en chaînes de longueur variable. Vous pouvez également définir la chaîne au niveau du module où elle ne requiert aucun espace de pile.

    5.Vérifiez le nombre d'appels de fonctions DoEvents imbriquées à l'aide de la boîte de dialogue Calls pour afficher les procédures actives sur la pile.

    6.Vérifiez que vous n'avez provoqué aucune cascade d'événements en déclenchant un événement qui appelle une procédure événementielle qui se trouve déjà sur la pile. Une cascade d'événements est similaire à un appel de procédure récursive inachevé, mais elle est moins évidente, compte tenu que l'appel est effectué par Visual Basic et qu'il ne s'agit donc pas d'un appel explicite dans le code. Utilisez la boîte de dialogue Calls pour afficher les procédures actives sur la pile.


    Désolé, mais je dois partir. Je vais essayer de suivre cette conversation de chez moi après ma réunion.

  12. #12
    Membre averti
    Femme Profil pro
    autre
    Inscrit en
    Février 2013
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : autre
    Secteur : Services à domicile

    Informations forums :
    Inscription : Février 2013
    Messages : 23
    Par défaut
    merci pour tout. Je vais tenter de voir ça.

Discussions similaires

  1. [XL-2003] verrouillage cellule après saisie
    Par pythfred dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 03/04/2012, 08h54
  2. [JTable] récupérer valeur cellule après saisie
    Par jerome71300 dans le forum Composants
    Réponses: 29
    Dernier message: 11/08/2008, 08h24
  3. verrouillage d'un champ après saisie
    Par bourguignon21 dans le forum VBA Access
    Réponses: 2
    Dernier message: 16/07/2007, 10h10
  4. Réponses: 11
    Dernier message: 17/03/2007, 21h17
  5. [VBA-E] afficher des données apres saisie dans cellule
    Par user0505 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 14/04/2006, 15h04

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