Colonnes variables Range de données

N

nicolas.maychmaz

Guest
Bonjour,

Je suis conscient que ce problème a été soulevé plusieurs fois dans les forums mais mon code reste incorrect malgré mes consultations. :-(
En fait j'ai une erreur d'execution 1004 sur ma ligne de définition de range et je ne comprend pas pourquoi sachant qu'un jour auparant j'ai programmé quasiment le même code mais avec des lignes variables. C'est donc bien l'aspect variable des colonnes qui bug mais pourquoi???

En gros je défini un range variable pour un vlookup. Ma variable de colonne est définie par "col" (la partie .Find pour rechercher la valeur de celle-ci fonctionne).
Voici une partie du code:

Dim col As String
Dim Maplage1 As Range
col = Sheets("Base Fonds").Range("A3:IV3").Find(Sheets("VL Fonds").Cells(2, 9).Value, LookIn:=xlValues, LookAt:=xlPart, SearchFormat:=False).Column

Set Maplage1 = Sheets("Base Fonds").Range(Cells(7, col), Cells(65000, col + 1))

For M = 332 To L
If Cells(M, 9).Value = "" Then
Cells(M, 9).Value = Application.VLookup(Cells(M, 1), Maplage1, 2, 0)
End If
Next M


Je remercie par avance ceux qui auront la patience de m'aider :)
Nicolas
 

Pierrot93

XLDnaute Barbatruc
Re : Colonnes variables Range de données

Bonsoir,

essaye peut être ainsi :
Code:
With Sheets("Base Fonds")
    Set Maplage1 = .Range(.Cells(7, col), .Cells(65000, col + 1))
End With

il faut également spécifier la feuille concernée à laquelle les "cells" doivent faire référence...

bonne soirée
@+
 

Gorfael

XLDnaute Barbatruc
Re : Colonnes variables Range de données

Salut nicolas.maychmaz et le forum
sachant qu'un jour auparant j'ai programmé quasiment le même code mais avec des lignes variables.
Quasiment avec du code revient souvent à dire totalement !
Comme Pierrot93 a déjà répondu, je fais juste des remarques :
- donner un extrait d'une macro n'est jamais très bon : en donnant la totalité et ce qu'elle fait il y a souvent des propositions d'amélioration.
- ne connaissant que ton poste, je ne peux juger de la justesse de ta macro, mais... quand tu travailles sur Excel, un minimum de logique évite bien des erreurs : déclarer col en string et l'utiliser en col+1... heureusement qu'excel est assez permissif (propriété column renvoie un Long).
- on est à la génération 2007 et supérieures => on a plus de 65536 lignes et plus de 255 colonnes => si tu travailles pour une boîte, il faut envisager que les versions d'excel puissent évoluer
Code:
...
col = Sheets("Base Fonds").Range("A3:IV3").Find(Sheets("VL  Fonds").Cells(2, 9).Value, LookIn:=xlValues, LookAt:=xlPart,  SearchFormat:=False).Column
...
 Set Maplage1 = Sheets("Base Fonds").Range(Cells(7, col), Cells(65000, col + 1))
...
deviennent
Code:
...
with Sheets("Base Fonds")
    col = .Range(.[A3], .cells(3, columns.count).Find(Sheets("VL  Fonds").Cells(2, 9), LookIn:=xlValues).Column
    ...
     Set Maplage1 = .Range(.Cells(7, col), .Cells(rows.count, col + 1))
    ...
End with
en principe, je réduis toujours mes plages au minimum contenant les informations, et pas toute la colonne, y compris des cellules vides en dehors de la UsedRange. Mais comme j'ai deux colonne (col et col+1), il faudrait que je complique la formule avec le calcul du numéro de ligne le plus élevé entre les deux
Code:
iif(.cells(rows.count, col).end(xlup).row>.cells(rows.count, col+1).end(xlup).row,.cells(rows.count, col).end(xlup).row,.cells(rows.count, col+1).end(xlup).row)
à la place de rows.count. Comme je ne connais pas le gain (temps), je laisse tel quel.
A+
 
N

nicolas.maychmaz

Guest
Re : Colonnes variables Range de données

Bonjour,

Merci pour vos réponses, ca marche parfaitement maintenant.
J'avais un peu la tête dans le guidon comme on dit et besoin d'un regard extèrieur!

@Gorfael, merci pour ta proposition d'amélioration, il est vrai que j'utilise excel 2003 et qu'il serait judicieux de penser à l'éventualité d'un passage aux versions supérieures.


@+
Nicolas
 

Discussions similaires

Statistiques des forums

Discussions
312 785
Messages
2 092 094
Membres
105 194
dernier inscrit
Ateups