Ce tutoriel vous montrera comment utiliser PasteSpecial dans VBA pour coller uniquement certaines propriétés de cellule (exs. valeurs, formats)
Dans Excel, lorsque vous copiez et collez une cellule, vous copiez et collez toutes les propriétés de la cellule : valeurs, formats, formules, formatage des nombres, bordures, etc :
Au lieu de cela, vous pouvez « Coller spécial » pour ne coller que certaines propriétés de la cellule. Dans Excel, le menu Collage spécial est accessible avec le raccourci CTRL + ALT + V (après avoir copié une cellule) :
Ici, vous pouvez voir toutes les combinaisons de propriétés de cellule que vous pouvez coller.
Si vous enregistrez une macro en utilisant le menu Collage spécial, vous pouvez simplement utiliser le code généré. C'est souvent le moyen le plus simple d'utiliser VBA pour coller spécial.
Coller les valeurs
Coller les valeurs ne colle que la cellule « valeur ». Si la cellule contenait une formule, Coller les valeurs collera le résultat de la formule.
Ce code copiera et collera les valeurs d'une seule cellule sur la même feuille de calcul :
12 | Plage("A1").CopierRange("B1").PasteSpecial Paste:=xlPasteValues |
Copier et coller la valeur dans une autre feuille
Cet exemple copiera et collera des valeurs pour des cellules individuelles sur différentes feuilles de calcul
12 | Feuilles("Feuille1").Plage("A1").CopierSheets("Sheet2").Range("B1").PasteSpecial Paste :=xlPasteValues |
Ces exemples copieront et colleront des valeurs pour une plage de cellules :
Copier et coller des plages de valeurs
12 | Plage ("A1:B3").CopierRange("C1").PasteSpecial Paste:=xlPasteValues |
Copier et coller des colonnes
12 | Colonnes("A").CopierColumns("B").PasteSpecial Paste:=xlPasteValues |
Copier et coller des valeurs de lignes
12 | Lignes(1).CopierRows(2).PasteSpecial Paste:=xlPasteValues |
Coller des valeurs et des formats de nombre
Coller des valeurs ne collera que la valeur de la cellule. Aucune mise en forme n'est collée, y compris la mise en forme des nombres.
Souvent, lorsque vous collez des valeurs, vous souhaiterez probablement inclure également le formatage des nombres afin que vos valeurs restent formatées. Regardons un exemple.
Ici nous allons valuer coller une cellule contenant un pourcentage :
12 | Feuilles("Feuille1").Colonnes("D").CopierSheets("Sheet2").Columns("B").PasteSpecial Paste:=xlPasteValues |
Remarquez comment le formatage du nombre de pourcentage est perdu et à la place une valeur décimale bâclée est affichée.
À la place, utilisons les formats Coller les valeurs et les nombres :
12 | Feuilles("Feuille1").Colonnes("D").CopierSheets("Sheet2").Columns("B").PasteSpecial Paste :=xlPasteValuesAndNumberFormats |
Vous pouvez maintenant voir que la mise en forme des nombres est également collée, en conservant le format de pourcentage.
.Valeur au lieu de .Coller
Au lieu de coller des valeurs, vous pouvez utiliser la propriété Value de l'objet Range :
Cela définira la valeur de la cellule de A2 égale à la valeur de la cellule de B2
1 | Plage("A2").Valeur = Plage("B2").Valeur |
Vous pouvez également définir une plage de cellules égale à la valeur d'une seule cellule :
1 | Plage("A2:C5").Valeur = Plage("A1").Valeur |
ou une plage de cellules égale à une autre plage de cellules de taille identique :
1 | Plage("B2:D4").Valeur = Plage("A1:C3").Valeur |
C'est moins de frappe pour utiliser la propriété Value. De plus, si vous souhaitez maîtriser Excel VBA, vous devez être familiarisé avec l'utilisation de la propriété Value des cellules.
Valeur de la cellule par rapport à la propriété Value2
Techniquement, il est préférable d'utiliser la propriété Value2 d'une cellule. Value2 est légèrement plus rapide (cela n'a d'importance qu'avec des calculs extrêmement volumineux) et la propriété Value peut vous donner un résultat tronqué de la cellule formatée en devise ou en date. Cependant, plus de 99% du code que j'ai vu utilise .Value et non .Value2. Personnellement, je n'utilise pas .Value2, mais sachez qu'il existe.
1 | Plage("A2").Valeur2 = Plage("B2").Valeur2 |
Copier Coller Builder
Nous avons créé un « Copy Paste Code Builder » qui facilite la génération de code VBA pour copier (ou couper) et coller des cellules. Le constructeur fait partie de notre Complément VBA : AutoMacro.
Macro automatique contient également de nombreux autres Générateurs de code, Un vaste Bibliothèque de codes, et puissant Outils de codage.
Collage spécial - Formats et formules
Outre les valeurs de collage, les options de collage spécial les plus courantes sont les formats de collage et les formules de collage.
Coller des formats
Coller les formats vous permet de coller toutes les mises en forme des cellules.
12 | Plage ("A1:A10").CopierPlage("B1:B10").CollerPâte spéciale :=xlCollerFormats |
Coller des formules
Coller les formules collera uniquement les formules des cellules. Ceci est également extrêmement utile si vous souhaitez copier des formules de cellule, mais que vous ne souhaitez pas copier les couleurs d'arrière-plan des cellules (ou un autre format de cellule).
12 | Plage ("A1:A10").CopierPlage("B1:B10").CollerPâte spéciale :=xlCollerFormules |
Coller des formules et des formats de nombre
Semblable à Coller des valeurs et des formats de nombres ci-dessus, vous pouvez également copier et coller des formats de nombres avec des formules
Ici, nous copierons une formule de cellule avec le formatage des numéros comptables et les formules de collage uniquement.
12 | Feuilles("Feuille1").Plage("D3").CopierSheets("Sheet2").Range("D3").PasteSpecial xlPasteFormulas |
Remarquez comment le formatage des nombres est perdu et qu'à la place, une valeur bâclée non arrondie est affichée à la place.
À la place, utilisons les formats Coller les formules et les nombres :
12 | Feuilles("Feuille1").Plage("D3").CopierSheets("Sheet2").Range("D3").PasteSpecial xlPasteFormulasAndNumberFormats |
Vous pouvez maintenant voir que le formatage des nombres est également collé, en conservant le format comptable.
Collage spécial - Transposer et ignorer les blancs
Collage spécial - Transposition
Paste Special Transpose vous permet de copier et coller des cellules en changeant l'orientation de haut en bas à gauche-droite (ou vis-a-versa):
12 | Feuilles("Feuille1").Plage("A1:A5").CopierSheets("Sheet1").Range("B1").PasteSpecial Transpose:=True |
Collage spécial - Sauter les blancs
Ignorer les blancs est une option spéciale de collage qui ne semble pas être utilisée aussi souvent qu'elle devrait l'être. Il vous permet de copier uniquement les cellules non vides lors du copier-coller. Les cellules vides ne sont donc pas copiées.
Dans cet exemple ci-dessous. Nous allons copier la colonne A, faire un collage régulier dans la colonne B et sauter les blancs dans la colonne C. Vous pouvez voir que les cellules vides n'ont pas été collées dans la colonne C dans l'image ci-dessous.
123 | Feuilles("Feuille1").Plage("A1:A5").CopierSheets("Sheet1").Range("B1").PasteSpecial SkipBlanks:=FalseSheets("Sheet1").Range("C1").PasteSpecial SkipBlanks:=True |
Autres options spéciales de collage
Collage spécial - Commentaires
1 | Feuilles("Feuille1").Plage("A1").Copier Feuilles("Feuille1").Plage("E1").PasteSpecial xlPasteComments |
Collage spécial - Validation
12 | Feuilles("Feuille1").Plage("A1:A4").CopierSheets("Sheet1").Range("B1:B4").PasteSpecial xlPasteValidation |
Collage spécial - Tous utilisant le thème source
123 | Classeurs(1).Feuilles("Feuille1").Plage("A1:A2").CopierClasseurs(2).Feuilles("Feuille1").Plage("A1").CollerSpécialClasseurs(2).Sheets("Feuille1").Range("B1").PasteSpecial xlPasteAllUsingSourceTheme |
Collage spécial - Tout sauf les bordures
123 | Plage("B2:C3").CopierPlage("E2").CollerSpécialRange("H2").PasteSpecial xlPasteAllSaufBorders |
PasteSpecial - Largeurs de colonnes
Un de mes préférés personnels. PasteSpecial Column Widths copiera et collera la largeur des colonnes.
123 | Plage ("A1:A2").CopierRange("C1").CollerSpécialRange("E1").PasteSpecial xlPasteColumnWidths |
PasteSpecial - All MergingConditionalFormats
123 | Plage ("A1:A4").CopierRange("C1").CollerSpécialRange ("E1").PasteSpecial xlPasteAllMergingConditionalFormats |