XL 2010 Probleme Macro Excel 2010 Paste -> PasteSpecial

DanyJee

XLDnaute Nouveau
Bonjour la Communauté,
Je me heurte un petit probleme de macro. J'ai écris une macro qui me permet de copier dans un onglet SYNTHESE les contenus d'une plage définis dans un grand nombre d'onglets. La macro fonctionne en copiant les valeur ET formules, hors les formules de ne sont plus adaptés dans cette onglet. Je cherche a modifier le paste par PasteSpecial dans la ligne de code " 'Worksheets("SYNTHESE").Range("C" & derniereLigneVide & ":C" & derniereLigneVide + 339 - 18) = Sheets(i).Name"
mais cela génère une erreur et je ne sais pas déterminer sont origine

Voici mon code:
Sub Summary_Click2()

Dim Wb As Workbook
Dim i As Integer

Dim NbSheet As Integer
Dim derniereLigneVide As Long

Dim derniereLigneData As Integer

Dim nbfeuilles As Long

Dim selectSh As Boolean

selectSh = False

derniereLigneData = 0

Set Wb = ActiveWorkbook
NbSheet = Wb.Sheets.Count

derniereLigneVide = Wb.Sheets("SYNTHESE").Cells(Rows.Count, 3).End(xlUp).Row + 1

For i = 1 To NbSheet


If Sheets(i).Name = " ETAGE -05 H" Then
selectSh = True
End If

If selectSh = True Then

Sheets(i).Activate

Sheets(i).Range("D18:J339").Copy Worksheets("SYNTHESE").Range("D" & derniereLigneVide)
Worksheets("SYNTHESE").Range("C" & derniereLigneVide).PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode = False
'Worksheets("SYNTHESE").Range("C" & derniereLigneVide & ":C" & derniereLigneVide + 339 - 18) = Sheets(i).Name ' cette commande fonction en paste value

derniereLigneVide = Wb.Sheets("SYNTHESE").Cells(Rows.Count, 3).End(xlUp).Row + 2

End If


If Sheets(i).Name = " ETAGE 18" Then
selectSh = False
End If


Next i

MsgBox "IMPORTATION EFFECTUER"



End Sub


Une bonne âme pourrais m'éclairer sur mon petit problème?
Je vous remercis par avance.
Dany
 
Solution
Re,
Dans la macro remplacer>>>
Sheets(i).Range("D18:J339").Copy Worksheets("SYNTHESE").Range("D" & derniereLigneVide)
Worksheets("SYNTHESE").Range("C" & derniereLigneVide).PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode = False

Par>>>
Worksheets("SYNTHESE").Range("C" & derniereLigneVide & ":I" & derniereLigneVide+321).Value= _
Sheets(i).Range("D18:J339").Value

Bruno

Dudu2

XLDnaute Barbatruc
Bonjour,
En .PasteSpecial xlPasteValues seules sont collées les valeurs. Mais évidemment, y compris les valeurs issues des formules du Range copié.
Je suppose que ce sont ces valeurs issues des formules du Range source que tu veux éviter de retrouver dans ton Range cible.

Dans ce ce cas il faut d'abord faire un .PasteSpecial xlPasteFormulas qui va copier les formules ET les constantes (il faut le savoir !)
Puis retirer de ton Range cible les formules dont tu ne veux pas.
VB:
Range("A1:A2").Copy
Range("B1:B2").PasteSpecial xlPasteFormulas
Range("B1:B2").SpecialCells(xlCellTypeFormulas).ClearContents
 

DanyJee

XLDnaute Nouveau
Hello, Merci pour ta réponse! mais justement je veux uniquement copier/coller les valeurs/textes et non les formules.
A l'heure actuelle c'est ce que donne ma macro(avec formules), mais les résultats des formules ainsi copiées deviennent fausses avec le décalage (exemple des fonctions rechercheV ou les plages d'arguments ne correspondent plus et fournissent un résultat erroné).

Le débogueur m' indique la seconde des lignes de code ci-dessous mais je ne sais pas identifier mon erreur:
Sheets(i).Range("D18:J339").Copy Worksheets("SYNTHESE").Range("D" & derniereLigneVide)
Worksheets("SYNTHESE").Range("C" & derniereLigneVide).PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode = False
 

youky(BJ)

XLDnaute Barbatruc
Re,
Dans la macro remplacer>>>
Sheets(i).Range("D18:J339").Copy Worksheets("SYNTHESE").Range("D" & derniereLigneVide)
Worksheets("SYNTHESE").Range("C" & derniereLigneVide).PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode = False

Par>>>
Worksheets("SYNTHESE").Range("C" & derniereLigneVide & ":I" & derniereLigneVide+321).Value= _
Sheets(i).Range("D18:J339").Value

Bruno
 

DanyJee

XLDnaute Nouveau
Merci pour vos réponses.
Bruno, en modifiant légèrement le code je parviens a ce que j'ai besoin merci. Pourrais tu juste me préciser comment copier la mise en forme des zone copiées? svp J'ai tester avec .Formats mais sans succès, je ne dois pas bien le placer.

Mon Code actuel:

Sheets(i).Activate

Sheets(i).Range("C18:J339").Copy Worksheets("SYNTHESE").Range("C" & derniereLigneVide) 'pour copier avec formules
'Worksheets("SYNTHESE").Range("B" & derniereLigneVide & ":B" & derniereLigneVide + 339 - 18) = Sheets(i).Name

'Worksheets("SYNTHESE").Range("C" & derniereLigneVide & ":J" & derniereLigneVide + 339 - 18).Value = _
'Sheets(i).Range("C18:J339").Value 'Copie valeur sans formats

'Worksheets(1).Cells(i, 3).Copy
'Worksheets(2).Cells(a, 15).PasteSpecial Paste:=xlPasteFormats
'Worksheets(2).Cells(a, 15).PasteSpecial Paste:=xlPasteValues


derniereLigneVide = Wb.Sheets("SYNTHESE").Cells(Rows.Count, 3).End(xlUp).Row + 2

Thanks you
 
Dernière édition:

xUpsilon

XLDnaute Accro
Bonjour,

Worksheets(2).Cells(a, 15).PasteSpecial Paste:=xlPasteFormats
Cette ligne copie le format, donc après ça dépend de ce que tu entends comme format, si c'est la taille des lignes/colonnes ou autre chose ce n'est plus du format.
Egalement, sans avoir la suite du code, peut-etre que tu as une autre modification de format qqpart d'autre dans ton code, je ne sais pas.

Dernière remarque : Thank you ou Thanks, mais pas Thanks you ;)

Bonne continuation
 

DanyJee

XLDnaute Nouveau
Hello,
J'ai utiliser un superposition des deux codes pour obtenir ce que je voulais. Ce n'est pas le plus élégant mais je n'ai pas trouver comment condenser cela.

Ma macro finale étant:

Sheets(i).Range("C18:J343").Copy Worksheets("EXTRACTION 10-01-20").Range("C" & derniereLigneVide) 'pour copier avec formules
Worksheets("EXTRACTION 10-01-20").Range("D" & derniereLigneVide & ":J" & derniereLigneVide + 343 - 18).Value = _
Sheets(i).Range("D18:J343").Value 'Copie valeur sans formats

Merci pour votre aide!
 

Discussions similaires

Réponses
5
Affichages
325
Réponses
7
Affichages
591

Statistiques des forums

Discussions
315 093
Messages
2 116 136
Membres
112 667
dernier inscrit
foyoman