N'autoriser que le copier-coller par valeur sur un onglet

Lentillelocale

XLDnaute Nouveau
Bonjour à tous
Dans un onglet Sheet excel protégé où des cellules sont verrouillées et d'autres pas, j'aimerai que les cellules non verrouillées, qui ont une mise en forme prédéfinies (format, couleur, formats conditionnels, validation, etc) conservent leur format et que seules leurs valeurs soient modifiables soit par saisie directe soit par copier-coller par valeur avec respect des domaines de valeur indiqués dans Validation.

La solution doit fonctionner quel que soit le paramétrage d'excel de l'utilisateur.

J'avais joins un 1er fichier test pour mieux me faire comprendre : il a été remplacé depuis par la version 3 donnée dans mon post 2

Comment n'autoriser que le copier-coller valeur afin de conserver la mise en forme, et les tests de Domaine de valeurs ?

Grace à Kiki29 qui répondait à une question similaire le 18/06/2008 sur un autre forum


Je croyais avoir trouvé pour partie réponse à mon propre problème ce Samedi 01/11/2008 à 16 heures
Voir pièce jointe du 3ème post.

Mais j'aurai besoin de votre aide pour résoudre les points suivants à moins que vous n'ayez une autre idée.

Merci à celui ou ceux qui voudront bien s'y intéresser.

1) les menus qui restent grisés. Voir 3ème post pour mieux comprendre
2) Comment faire pour vérifier que le collage respecte bien le domaine de valeur ?
Si la valeur d'une des zones en copie, ne respecte pas le domaine de valeur défini dans Validation, alors
il ne faut pas coller mais afficher un message indiquant la zone concernée

Merci beaucoup pour votre aide.
 
Dernière édition:

Lentillelocale

XLDnaute Nouveau
Re : N'autoriser que le copier-coller par valeur sur un onglet

J'avance mais malheureusement tout seul.
Cela fonctionne comme je voulais

Reste un seul point à trouver (résolu depuis ce soir dimanche 2/11/2008 22h30) :

Au niveau de mon Copier Coller par Valeur, est-il possible avant de coller de vérifier que la valeur respecte le domaine de valeur ?
Et ce pour chaque cellule … Si au moins 1 cellule du copier/coller valeur est hors du domaine alors ne pas copier et afficher une boîte de dialogue
indiquant les désaccords . --> peut-être par Sendkey ? Enter

Avez-vous une idée pour ce point ?
Voir fichier joint

Je pense que cela pourra intéresser d'autres personnes de pouvoir gérer les copier coller tout en respectant la mise en forme et les domaines de valeur. Non ?

Je clôture ce sujet qui n'a guère intéressé ce forum, à part moi et pour cause.
Cela étant, j'ai terminé ce que je voulais faire en ajoutant du code là où je pensais que la chose devait se passer pour tester le respect du domaine de valeurs de la ou les cellules collées. Le code est le suivant et le fichier définitif est en pièce jointe de ce post. Je clôture ce sujet de discussion.
Mais si vous avez des remarques, des améliorations à apporter, des erreurs détectées, merci de me le faire savoir.
Bonne soirée à tout le Forum

Code:
Public Sub DoPaste()
    Debug.Print "DoPaste Ctrl V"
    On Error Resume Next


    If Application.CutCopyMode And Not mRngSource Is Nothing Then
        Selection.PasteSpecial xlValues
        
        Debug.Print mRngSource.Address ' Adresses départ Source ex : $F$15:$G$16
        Debug.Print Selection.Address  ' Adresses destination   ex : $H$19:$I$20
        Debug.Print Selection.Row
        Debug.Print Selection.Column
        ' Comment vérifier que les données respectent le domaine de valeurs ?
        MonAdresse = Selection.Address
        Pos1 = InStr(1, MonAdresse, "$")
        Pos2 = InStr(Pos1 + 1, MonAdresse, "$")
        ColDebDest = Lettre2NumCol(Mid(MonAdresse, Pos1 + 1, Pos2 - Pos1 - 1))
        LigneDebDest = Mid(MonAdresse, Pos2 + 1)
        
        Pos3 = InStr(Pos2 + 1, MonAdresse, ":")
        If Pos3 = 0 Then
            ' 1 seule cellule
            LigneDebDest = Mid(MonAdresse, Pos2 + 1)
            ColFinDest = ColDebDest
            LigneFinDest = LigneDebDest
        Else
            ' Plusieurs cellules dans la Sélection
            Pos4 = InStr(Pos2 + 1, MonAdresse, "$")
            Pos5 = InStr(Pos4 + 1, MonAdresse, "$")
            ColFinDest = Lettre2NumCol(Mid(MonAdresse, Pos4 + 1, Pos5 - Pos4 - 1))
            LigneDebDest = Mid(MonAdresse, Pos2 + 1, Pos4 - Pos2 - 2)
            LigneFinDest = Mid(MonAdresse, Pos5 + 1)
        End If
        OK = True
        For MaCol = ColDebDest To ColFinDest
            For MaLig = LigneDebDest To LigneFinDest
                If Cells(MaLig, MaCol).Validation.Value = False And Cells(MaLig, MaCol).Validation.AlertStyle = xlValidAlertStop Then
                    MonTitre = Cells(MaLig, MaCol).Validation.ErrorTitle
                    MonMessage = "Le contenu cellule " & NumCol2Lettre(MaCol) & MaLig & " n'est pas conforme au domaine de valeurs."
                    MonMessage = MonMessage & vbCrLf & "Merci de corriger maintenant." & vbCrLf & vbCrLf
                    MonMessage = MonMessage & Cells(MaLig, MaCol).Validation.ErrorMessage
                    Rep = InputBox(MonMessage, MonTitre)
                    Cells(MaLig, MaCol) = Rep
                    MaCol = ColDebDest     ' on boucle tant que ce n'est pas bon
                    MaLig = LigneDebDest - 1
                End If
            Next MaLig
        Next MaCol
        
        'Range(Selection.Address).Select
        'SendKeys "{ENTER}", True
        
        If mbCut Then mRngSource.ClearContents
        
        Application.CutCopyMode = False
        
    Else
        ActiveSheet.Paste
    End If
End Sub
 

Pièces jointes

  • Test 3 pour limiter copier-coller à valeur.zip
    37.1 KB · Affichages: 98
Dernière édition:

yanoa24

XLDnaute Nouveau
Re : N'autoriser que le copier-coller par valeur sur un onglet

Bonjour,
ce post m'intéresse.
moi aussi je cherche la même chose (ou presque) que toi.
en effet, j'ai un classeur assez important, destiné à de multiples utilisateurs.

je souhaite qu'ils ne puissent faire que des "copier" et "collage spécial valeur", c'est à dire pour éviter qu'ils ne déplacent des cellules, etc..... (limitatio à mon classeur).
est-ce possible que tu m'aide dans ma recherche, n'étant pas une star du VBA.

Je te remercie d'avance si tu peux m'y aider.

YANN
 

Discussions similaires

Statistiques des forums

Discussions
312 505
Messages
2 089 070
Membres
104 016
dernier inscrit
Mokson