Insérer variable dans définition de plage VBA
Bonjour,
J'ai débuté VBA il y a peu, et il y a quelques spécificités qui me rebutent parfois, notamment la définition des plages.
Ma plage est une colonne dont les limites de lignes sont des variables (dépendant d'autres facteurs, nous sommes dans une fonction).
Voici comment j'ai procédé, avec i pour variable :
----------------------------------------------------
Dim DEBUT As String
Dim FIN As String
Dim MaPlage As Range
DEBUT = Cells(i,2)
FIN = Cells(i+10,2)
MaPlage = Range("DEBUT:FIN")
----------------------------------------------------
J'obtiens une "Erreur d'exécution 1004 : La méthode Range de l'objet _Global a échoué"
- Ce qui me paraît ne pas convenir est le fait que DEBUT et FIN aient été définis comme String, mais je n'en suis pas sûre.
- Par ailleurs, j'ai l'impression qu'il faudrait un .Select quelque part mais je n'en suis pas sûre non plus, à vrai dire je n'ai pas très bien compris l'utilité de cette fonction qui est apparemment très utilisée, car je n'en ai jamais vu d'équivalent dans les autres langages de programmation que je connais.
Pourriez-vous m'aider ? Il ne m'a pas semblé nécessaire de joindre un fichier de test, mais si besoin est, dites-le moi et j'en ferai un sans souci.
Merci d'avance !
Bonsoir,
Je n'y connais pas grand-chose non plus, tout ce que je peux te dire c'est déjà que tu n'es pas obligé de définir tes variables à moins que tu ai mis "option explicit" tout en haut de ton code.
Ensuite, c'est beaucoup plus pratique de travailler avec un tableau structuré avec lequel ton code s'adaptera tout seul. Du genre
Range("Montableau")Comme ça, si ajout ou suppression de lignes, ou même de colonnes, aucun problème.
Et .Select permet simplement de sélectionner la cellule ou plage de cellules définie. Comme si tu faisais un clic gauche maintenu.
Suis pas capable de régler ton code, mais "i" c'est quoi sa variable ?
Bonsoir Thrrybo et merci pour ta réponse rapide !
Je suis en train d'essayer avec un tableau comme tu dis.
Pour faire plus clair j'ai finalement fait un fichier de test (pièce jointe). En fait je cherche à calculer des percentiles (10e et 90e) puis les afficher via MsgBox. i n'a pas de sens physique ici puisque j'ai simplifié mon problème initial (mais qui m'affiche toujours le même problème au même endroit).
EDIT : Je rajoute en pièce jointe le fichier où j'ai testé avec un tableau. Cette fois le debogger m'indique qu'il faut une constante dans la définition du tableau. J'avoue être assez perplexe car pour moi il y a bien une constante à cet endroit.
- Messages
- 4'199
- Excel
- 2021 FR 64 bits
- Inscrit
- 13/06/2016
- Emploi
- bénévole associations Goutte d'Or
Bonsoir,
VBA a 2 sortes de variables : les variables de type valeur et celles de type objet.
Dim DEBUT As String est une variable chaîne qui contiendra une valeur
Dim MaPlage As Range est une variable objet car elle fait référence à une classe. Toute variable objet se définit avec l'instruction "Set"
Pour ce que vous voulez obtenir, il faut définir autrement et correctement vos variables :
Dim DEBUT As Range, FIN As Range, MaPlage As Range
Set DEBUT = Cells(i, 2)
Set FIN = Cells(i + 10, 2)
Set MaPlage = Range(DEBUT, FIN)Merci thev pour votre réponse !
J'ai essayé comme vous avez dit et il semble qu'on se rapproche effectivement du problème. J'obtiens maintenant un "Impossible de lire la propriété Percentile de la classe WorksheetFunction". Pourtant j'ai vérifié et cette propriété prend bien comme arguments un array ou range (ici MaPlage) et un nombre en 0 et 1 (ici 0.1 ou 0.9).
Ci-joint le test avec la nouvelle solution (module Solution2).
Hello à tous,
La méthode de thev est + propre, mais si tu veux passer par une variable de type string pour DEBUT & Fin, voici un exemple
Sub testing()
Dim DEBUT As String
Dim FIN As String
Dim MaPlage As Range
DEBUT = Cells(1, 2).Address
FIN = Cells(1 + 10, 2).Address
Set MaPlage = Range(DEBUT & ":" & FIN)
msgbox MaPlage.address
End Sub