Question bête .... ou pas ?

tora

XLDnaute Occasionnel
Bonjour

Dim MyRange as range

msgbox MyRange.Address

=> msgbox produit une erreur car <<Myrange is not set>>

comment vérifier si MyRange contient bel et bien un objet range
avant l'appel de la message box ?
1/ sachant que la ligne Dim MyRange ... ne doit pas être modifiée
2/ sachant que je ne souhaite pas user le gestionnaire d'erreur pour
dépister la chose ( On Error ... )

merci
 

tora

XLDnaute Occasionnel
Re : Question bête .... ou pas ?

** Merci VBACrumble cependant le problème est différent **

Bonsoir


Code:
Dim MyRange as range
[COLOR="Red"]Set MyRange=Range("A1:A10")[/COLOR]
msgbox MyRange.Address

Comme ça cela fonctionnera ;)

bon d'accord j'aurais du ajouter un N°3 a mes fameuses règles
du jeu .... je reprends donc les règles et je repose le problème :

Bonjour

Dim MyRange as range

msgbox MyRange.Address

=> msgbox produit une erreur car <<Myrange is not set>>

comment vérifier si MyRange contient bel et bien un objet range
avant l'appel de la message box ?
1/ sachant que la ligne Dim MyRange ... ne doit pas être modifiée
2/ sachant que je ne souhaite pas user le gestionnaire d'erreur pour
dépister la chose ( On Error ... )
3/ INTERDIT d'utilier : Set MyRange = Range("****")

Mon problème est de discerner si oui ou non MyRange
aura été dans la suite du programme affectée par une Range.

En d'autre termes, je veux savoir si MyRange est "vide"
pourrais-ton dire ....

merci

PS :
2e étape du problème ( ou 2e question )
Une fois MyRange pleine/affectée donc contenant une
Range X ( en prenant l'exemple VBACrumble ="A1:A10" )
Je souhaite donc à présent vider ma variable MyRange
comprenons bien ici : VideR et non RemplaceR le contenu.
(Toujours durant la procédure bien sur)
Q2= Comment faire ?
 
Dernière édition:

vbacrumble

XLDnaute Accro
Re : Question bête .... ou pas ?

Re


:confused::confused::confused:

A partit du moment ou tu Dim MyRange as Range
normalement VBA s'attend à avoir un :
Set MyRange=Range("Ax") non ?

C'est cela que tu veux faire ??
Code:
Sub test()
Dim MyRange As Range
''Set MyRange = Range("a1")
If TypeName(MyRange) = "Range" Then
MsgBox MyRange.Address
Else
MsgBox "My Range n'est pas un objet Range!"
End If
End Sub
 
Dernière édition:

tora

XLDnaute Occasionnel
Re : Question bête .... ou pas ?

ok je précise :

set MyRange = cells.Find("bob")

Si bob existe on le trouve et la terre continue son périple
par contre si bob n'exist pas alors MyRange est "vide"
et donc si demande MyRange.Address bing error !
Donc je dois avant de demander Address pouvoir le
faire ...
Est-ce plus clair ?

merci

PS : j'avais pas tout lu ... oui le typename va effectivement
permettre de sauver les meubles !

Bon et pour ma Q2 une petite idée ?
 
Dernière édition:

tora

XLDnaute Occasionnel
Re : Question bête .... ou pas ?

Re

Ce serait plus clair si on pouvait voir ton code VBA initial et son contexte non ?

en fait ma base de travail etait sur .Find()
et j'ai dérivé sur diverses questions et éssais
donc le code n'est pas centré sur un résultat
précis. Par contre les questions sont suceptibles
d'être utiles pour d'autres projets.
( en clair actuellement pas de contexte particulier
soit pas de code défini a transmettre )

Mais donc le fait de vider une variable par code et
autrement que par remplacement est il faisable ?
( durant procédure bien sur )

merci
 

MJ13

XLDnaute Barbatruc
Re : Question bête .... ou pas ?

Bonjour Tora, Cramble

Voici le genre de post qui, si on veut le résoudre dans les meilleurs conditions, demande un fichier exemple le plus simple possible.
Sinon, on peut tourner en rond!

De plus Tora, habitue toi a mettre un titre explicite (voir la charte).
 

tora

XLDnaute Occasionnel
Re : Question bête .... ou pas ?

Re


C'est pas compliqué de faire un CRTL+C/CTRL+V du code VBA
dans ton post, non ????

OK mais ca va pas t'aider beaucoup :

Sub bob()
Dim Rg1 As Range, Rg2 As Range, TpS As String, Lst As New Collection, StR As String, Idx As Integer: StR = "bob"
Set Rg1 = UsedRange.Find(StR)
If Not TypeName(Rg1) = "Nothing" Then
Lst.Add CStr(Rg1.Address), CStr(Rg1.Address)
Do
Set Rg2 = UsedRange.Find(StR, Rg1)
If Not TypeName(Rg2) = "Nothing" Then
Lst.Add CStr(Rg2.Address), CStr(Rg2.Address)
Set Rg1 = Rg2
End If
Loop While Not TypeName(Rg2) <> "Nothing"
TpS = StR & " Was Found here :" & vbCrLf & vbCrLf
For Idx = Lst.Count To 1 Step -1
TpS = TpS & Replace(Lst.Item(Idx), "$", "") & vbCrLf
Next Idx
MsgBox TpS
End If
End Sub


Donc la fameuse Q2, une proposition ?
 

Discussions similaires

Statistiques des forums

Discussions
312 613
Messages
2 090 231
Membres
104 454
dernier inscrit
alaindeloin.1976