Concaténation dans une ligne d'adresse

siocnarf

XLDnaute Occasionnel
Bonjour,

Parmi les 3 lignes suivantes seule la première fonctionne.
Pourtant: D_VDictionnaire(0) = Feuil2 et D_IntDligneExtractData = 290

a1 = Feuil2.[A2:A290].Address(, , xlR1C1, True)
b1 = Feuil2.["A2:A" & D_IntDligneExtractData].Address(, , xlR1C1, True)
b1 = D_VDictionnaire(0).["B2:B" & D_IntDligneExtractData].Address(, , xlR1C1, True)

Qu'est-ce que je manque en ce samedi soir. De repos ou de connaissance?!

Merci,
 

Dranreb

XLDnaute Barbatruc
Re : Concaténation dans une ligne d'adresse

Bonsoir.
Personnellement, pour la 2ième, je prendrais :
Feuil2.[A2].Resize(D_IntDligneExtractData - 1).Address(, , xlR1C1, True)
Pour la troisième ça dépend de ce qu'est D_VDictionnaire(0). Si c'est un objet Worksheet vous pouvez l'écrire devant comme vous l'avez fait en 3. Si c'est un String représentant le nom Excel d'une feuille il faut Worksheets(D_VDictionnaire(0))
Bonne nuit.
 

siocnarf

XLDnaute Occasionnel
Re : Concaténation dans une ligne d'adresse

Bonjour,

D_VDictionnaire(0) est un array et à la position 0, on retrouve la valeur "Feuil2".

D_SDictionnaireCol1 = Feuil2.[A2].Resize(D_IntDligneExtractData - 1).Address(, , xlR1C1, True) --> Fonctionne
D_SDictionnaireCol1 = D_VDictionnaire(0).[A2].Resize(D_IntDligneExtractData - 1).Address(, , xlR1C1, True) --> Objet requis

Je crois comprendre que Feuil2 est un objet et que la valeur D_VDictionnaire(0) n'est pas du même type. Ici, il s'agit d'un string. Comment je pourrais faire pour que la seconde ligne soit fonctionnelle?

Merci,

François
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Re : Concaténation dans une ligne d'adresse

Bonjour.
Oui, et plus précisément un objet de type Worksheet.
VB:
D_SDictionnaireCol1 = Worksheets(D_VDictionnaire(0)).[A2].Resize(D_IntDligneExtractData - 1).Address(, , xlR1C1, True)
Mais je me demande quand même pourquoi vous notez une adresse de Range dans un truc. D'une façon générale il vaut toujours mieux noter des objets eux même plutôt que leurs références obligeant à les reconstruire ultérieurement. Et comme ça justement, vous pourriez utiliser votre D_VDictionnaire(0) comme expression Worksheet :
VB:
Dim D_VDictionnaire() As Worksheet, D_SDictionnaireCol1 As Range
…
Set D_VDictionnaire(0) = Feuil1
Set D_SDictionnaireCol1 = D_VDictionnaire(0).[A2].Resize(D_IntDligneExtractData - 1)
 

siocnarf

XLDnaute Occasionnel
Re : Concaténation dans une ligne d'adresse

Bonjour,

Vous savez, je fais de mon mieux et c'est loin d'être parfait.

Si je nomme la feuille "DictionnaireMOTSASUPPRIMER", Est-ce que je peux déduire que cette feuille s'appelle Feuil2? Où puis-je utiliser le nom de la feuille plutôt que Feuil2?

Merci,

François
 

job75

XLDnaute Barbatruc
Re : Concaténation dans une ligne d'adresse

Bonjour siocnarf, hello Bernard,

Il s'agit des solutions que j'ai données sur ce fil :

https://www.excel-downloads.com/threads/filtrage-dun-immense-fichier.222480/

On peut bien sûr faire des tentatives :

- nommer les 2 plages du dictionnaire

- mieux, copier ces plages et les coller en colonnes I et J du tableau à traiter.

La formule de base bien sûr sera plus simple.

J'ai testé tout cela : on ne gagne absolument rien sur la durée d'exécution.

A+
 

siocnarf

XLDnaute Occasionnel
Re : Concaténation dans une ligne d'adresse

Bonjour,

Effectivement, le fil que vous citez amène des solutions créatrices. Le gain de vitesse est énorme et j'ai bien hâte de le tester sur le fichier global.

Ce fil porte davantage sur des éléments syntaxique ou de codage. J'aurais pu poser toutes mes questions sur le fil que vous citez mais cela aurait rallongé celui-ci et compliquer le tout. L'autre fil a un titre qui peut également effrayer certains collaborateurs et sa complexité dépasse de beaucoup le niveau de celui-ci.

Code:
"Si je nomme la feuille "DictionnaireMOTSASUPPRIMER", Est-ce que je peux déduire que cette feuille s'appelle Feuil2? Où puis-je utiliser le nom de la feuille plutôt que Feuil2?

Voilà pourquoi, j'ai choisi de poser ce type de questions ici.

Merci,

François
 

job75

XLDnaute Barbatruc
Re : Concaténation dans une ligne d'adresse

Re,

"DictionnaireMOTSASUPPRIMER" est le nom de la feuille, on l'utilise entre guillemets :

Sheets("DictionnaireMOTSASUPPRIMER").

"Feuil2" est le CodeName de cette feuille, on ne l'utilise jamais entre guillemets.

Sauf par exemple dans VBComponents("Feuil2") mais c'est une autre histoire...

A+
 

Statistiques des forums

Discussions
312 330
Messages
2 087 341
Membres
103 524
dernier inscrit
Smile1813