FAQ Excel

FAQ ExcelConsultez toutes les FAQ
Nombre d'auteurs : 46, nombre de questions : 845, dernière mise à jour : 30 mars 2022
Sommaire→Le presse papier- Comment empêcher l'affichage systématique du volet Presse-papiers ?
- Comment copier une feuille dans un nouveau classeur ?
- Comment copier une feuille dans un nouveau classeur, sans son code VBA ?
- Comment fermer le mode couper/copier ?
- Comment vider le presse papier ?
- Comment récupérer le contenu du presse papier dans une variable ?
- Pourquoi j'ai un message d'erreur en utilisant xlPasteColumnWidths avec Excel 2000 ?
- Comment empêcher l'utilisation du Copier Coller dans un classeur ?
- Comment réaliser une capture d'écran par macro ?
- Comment récupérer l'image contenue dans le presse papier pour l'enregistrer sur le PC ?
Dans le volet Presse-papiers,
cliquez sur le bouton "Options".
Décochez l'option "Afficher le presse-papiers Office automatiquement".
Cet exemple copie la feuille nommée "Synthese" dans un nouveau classeur.
Workbooks("Classeur1.xls").Worksheets("Synthese").CopyGrâce à ce code, à placer dans un module standard du classeur source, la feuille nommée "Feuil1" est copiée dans un nouveau fichier, sans les procédures VBA du module objet.
Sub CopieFeuille_SansCodeVba()
ThisWorkbook.Worksheets("Feuil1").Copy
With ActiveWorkbook.VBProject.VBComponents(ActiveSheet.CodeName).CodeModule
.DeleteLines 1, .CountOfLines
End With
End SubPour désactiver le mode couper/copier, utilisez :
Application.CutCopyMode = FalseCela a pour conséquence de griser le bouton Coller et d'empêcher le collage de données.
Utilisez cette procédure pour vider le contenu du presse papier.
Sub ViderPressePapier()
'Nécéssite d'activer la référence "Microsoft Forms 2.0 Object Library."
Dim Cible As dataObject
Set Cible = New dataObject
Cible.setText ""
Cible.putInClipboard
Set Cible = Nothing
End SubPour récupérer du texte contenu dans le presse papier, vous pouvez utiliser :
Sub recupererTextePressePapier()
'nécéssite d'activer la référence "Microsoft Forms 2.0 Object Library."
Dim Resultat As String
With New dataObject
.GetFromClipboard
Resultat = .GetText(1)
End With
MsgBox Resultat
End SubIl s'agit d'un bug connu: La constante xlPasteColumnWidths peut renvoyer un message d'erreur dans certains cas.
'xlPasteColumnWidths= la largeur de colonne copiée est collée.
ActiveSheet.Range("A1").PasteSpecial Paste:=xlPasteColumnWidths, _
Operation:=xlPasteSpecialOperationNone, SkipBlanks:=False, Transpose:=FalsePour y remédier, remplacez xlPasteColumnWidths par la valeur 8.
Par exemple :
ActiveSheet.Range("A1").PasteSpecial Paste:=8, _
Operation:=xlPasteSpecialOperationNone, SkipBlanks:=False, Transpose:=False
Placez ces procédures dans le module objet ThisWorkbook.
Bien entendu les macros doivent être activées pour que ça fonctionne.
Option Explicit
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Application.CutCopyMode = False
End Sub
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
Application.CutCopyMode = False
End SubCet exemple permet de coller l'image d'un UserForm dans la feuille de calcul.
Option Explicit
Private Declare Sub keybd_event Lib "user32" ( _
ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, _
ByVal dwExtraInfo As Long)
Private Sub commandButton1_Click()
keybd_event vbKeySnapshot, 1, 0&, 0&
DoEvents
Range("A1").Select
ActiveSheet.Paste
End SubSans macro, utilisez le raccourci clavier Alt+ImprimEcran.
Option Explicit
Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" _
(ByVal hwnd As Long, ByVal lpOperation As String, _
ByVal lpFile As String, ByVal lpParameters As String, _
ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
Sub Image_ClipBoard()
Dim x As Byte
Dim Sh As Shape
Dim monImage As String
'Compte le nombre d'objet initial dans la feuille
x = ActiveSheet.Shapes.Count
Application.ScreenUpdating = False
ActiveSheet.Range("A1").Select
'Colle le contenu du presse papier dans la feuille de calcul
ActiveSheet.Paste
'vérifie si le collage effectué correspond à une image
If x = ActiveSheet.Shapes.Count Then
Application.ScreenUpdating = True
MsgBox "Opération annulée"
Exit Sub
Else
'Récupère la dernière forme de la feuille
Set Sh = ActiveSheet.Shapes(ActiveSheet.Shapes.Count)
'Définit le nom et le lieu de stockage de l'image
monImage = "C:\monImage.jpg"
'Colle l'image dans un graphique
With ActiveSheet.ChartObjects.Add(0, 0, Sh.Width, Sh.Height).Chart
.Paste
'Sauvegarde l'image du graphique au format jpg
.Export monImage, "JPG"
End With
'Supprime le graphique et la forme.
With ActiveSheet
.ChartObjects(ActiveSheet.ChartObjects.Count).Delete
.Shapes(ActiveSheet.Shapes.Count).Delete
End With
Application.ScreenUpdating = True
'-------------------------------------------------------------
'Option pour les utilisateurs de Windows XP :
'visualisation de l'image créée, avec l'apercu images_telecopies Windows
'testé avec Excel 2002 et WinXP
ShellExecute 0, "open", "rundll32.exe", _
"C:\WINDOWS\System32\shimgvw.dll,ImageView_Fullscreen " & monImage, 0, 1
End If
End Sub


