Macro excel: activer feuille ou fichier pour coller ?

Résolu
conrade82 Messages postés 96 Date d'inscription   Statut Membre Dernière intervention   -  
Patrice33740 Messages postés 8561 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

J'ai un petit souci. Depuis que je m'intéresse aux macros Excel, je construis mes codes sans utiliser "select" ou "selection", ce qui épure le code et effectivement optimise les temsp de traitement. Mais j'ai un souci: je travaille sur un code qui copie et coller d'un fichier A vers un fichier B des celles voire des colonnes. Pour ne pas utiliser "select" ou "selection", pour copier une cellule j'écris: workbooks("mon fichier A").sheet("feuille1").range("A1:A10").copie et je fais la même chose pour coller dans le fichier B. A ce niveau tout va bien.

Cette action doit être reproduite sur plusieurs onglets. J'utilise donc une boucle. Quand la boucle doit copier les données de la feuille2 du fichier A dans la feuille2 du fichier B, j'ai un bug: "Run-time error '1004': Application-defined or objet-defined error".
ça me le fait également pour un fichier pour lequel je mets à jour le format onglet après onglet via une boucle. Quand la boucle passe au fichier suivant, il y a un bug. Voici un code:


Sub MiseEnFormeConditionnelle()

'Macro créée par le 31/05/2014

Dim lastli As Integer, lastco As Integer

For i = 1 To Worksheets.Count

lastli = Sheets(i).Cells(4, 3).End(xlDown).Row
lastco = Sheets(i).Cells(4, 3).End(xlToRight).Column

With Sheets(i)
'.Activate
With .Range("C4:C" & lastli)
With .FormatConditions
.Delete
.Add Type:=xlCellValue, Operator:=xlLessEqual, Formula1:="0"
End With
With .FormatConditions(1).Font
.Bold = True
.Italic = False
.ColorIndex = 10
End With
End With
With .Range("D4:D" & lastli)
With .FormatConditions
.Delete
.Add Type:=xlCellValue, Operator:=xlBetween, Formula1:="0,795", Formula2:="0,89999999"
End With
With .FormatConditions(1).Font
.Bold = True
.Italic = False
.ColorIndex = 5
End With
.FormatConditions.Add Type:=xlCellValue, Operator:=xlGreaterEqual, Formula1:="0,9"
With .FormatConditions(2).Font
.Bold = True
.Italic = False
.ColorIndex = 3
End With
.FormatConditions.Add Type:=xlCellValue, Operator:=xlLessEqual, Formula1:="0"
With .FormatConditions(3).Font
.Bold = True
.Italic = False
.ColorIndex = 10
End With
End With
.Range(Cells(4, 3), Cells(lastli, 4)).Copy 'la macro bug ici quand la valeur "i" passe à 2.
.Range(Cells(4, 5), Cells(lastli, lastco)).PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False

End With
Next i

End Sub

Par contre si au début de la macro je fais en sorte d'activer l'onglet, le bug ne se produit plus. Je trouve ça dommage de devoir activer ma feuille pour que ma macro fonctionne. Y a-t-il un moyen pour corriger ?

Merci d'avance de votre aide.



Cordialement,
Conrade82
A voir également:

2 réponses

Patrice33740 Messages postés 8561 Date d'inscription   Statut Membre Dernière intervention   1 780
 
Bonjour,

je construis mes codes sans utiliser "select" ou "selection"
C'est la meilleure méthode, malheureusement pas toujours possible !

Pour ton bug, tu as simplement oublié de préciser de quelles Cells il s'agit !
Essaies :
.Range(.Cells(4, 3), .Cells(lastli, 4)).Copy 
.Range(.Cells(4, 5), .Cells(lastli, lastco)).PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, SkipBlanks:=False, Transpose:=False

--
Cordialement
Patrice
0
conrade82 Messages postés 96 Date d'inscription   Statut Membre Dernière intervention   4
 
Bonjour,

En effet, tu avais raison. Ça fonctionne mieux.

Merci beaucoup!
0
Patrice33740 Messages postés 8561 Date d'inscription   Statut Membre Dernière intervention   1 780
 
De rien, au plaisir de te relire sur le Forum

Cordialement
Patrice
0