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

  • Initiateur de la discussion Initiateur de la discussion Youri
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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:
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
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
5
Affichages
245
Réponses
2
Affichages
203
Réponses
4
Affichages
180
  • Question Question
Microsoft 365 worksheet_change
Réponses
29
Affichages
484
Réponses
8
Affichages
234
Réponses
10
Affichages
282
Réponses
3
Affichages
666
Réponses
5
Affichages
234
Retour