Comment avoir une Range en variable
Résolu/Fermé
A voir également:
- Comment avoir une Range en variable
- Out of range ✓ - Forum Matériel & Système
- D'sub out of range - Forum Ecran
- Vba range avec variable ✓ - Forum VB / VBA
- Input signal out of range change settings to 1600x900-60hz - Forum Windows
2 réponses
Bonjour,
Il y a un gros mélange de notions dans ton script, même s'il n'est pas très loin de marcher.
D'abord, comment sont définis Lignefin et lignePO ?
Ensuite, tu définis fin comme un Range et tu l'initialises comme une chaîne de caractères : fin="EI" or "EI" avec ses guillemets ne peut être qu'une chaîne de caractères.
Tu ne peux pas donner à une variable range la valeur d'une chaîne de caractères : si tu donnes un type a tes variables (et tu as tout à fait raison de la faire) tu es obligé de le respecter ensuite.
Compte-tenu de ce que tu cherches à faire, le mieux est de définir une variable supplémentaire par exemple Dim CaseFin as string et de remplacer ton fin=.. par
CaseFin="EI" & LigneFin ( je suppose que LigneFin est aussi une chaîne de caractères)
Parce que pour mettre bout à bout deux chaînes (on dit concaténer) il faut utiliser l'opérateur &, pas +
Enfin dans ta dernière ligne, tu utilises "A3:fin". Dans la fenêtre d'exécution de VBA, essaye de faire ?"A3:fin". ça va t'afficher A3:fin évidemment. fin à l'intérieur de guillemets, ça n'est que les 3 lettres f i n, ça n'est pas une variable de ton programme. Il faut mettre "A3:" & CaseFin
Enfin, pour initialiser ta variable range, il faut faire
set fin= Sheets(...
cette fois ça marche parce que la propriété Range de l'objet sheet te renvoie bien un objet Range : tu peux le mettre dans une variable range
En prenant tout ça en compte, ça devrait marcher...
Bin courage
Il y a un gros mélange de notions dans ton script, même s'il n'est pas très loin de marcher.
D'abord, comment sont définis Lignefin et lignePO ?
Ensuite, tu définis fin comme un Range et tu l'initialises comme une chaîne de caractères : fin="EI" or "EI" avec ses guillemets ne peut être qu'une chaîne de caractères.
Tu ne peux pas donner à une variable range la valeur d'une chaîne de caractères : si tu donnes un type a tes variables (et tu as tout à fait raison de la faire) tu es obligé de le respecter ensuite.
Compte-tenu de ce que tu cherches à faire, le mieux est de définir une variable supplémentaire par exemple Dim CaseFin as string et de remplacer ton fin=.. par
CaseFin="EI" & LigneFin ( je suppose que LigneFin est aussi une chaîne de caractères)
Parce que pour mettre bout à bout deux chaînes (on dit concaténer) il faut utiliser l'opérateur &, pas +
Enfin dans ta dernière ligne, tu utilises "A3:fin". Dans la fenêtre d'exécution de VBA, essaye de faire ?"A3:fin". ça va t'afficher A3:fin évidemment. fin à l'intérieur de guillemets, ça n'est que les 3 lettres f i n, ça n'est pas une variable de ton programme. Il faut mettre "A3:" & CaseFin
Enfin, pour initialiser ta variable range, il faut faire
set fin= Sheets(...
cette fois ça marche parce que la propriété Range de l'objet sheet te renvoie bien un objet Range : tu peux le mettre dans une variable range
En prenant tout ça en compte, ça devrait marcher...
Bin courage
22 avril 2008 à 13:21
Un bout de code est plus explicite :
Ca doit être tout simple mais ça ne marche pas :/
Dans l'idée je remplace toute les cases vides d'unes colonnes par une formule, ça marche bien en sois mais j'aimerais que cela s'arrete au bas du tableau (un total) peut importe le nombre de lignes rajoutées (Les users auront le droit d'en rajouter à volonter)
En espérant avoir de vos nouvelles.
Marc