XL 2016 Remplacer Coller par coller valeurs

  • Initiateur de la discussion Initiateur de la discussion Aloha
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Aloha

XLDnaute Accro
Bonjour,
J'ai déjà expérimenté beaucoup pour motiver le code suivant:
Code:
Set Suchzeile = Cible.Worksheets(WS.Name).Range("A5000").End(xlUp)
Debug.Print Suchzeile.AddressLocal
WS.Range("A5:A35").Copy Suchzeile.Offset(1, 0)
WS.Range("F5:AC35").Copy Suchzeile.Offset(1, 1)
Application.CutCopyMode = False
          
With Cible.Worksheets(WS.Name)
    lRow = .Range("A" & .Rows.Count).End(xlUp).Offset(1).Row
    WS.Range("A5:A35").Copy .Range("A" & lRow)
    WS.Range("F5:AC35").Copy .Range("B" & lRow)
End With
à coller les valeurs et surtout pas le formatage. Avec ce code je dois reformater les feuilles cible par après.

D'ailleurs, vu ma modeste maîtrise de VBA, je ne comprends pas ce que ce bout de code
Code:
WS.Range("A5:A35").Copy Suchzeile.Offset(1, 0)
WS.Range("F5:AC35").Copy Suchzeile.Offset(1, 1)
fait exactement par rapport à ce bout de code:
Code:
WS.Range("A5:A35").Copy .Range("A" & lRow)
WS.Range("F5:AC35").Copy .Range("B" & lRow)
.

Bonne journée
Aloha
 
Hello
je n'ai pas bien compris la question.. en fait. suis meme pas sur qu'il y en ait une 🙂

sinon, d'après le titre du post
pour copier coller juste les valeurs d'une zone, tu peux faire
range("A5:C35").value=range("A5:C35").value
 
Bonjour,
Il y a bien des questions, mais sans point d'interrogation!
Il y en a deux exactement:
1. comment modifier le code de la première fenêtre code (tout le code) pour qu'il ne copie que les valeurs, parce que si je copie comme ça mon formatage du fichier cible est détruit.
Tu as répondu à cette question, mais ne faut-il pas mettre Ws. avant Range? Et avec ça il ne fonctionne pas.
2. la deuxième question (indirecte aussi): que fait le premier bout de code (avec Offset)
Bonne après-midi
Aloha
 
Dernière édition:
VB:
Set Suchzeile = Cible.Worksheets(WS.Name).Range("A5000").End(xlUp) 'ici, tu définis Suchzeile comme la dernière cellule non vide en colonne A de la feuille ws.name dans ton classeur cible
Debug.Print Suchzeile.AddressLocal
WS.Range("A5:A35").Copy Suchzeile.Offset(1, 0) 'tu copie la zone A5:A35 une ligne en dessous de la cellule Suchzeile
WS.Range("F5:AC35").Copy Suchzeile.Offset(1, 1) 'tu copies la zone F5:C35: une ligne en dessous et une colonne à coté de SuchZeile
Application.CutCopyMode = False
      
With Cible.Worksheets(WS.Name) 'Dans le classeur Cible, feuille "Ws.name"
    lRow = .Range("A" & .Rows.Count).End(xlUp).Offset(1).Row 'tu récupères le numéro de la première ligne vide sur la colonne A
    WS.Range("A5:A35").Copy .Range("A" & lRow) 'et tu copies les infos ==> ca fait donc la meme chose que précédemment...et au meme endroit
    WS.Range("F5:AC35").Copy .Range("B" & lRow)
End With

et l'utilisation du ws.. la. ca ne va pas marcher.. parce que ws n'est pas défini....(du moins. dans le bout de code que tu as posté): il faudrait que tu postes ton fichier exemple

parce que je sens que ce qu'il te faut, c'est du pastespecial (xlpastevalues)
 
Dernière édition:
Re,
Merci beaucoup pour tout ce travail!
==> ca fait donc la meme chose que précédemment...et au meme endroit)
Veux-tu dire par là qu'il y a double emploi et que
Code:
WS.Range("A5:A35").Copy Suchzeile.Offset(1, 0) 'tu copie la zone A5:A35
WS.Range("F5:AC35").Copy Suchzeile.Offset(1, 1)
fait la même chose que
Code:
WS.Range("A5:A35").Copy .Range("A" & lRow)
WS.Range("F5:AC35").Copy .Range("B" & lRow)
?

je sens que ce qu'il te faut, c'est du pastespecial (xlpastevalues)
Oui, c'est ce que je voulais faire et j'ai expérimenté pour coller les valeurs, mais comme la fonction Paste n'est pas utilisée, mais seulement Copy, je ne sais comment faire.
Jusqu'à récemment je ne connaissais même pas cette possibilité et j'avais déjà du mal à comprendre qu'avec Copy on ne peut pas seulement copier mais coller en même temps.

Ws est bien défini dans la Sub:
Code:
Dim WS As Worksheet, Cible As Workbook, Source As Workbook
Dim WSC As Worksheet

Je vais voir s'il m'est possible de modifier mon exemple pour qu'il corresponde à la situation réelle.
A+
Aloha
 
Re,

oui exactement:
Je peux donc enlever (ou mettre un apostrophe avant) les lignes avec Offset?
Je connais et utilise la méthode F8.

Et comment faudrait-il modifier:
Code:
WS.Range("A5:A35").Copy.Range("A" & lRow)
WS.Range("F5:AC35").Copy.Range("B" & lRow)
pour qu'uniquement les valeurs soient collées?
J'ai essayé ceci
Code:
WS.Range("A5:A35").Copy
.Range("A" & lRow).PasteSpecial.xlPasteValues
WS.Range("F5:AC35").Copy
.Range("B" & lRow).PasteSpecial.xlPasteValues
, mais j'obtiens un message d'erreur:
"Compile error
Invalid or unqualified reference"
Si j'enlève le point entre PasteSpecial et xlPasteValues, cela ne change rien: j'ai le même message d'erreur.

J'ai encore un autre bout de code qui colle dans une ligne définie:
Code:
WS.Range("A5:A35").Copy Cible.Worksheets(WS.Name).Range("A16")
WS.Range("F5:AC35").Copy Cible.Worksheets(WS.Name).Range("B16")

A+
Aloha
 
Pour le PasteSpecial, il y a quand meme une syntaxe à respecter (cf aide)

VB:
Sub test()
Set cible = ActiveWorkbook
Set ws = ActiveSheet
     
With ws
    lRow = .Range("A" & .Rows.Count).End(xlUp).Row + 1 'tu récupères le numéro de la première ligne vide sur la colonne A
    .Range("A5:A35").Copy
    .Range("A" & lRow).PasteSpecial (xlPasteValues) 
    .Range("F5:AC35").Copy
    .Range("B" & lRow).PasteSpecial (xlPasteValues)
End With

End Sub

ce qui peut se simplifier par
VB:
Sub test()
Set cible = ActiveWorkbook
Set ws = ActiveSheet
     
With ws
    lRow = .Range("A" & .Rows.Count).End(xlUp).Row + 1 'tu récupères le numéro de la première ligne vide sur la colonne A
    .Range("A5:A35,F5:AC35").Copy
    .Range("A" & lRow).PasteSpecial (xlPasteValues) '

End With

End Sub

Ce code recopie SOUS ton tableau, les colonnes A et F:AC: UNE SEULE FOIS
si tu laisses la partie qui fait la meme chose (avec le SuchZeile), tu copiais DEUX fois l'une sous l'autre..
 
Re,
Si je transforme ceci
WS.Range("A5:A35").Copy Cible.Worksheets(WS.Name).Range("A16")
WS.Range("F5:AC35").Copy Cible.Worksheets(WS.Name).Range("B16")
en
WS.Range("A5:A35").Copy Cible.Worksheets(WS.Name).Range("A16").PasteSpecial (xlPasteValues)
WS.Range("F5:AC35").Copy Cible.Worksheets(WS.Name).Range("B16").PasteSpecial (xlPasteValues)
je reçois un message d'erreur:
"Rune-time error 1004 : Unable to get the PasteSpecial property of the Range class"
Je suppose que la syntaxe n'est pas exacte?
D'ailleurs, pour exécuter le code avec F8, je suis embêté par le fait qu'à un certain moment Excel saute à
"Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)" où il y a une interminable boucle For...Next qui rend l'utilisation de F8 pratiquement impraticable et qui n'a rien à voir avec le code actuel.
Comment éviter cela?
A+
Aloha
 
il faut que les instructions Copy et Pastespecial soient sur DEUX lignes différentes.. comme dans ma proposition..
pour éviter le lancement des evènements, tu peux ajouter en début de macro
application.enableevents=false
et le remettre à true à la fin de la macro
 
Ca fonctionne!...mais très lentement.
Et maintenant j'ai un autre problème: la fonction EOMONTH ne veut plus fonctionner.
Un exemple d'une formule comme elle se présente à présent:
Code:
=MIN('C:\Program Files (x86)\Microsoft Office\root\Office16\LIBRARY\Analyse\ATPVBAEN.XLA'!eomonth($B370;0);MAX($B370;D$328))
.
En réalité le dossier "Analyse" s'appelle "Analysis", mais lorsque je corrige le nom, je reçois le message "There is a problem with this formula":
 
Tu dis que c'est imprudent; quelle est le risque?
Et si le nom n'est pas exact? S'il cherche dans "Analyse" et en réalité le dossier s'appelle "Analysis", il ne peut pas trouver.
Demain (ou plutôt aujourd'hui) je vais réinstaller Excel.
Bonne nuit
Aloha
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
5
Affichages
703
Réponses
8
Affichages
529
  • Question Question
Microsoft 365 Erreur de macro
Réponses
4
Affichages
795
Réponses
7
Affichages
702
  • Question Question
Microsoft 365 Export données
Réponses
4
Affichages
805
Réponses
7
Affichages
655
Retour