Comment avoir une Range en variable

Résolu/Fermé
super pompier - 6 févr. 2008 à 10:45
 Marco-X - 22 avril 2008 à 13:21
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

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
1
Bonjour je cherche à faire exactement la meme chose, mais je n'arrive pas à savoir comment faire pour savoir la derniere ligne remplie de ma feuille, pour ensuite la stocké dans une variable (quel type ?) et ainsi faire comme l'OP de ce poste.
Un bout de code est plus explicite :

Private Sub Worksheet_Change(ByVal Target As Range)
 
Dim Fin As Range
Dim CaseFin As String
Dim LigneFin As Integer 'Aucune idée du type à adopter
'LigneFin = ?? là je bloque !
CaseFinH = "H" & LigneFin

Set Fin = Sheets("HEURES").Range("H10:" & CaseFinH)
For Each macell In Range("Fin")
   If macell = "" Then
        macell.Formula = "=+R[0]C[-1]*R[0]C[-2]-R[0]C[-3]"
   End If
Next
End Sub


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
0
OK merci,

Ca marche comme sur des roulettes!!!
0