Copier/coller spéciaux avec private sub

Bonjour à tous,

Je suis nouveau sur le forum (je fais de l'Excel et du VBA depuis peu) et j'espère que je vais réussir à être clair dans ma question.

Alors, j'ai un problème qui est courant sur Excel et qu'on peut éviter si on s'y connais un peu. Ce qui n'est pas le cas de la personne pour qui je fais ce fichier .

Le problème est le suivant : quand on copie/colle ou qu'on coupe/colle des cellules dans Excel, cela engendre des problèmes de référence dans les formules qui utilisent ces cellules (logique). Pour éviter ce problème je suis en train de faire un programme en VBA composé d'un "Private Sub Worksheet_change" pour que le programme s’exécute automatiquement.

Le but du programme est que lorsque l'utilisateur va copier ou couper des cellules, seules les valeurs des cellules serons collées.

On peut voir le programme ci-dessous :

Sub CopieColle()
Dim CelluleSélectionné As String
CelluleSélectionné = Selection.Address
If Range("CelluleSélectionné").Copy Then
PasteSpecial Paste:=xlValues
ElseIf Range("CelluleSélectionné").Cut Then
PasteSpecial Paste:=xlValues
End If
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Application.Intersect(Target, Range("B4:D500"), Range("G4:I4")) Is Nothing Then
Call CopieColle
End If
End Sub

Donc voilà, ça ne fonctionne pas et je n'arrives pas à voir d'où vient le problème. Comme je l'ai dis, je fait du VBA depuis peu et peut être que je fais des erreurs de débutant.

Si vous pouviez m'aider ça serait super gentil

Sub CopieColle()

Dim CelluleSélectionné As String

CelluleSélectionné = Selection.Address

If Range(CelluleSélectionné).Copy Then

ActiveSheet.Range("o25").Select

ActiveSheet.PasteSpecial 'Paste:=xlValues

ElseIf Range("CelluleSélectionné").Cut Then

ActiveSheet.Range("o25").Select

ActiveSheet.PasteSpecial 'Paste:=xlValues

End If

End Sub

Bonjour,

Merci pour votre réponse.

Votre solution ne fonctionne pas car il faut spécifier une case de destination du collage, or je ne sais pas dans quelles cellule va coller l'utilisateur.

J'ai décidé de changer le programme et de le faire d'une manière beaucoup plus simple :

Private Sub Worksheet_Change(ByVal Target As Range)

If Not Application.Intersect(Target, ActiveSheet.Range("B4:D500"), ActiveSheet.Range("G4:I500")) Is Nothing Then

ActiveSheet.PasteSpecial Paste:=xlValues

End If
End Sub

Cela ne fonctionne toujours pas, peut être que j'utilise mal le "private Sub". Quelqu'un pour m'aider svp ?

Bonjour FloC18,

En retour un fichier exemple à adapter à ta demande. Voir notes en rouge sur la 1ière feuille.

Si besoin, revient sur ce sujet.

Bons tests, bonne continuation.

23coupercopier.xlsm (26.30 Ko)

Bonjour,

Merci pour ta réponse, j'ai essayé ta solution et elle peut fonctionner . Elle ne correspond pas exactement à ce que je voulais mais je vais essayer de l'adapter.

En tout cas merci pour l'aide!

Bonjour FloC18,

Attention à l'adaptation. Les procédures événementielles lors des opérations Copy et Cut, surtout cette dernière engendrent pas mal de blocage.

Bonjour X cellus,

Oui j'ai vu cela, la solution a fait bloqué mon Excel . Merci quand même pour ton aide.

Je n'arrive pour le moment pas à trouver de solution à ce problème. Je trouve ça dommage que l'on ne puisse pas indiquer dans les paramètres d'Excel que l'on veuille uniquement coller les cellules. Je pense être loin d'être le seul à vouloir uniquement coller le contenu des cellules

Bonjour FloC18,

mais je vais essayer de l'adapter.

Si tu utilises le fichier fourni sans modifier son code tu pourras toujours Copier/coller ou Couper/coller par clic-droit.

Avec le mini-menu à 2 choix qui s'affiche.

Rechercher des sujets similaires à "copier coller speciaux private sub"