Code VBA pour autoriser à coller uniquement les valeurs

Bonjour à tous,

Je suis en train de faire un facturier pour de la logistique, 60 dossiers, et j'ai une demande pour que mes chargé de dossier ne détruise pas les mises en page.

Y-at-il une possibilité à mettre dans le code VBA des onglet pour que la fonction copié/collé ne colle que les valeurs et surtout pas la mis en page?

Merci pour vos retour

RQ

bonjour, tu veux dire que les formats ne doivent pas etre copiés ? Anne

Bonsoir Rquantin,

A mon avis non et cela manque. On peut faire pas mal de choses mais pas protéger le format et laisse accès à la valeur.

Mais, comme pratiquement presque toujours avec Excel, il y a moyen de contourner l'obstacle.

Je te propose une façon de faire en annexe.

En fait je te propose :

1 Protéger toutes les cellules de la feuille (en principe c'est fait à l'origine sauf si tu as déprotégé

2 Déprotéger avec Format/Protection toutes les cellules où tu dois encoder (dans l'exemple B2:B20)

3 Tu protèges la feuille dans Révision/Protéger la feuille et tu coches ce qui est nécessaire

3 Tu encodes dans la plage B2:B20 (qui est déprotégée)

4 Tu restes dans la cellule que tu veux copier et tu cliques sur le bouton Copie

5 Tu te positionnes dans la cellule où tu désires n'importe où dans la feuille (j'ai formaté la cellule E7 en jaune avec encadrement et caractères gras pour montré que le format ne sera pas affecté par le collage donc essaies avec B2 (copie) et E7 (coller) et puis tu essaieras avec d'autres cellules)

6 tu cliques sur le bouton Coller

Et voilà : c'est fait : tu peux copier et coller sans affecter le format de la cellule réceptrice.

Attention : interdit d'utiliser la procédure habituelle copier/coller car comme la feuille est protégée, la procédure échouera : tu n'auras d'ailleurs pas accès à "Copier/coller".

Si tu regardes les petits VBA qui effectue le travail, tu constateras que je n'utilise pas la procédure copier/coller mais je me contente de sauver le contenu dans une variable Public ; de déprotéger la feuille ; de charger le contenu de la variable dans la cellule active et enfin de protéger à nouveau la feuille.

Cela sort des sentiers battus mais c'est efficace et effectue le job demandé

N'hésites pas à poser les questions nécessaires.

Bonne continuation

Chris

8copie-coller.xlsm (18.72 Ko)

Bonjour

Merci pour vos réponses, mais voici ma difficulté :

Les chargé de dossier reçoivent par mail, ou autres des données, les copies, puis vont dans le fichier de facturation, puis dans les case correspondantes (l'onglet est verrouillé mais pas les cellules ou ils mettent les données), colle les données.

Quelquefois, la mis en page est collé avec ce qui modifie le dossier de facturation.

C'est ce que j'aimerais empêcher.

Merci,

Hello,

juste une idée,

A l'ouverture du fichier, conserver une copie de la feuille, à la fermeture (juste avant en fait) copier/coller la mise en forme de la feuille copié sur la feuille modifiée.

Bonjour Rquantin et Nain porte Quoi,

Je te propose d'ouvrir un onglet de travail complémentaire sans protection et l'opérateur copie / colle son document d'origine dans ce nouvel onglet et puis il effectue les transferts de cet onglet vers l'onglet facturation avec la solution que je te propose et tu n'aura plus de problème de mise en forme.

Bonne continuation

Chris

Bonjour à tous,

Si c'est bien ce que j'ai compris, une autre solution consisterait à désactiver les menus contextuels, et obliger les utilisateurs de passer par un bouton qui pilotera le copier/coller.

A voir si cette solution vous intéresse...

Bonjour,

Merci pour vos retours mais non ça va être trop "laborieux" pour eux ! j'au 60 fichiers de facturation et 15 chargé de dossiers ! donc ce sera vraiment trop lourd à mettre en place !

j'au 60 fichiers de facturation et 15 chargé de dossiers ! donc ce sera vraiment trop lourd à mettre en place !

Ok pour cela. Une autre solution consisterait à vérifier lors de l'enregistrement si le format des cellules des feuilles à été modifier, si oui nous replaçons le bon format. Cette manipulation peu-être faite juste avant la sauvegarde, cela risque d'être lent. Sinon pas de test juste avant la sauvegarde, on applique le bon format aux feuille que l'on veux, c'est simple rapide et invisible pour l'utilisateur.

@jean-paul c'est à peu près ce que je proposais un peu plus haut, non ?

@Rquantin, en fait au lieu de former et d'expliquer comment utiliser un outils, vous préférez laisser les utilisateurs dans leurs ignorances et contournez le problème.

Personnellement je trouve ça dommage de ne pas valoriser les compétences

@jean-paul c'est à peu près ce que je proposais un peu plus haut, non ?

A peut près.... Je ne lis pas toujours toutes les réponses.

Bonjour à tous,

Rquantin : pourquoi dis tu que c'est trop lourd ? Je parle de ma proposition :

1 installer un onglet complémentaire dans chacun de tes classeurs ne doit se faire qu'une seule fois et c'est extrêmement léger comme opération.

2 copier les données extérieures en une fois dans le nouvel onglet est une opération simple et rapide

3 partir de cet onglet en utilisant les boutons est identique à ce qu'ils font actuellement avec les copier / coller

Donc je ne vois vraiment pas en quoi c'est lourd sauf qu'il faudra expliquer la procédure à 15 personnes... cela je veux bien admettre que cela demandera un petit effort mais ce n'est qu'une fois.

Sinon, il n'y a pas de miracle, Excel n'a pas d'outil qui exécute ce que tu demandes.

Bonne continuation

Chris

Bonjour

A faire avant :

proteger toutes les feuilles où il faut copier avec le meme mot de passe

plan macro :

(comme deproteger une feuille vide le presse papier, il faut contourner ce pb)

1. demande la plage a copier (meme ds un autre classeur)

2. demander la plage de destination

3. deproteger

4.ecrire

5.reproteger

Sub CollerDepuisSourceVersFeuilleProtegee_Multi()

    Dim R As Range          ' plage source
    Dim c As Range          ' cellule destination
    Dim wsDest As Worksheet ' feuille destination
    Dim nomFeuille As String

    ' 1. Demander la plage source (sur n'importe quelle feuille)
    On Error Resume Next
    Set R = Application.InputBox( _
                Prompt:="Sélectionnez la plage SOURCE (sur n'importe quelle feuille ou classeur), puis validez.", _
                Title:="Plage source", _
                Type:=8)
    On Error GoTo 0

    If R Is Nothing Then
        MsgBox "Aucune plage source sélectionnée.", vbExclamation
        Exit Sub
    End If

    ' 2. Demander la cellule de destination (sur une des feuilles FeuilDest1 à FeuilDest20)
    On Error Resume Next
    Set c = Application.InputBox( _
                Prompt:="Sélectionnez la cellule DESTINATION sur la feuille FeuilDest1 à FeuilDest3, puis validez.", _
                Title:="Cellule destination", _
                Type:=8)
    On Error GoTo 0

    If c Is Nothing Then
        MsgBox "Aucune cellule destination sélectionnée.", vbExclamation
        Exit Sub
    End If

    ' 3. Identifier la feuille destination et la déprotéger
    Set wsDest = c.Worksheet

    ' Vérifier que la feuille est bien une feuille autorisée
    If wsDest.Name Like "FeuilDest#" Or wsDest.Name Like "FeuilDest##" Then
        ' OK
    Else
        MsgBox "La feuille '" & wsDest.Name & "' n'est pas une feuille destination autorisée.", vbCritical
        Exit Sub
    End If

    wsDest.Unprotect "mdp"
    wsDest.Activate

    ' 4. Coller les valeurs à partir de la cellule destination
    c.Resize(R.Rows.Count, R.Columns.Count).Value = R.Value

    ' 5. Reprotéger
    wsDest.Protect "mdp"

    MsgBox "Collage terminé sur " & wsDest.Name & ".", vbInformation

End Sub
Rechercher des sujets similaires à "code vba autoriser coller uniquement valeurs"