Macro excel: activer feuille ou fichier pour coller ?

Résolu/Fermé
conrade82 Messages postés 96 Date d'inscription dimanche 21 avril 2013 Statut Membre Dernière intervention 9 septembre 2016 - Modifié par conrade82 le 1/04/2014 à 11:18
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 - 9 avril 2014 à 22:47
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 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 775
1 avril 2014 à 17:23
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 dimanche 21 avril 2013 Statut Membre Dernière intervention 9 septembre 2016 4
8 avril 2014 à 08:03
Bonjour,

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

Merci beaucoup!
0
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 775
9 avril 2014 à 22:47
De rien, au plaisir de te relire sur le Forum

Cordialement
Patrice
0