Problème avec Worksheets Activate pour remplissage d'une feuille en fonction d'autres

panoramix

XLDnaute Nouveau
Bonjour tout le monde,

J'ai l'habitude d'utiliser la fonction Worksheets Activate pour traiter des données dans des feuilles différentes.

Cependant, je rencontre un problème avec un petit code qui me permettra de remplir une feuille 4 à l'aide du contenu des feuilles 1, 2 et 3. J'ai défini les plages pour faire les calculs avec 2 méthodes différentes, l'une marche parfaitement. Par contre l'autre avec la fonction Worksheets Activate bug totalement...

Pouvez-vous m'aider ? Je souhaiterais appliquer la méthode avec Worksheets Activate ou avec With sheets plutôt que la première.

Merci d'avance à tous celles et ceux qui se pencheront sur mon problème.

Code:
Sub calc_UC()

Dim plage As Variant
Dim plage2 As Variant
Dim plage3 As Variant
Dim plage4 As Variant

' affectation fonctionnant parfaitement
'plage = Sheets("Feuil1").Range("F6 : J20")
'plage2 = Sheets("Feuil2").Range("F6 : J20")
'plage3 = Sheets("Feuil3").Range("F6 : J20")
'plage4 = Sheets("Feuil4").Range("F6 : J20")

'affectation posant problème
Worksheets("Feuil1").Activate
plage = Range(Cells(6, 6), Cells(20, 10))

Worksheets("Feuil2").Activate
plage2 = Range(Cells(6, 6), Cells(20, 10))

Worksheets("Feuil3").Activate
plage3 = Range(Cells(6, 6), Cells(20, 10))

Worksheets("Feuil4").Activate
plage4 = Range(Cells(6, 6), Cells(20, 10))
    
For i = 1 To 15

    For j = 1 To 5

        If plage(i, j) = "102" Then
        
            plage4(i, j) = plage2(i, j) * plage3(i, j)
            
        Else
        
            plage4(i, j) = 0
            
        End If
        
    Next j
        
Next i

'remplissage fonctionnant parfaitement
'Sheets("Feuil4").Range("F6 : J20") = plage4

'remplissage posant problème
Range(Cells(6, 6), Cells(20, 10)) = plage4
          
End Sub
 

Dranreb

XLDnaute Barbatruc
Re : Problème avec Worksheets Activate pour remplissage d'une feuille en fonction d'a

Bonjour.
En somme, vous vous fichez de la démonstration qui vous est infligée, vous persistez à tout prix à vouloir garder vos mauvaises habitudes !
Eh ben précisez partout Application.Range pour qu'il n'assume plus Me.Range, qu'est ce que vous voulez que je vous dise…
Spécifiez ainsi ce qu'il assume dans un module standard mais pas dans un module de feuille.
Et je ne vois pas l'intérêt d'un With pour une seule instruction qui l'utilisera, avec le risque d'oublier le point devant, à mettre quand même de toute façon !
Range est à la fois un type de donnée objet et une méthode propre à deux objets: Application et Worksheet. Il est toujours souhaitable de spécifier de quel objet vous voulez utiliser sa méthode Range, parce qu'a mon avis ce n'est pas à VBA de le décider mais à vous.
La méthode Range de l'objet Application définit une plage de la feuille spécifiée dans la référence indiquée en paramètre, et s'il n'y en est pas spécifiée, il appelle la méthode Range de la feuille active. Mais encore une fois, dans un module de feuille ce n'est pas celle ci qui est invoquée mais celle de la feuille.

Moi au lieu de : Sheets("Feuil1").Range("F6 : J20")
J'utilise systématiquement: Feuil1.[F6:J20].value
Feuil1 devant toutefois être le nom reproduit par la propriété CodeName de la feuille, et non pas son nom Excel.
 
Dernière édition:

Discussions similaires