Comment avoir une Range en variable
Résolu
super pompier
-
Marco-X -
Marco-X -
Bonjour,
Je suis à mon taf et j'ai un petit problème de programmation visual basic Excel.
Je suis (très) débutant.
J'ai une base de donnée et je souhaite séléctionner des cellules afin de les recopier dans un autre tableau.
Je sais faire tout ca pour l'instant mais avec des valeurs fixes. Ma base de données évoluant, je cherche à définir ma plage de séléction en variable. Je commence à la cellule A3 et je fini à la cellule EI...
Et c'est cette dernière cellule que j'arrive pas à définir, je sais que c'est tout bête mais je ne sais pas définir une range variable.
Quelqu'un peut il aider un débutant en panique???
Dim fin As Range
Lignefin = lignePO
'Colonnefin = "EI"
fin = ("EI" + Lignefin)
Sheets("Outils effacés").Range("A3: fin").Select
Encore merci
Je suis à mon taf et j'ai un petit problème de programmation visual basic Excel.
Je suis (très) débutant.
J'ai une base de donnée et je souhaite séléctionner des cellules afin de les recopier dans un autre tableau.
Je sais faire tout ca pour l'instant mais avec des valeurs fixes. Ma base de données évoluant, je cherche à définir ma plage de séléction en variable. Je commence à la cellule A3 et je fini à la cellule EI...
Et c'est cette dernière cellule que j'arrive pas à définir, je sais que c'est tout bête mais je ne sais pas définir une range variable.
Quelqu'un peut il aider un débutant en panique???
Dim fin As Range
Lignefin = lignePO
'Colonnefin = "EI"
fin = ("EI" + Lignefin)
Sheets("Outils effacés").Range("A3: fin").Select
Encore merci
A voir également:
- Comment avoir une Range en variable
- Vba range avec variable ✓ - Forum VB / VBA
- Out of range - Forum Windows
- Problème d'allumage écran LG : "OUT OF RANGE" - Forum Ecran
- Vba excel sélectionner une plage de cellules variable ✓ - Forum VB / VBA
- Impossible de créer le fichier de travail. vérifiez la variable d'environnement temp ✓ - Forum Word
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
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