Comment utiliser les "Range" d'Excel 2010
Bonjour à tous,
Pour une application professionnelle je me trouve face à un soucis de déclaration et d'utilisation de variables.
Je doit copier des valeurs d'une feuille d'un classeur Excel sur une feuille d'un autre classeur Excel.
Les valeurs sont contenues dans des ranges nommés 'Titre_01' à 'Titre_10'.
Je n'arrive pas à faire une déclaration conforme pour cette variable en Range pour une boucle "for each".
J'ai bien lu à travers mes recherches que le 'name' du Range doit être un objet, mais je n'y arrive pas. Au secours.
Code:
1 2 3
| Dim sNomPlage As Excel.Range
Dim TitrePlage As Object
TitrePlage = "Test" |
Cette déclaration semble convenir, mais dès que je veux l'utiliser
Code:
sNomPlage.Name = TitrePlage
ce code est souligné en vert avec : "la variable 'sNomPlage' est utilisée avant qu'une valeur ne lui ait été assignée......." et si j’exécute quand même : une exception est levé avec un code d'erreur expliquant que le type n'est pas conforme pour l'opération.
J'ai absolument besoin de récupérer ces ranges avec leur adresse pour les positionner aux mêmes endroits dans le classeur suivant.
L'aide que je vous demande est de :
Pouvoir déclarer ce range, faire la boucle "for each" et pouvoir donner un 'name' à ce Range.
J'ai lu à peu près tout ce qui concerne les ranges grace à developpez.net et à notre ami google, mais pas de solution pour ce que je veux faire.
En vba ou en VB6 je n'ai aucun problème pour ce type de code, l'ayant déjà réalisé, mais en VB.net !!! big problème.
Merci à tous ceux qui voudront bien m'aider
Farouk
Comment utiliser les "Range" d'Excel 2010
Bonjour et merci pour votre temps
@clementmarcotte : effectivement c'est ce que j'utilise en VBA et cela marche bien.
Mon principal souci : les ranges ne sont pas connus autrement que par leur nom qui commence tous par Conso_Titre_xx.
Ils peuvent être n'importe ou sur la feuille.
D’où l'importance de boucler avec un 'for each' et une fois que le nom est trouvé, récupérer l'adresse avec un split.
J'ai lu que le nom d'un range doit être passer par un "objet"
Le problème majeur réside dans la définition du range et de la façon de le récupérer
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
|
Dim cptTitre As Byte = 0
Dim NbTitre As Byte = 0
Dim xlApp As New Excel.Application
Dim wBookDst As Workbook = xlApp.Workbooks.Open(NomClasseurConsolidation)
Dim wbookSrc As Workbook = xlApp.Workbooks.Open(NomClasseurSortie)
Dim sheetDst As Worksheet = wBookDst.Worksheets(NomFeuilleDst)
Dim sheetSrc As Worksheet = wbookSrc.Worksheets(NomFeuilleSrc)
Dim Addr(4) As Object
Dim ligDeb As Int32
Dim AddrLig As Int32
Dim sNomPlage As Excel.Range
Dim TitrePlage As Object
TitrePlage = "Test"
Try
For Each sNomPlage In wbookSrc.Worksheets.Range ' -----> quelle est la bonne méthode ici ?
If Strings.Mid(sNomPlage.Name, 1, 11) = "Conso_Titre" Then
NbTitre = NbTitre + 1
End If
Next
For cptTitre = 1 To NbTitre
TitrePlage = "Conso_Titre_" & Strings.Right("0" & cptTitre, 2)
sNomPlage.Name = TitrePlage
Addr = Split(sheetSrc.Range(sNomPlage).Address, "$") |