FAQ Excel
FAQ ExcelConsultez toutes les FAQ
Nombre d'auteurs : 46, nombre de questions : 845, dernière mise à jour : 30 mars 2022
- 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"
).Copy
Grâ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
Sub
Pour désactiver le mode couper/copier, utilisez :
Application.CutCopyMode
=
False
Cela 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
Sub
Pour 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
Sub
Il 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:=
False
Pour 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
Sub
Cet 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
Sub
Sans 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