Problème de référencement de cellules (VBA)

Youri

XLDnaute Occasionnel
Bonjour à tous,

Savez-vous pourquoi la macro suivante ne fonctionne ?
Code:
Option Explicit
Option Base 1
Sub test()
Dim MyWorkbook(2) As Workbook
Dim MaVar As Range
Dim MonTest As Range
Dim i As Byte, i2 As Byte, i3 As Byte
Dim cel As Range
Set MyWorkbook(1) = Workbooks.Open("C:\Documents and Settings\Administrateur\Bureau\Nouveau dossier\Nouveau Feuille de calcul Microsoft Excel (2).xls")
Set MyWorkbook(2) = Workbooks.Open("C:\Documents and Settings\Administrateur\Bureau\Nouveau dossier\Nouveau Feuille de calcul Microsoft Excel (3).xls")
i = 1
Do While i <= UBound(MyWorkbook)
    Set MaVar = MyWorkbook(i).Worksheets("Feuil1").Range(Cells(1, 1), Cells(10, 10))
    For Each cel In MaVar
        If i = 1 Then
        cel.Value = 1
        Else
        cel.Value = 2
        End If
    Next cel
    i = i + 1
Loop
End Sub

Alors qu'en remplaçant le code dans le Do ... Loop par :
Code:
    Set MaVar = MyWorkbook(i).Worksheets("Feuil1").Range("A1:J10")
    For Each cel In MaVar
        If i = 1 Then
        cel.Value = 1
        Else
        cel.Value = 2
        End If
    Next cel
    i = i + 1
ou par :
Code:
    For i2 = 1 To 10
        For i3 = 1 To 10
            If i = 1 Then
            MyWorkbook(i).Worksheets("Feuil1").Cells(i2, i3).Value = 1
            Else
            MyWorkbook(i).Worksheets("Feuil1").Cells(i2, i3).Value = 2
            End If
        Next i3
    Next i2
    i = i + 1

Cela fonctionne.

Voilà, je reste en l'attente de vos commentaires.
Merci à l'avance,
Youri

PS: Toute la différence se situe au niveau de la définition des objets Range :
Set MaVar = MyWorkbook(i).Worksheets("Feuil1").Range(Cells(1, 1), Cells(10, 10)) fait planter le code
alors que
Set MaVar = MyWorkbook(i).Worksheets("Feuil1").Range("A1:J10")
ou
MyWorkbook(i).Worksheets("Feuil1").Cells(i2, i3)
fonctionne.
 
Dernière édition:

Pierrot93

XLDnaute Barbatruc
Re : Problème de référencement de cellules (VBA)

Bonjour Youri

essaye peut être comme ci dessous :

Code:
With MyWorkbook(i).Worksheets("Feuil1")
    Set MaVar = .Range(.Cells(1, 1), .Cells(10, 10))
End With

non testé...

bonne journée
@+
 

Youri

XLDnaute Occasionnel
Re : Problème de référencement de cellules (VBA)

Bonjour Pierrot,

Merci beaucoup pour ton aide, ça fonctionne parfaitement.
En fait, si je comprends bien, écrire :
Set MaVar = MyWorkbook(i).Worksheets("Feuil1").Range(Cells(1, 1), Cells(10, 10))
revient à ne pas pleinement qualifier la propriété Cells, qui renvoie donc les cellules de la feuille active, ce qui crée un logiquement un conflit et génère une erreur.
Je pensais en fait que quand on tentait de renvoyer un objet Range grâce à Range(Cells ...), Range et Cells étaient indissociables et formaient comme un seul objet. Mais il s'agit bien de choses différentes.
Conclusion : il faut faire très attention aux objets, propriétés et méthodes qui ont chacun un fonctionnement autonome.

Dans tous les cas, énorme merci pour cet éclaircissement, ça m'évitera beaucoup d'erreurs dans le futur,
Youri
 

Discussions similaires

Réponses
11
Affichages
297
Réponses
2
Affichages
265

Statistiques des forums

Discussions
312 305
Messages
2 087 083
Membres
103 458
dernier inscrit
Vulgaris workshop