[EXCEL] Problème RECHERCHEV dynamique

Problème RECHERCHEV dynamique [EXCEL] - VB/VBA/VBS - Programmation

Marsh Posté le 07-04-2008 à 16:31:56    

Salut à tous,
 
J'ai un petit souci dans la création d'un RECHERCHEV "dynamique" :
 

Code :
  1. =RECHERCHEV(M154;"z"&D154;3;FAUX)


 
Pour la valeur recherchée : pas de soucis, je fais appel à une cellule.
Pour la zone de recherche, ca se complique : je voudrais faire appel à une zone préalablement nommée du type "zMyZone". Je voudrais donc mettre dans mon RECHERCHEV la concaténation de "z" & de "MyZone" qui figure dans la cellule D154. Avez-vous une idée ?
 
Merci d'avance,
 
m.

Reply

Marsh Posté le 07-04-2008 à 16:31:56   

Reply

Marsh Posté le 07-04-2008 à 16:41:20    

En rajoutant un petit INDIRECT, ca doit marcher au poil :

Code :
  1. =RECHERCHEV(M154;INDIRECT("z"&D154);3;FAUX)



---------------
Feedback : http://forum.hardware.fr/hfr/Achat [...] 2666_1.htm
Reply

Marsh Posté le 07-04-2008 à 16:49:28    

SUPER !!!
C'est exactement ca !
 
Merci M'sieur !

Reply

Marsh Posté le 07-04-2008 à 18:00:08    

Excuse de te solliciter à nouveau, mais : as-tu une idée s'il est possible en VBA de vérifier l'existance d'une zone déclarée dans le classeur ? Un truc du genre :
 
If Range.Exist("zMyZone" ) ?
merci !
 

Reply

Marsh Posté le 07-04-2008 à 18:04:20    

Je suis un peu moins bon en VBA. Au pire, tu peux appeler ta plage et mettre derrière une gestion d'erreur pour gérer cela...


---------------
Feedback : http://forum.hardware.fr/hfr/Achat [...] 2666_1.htm
Reply

Marsh Posté le 12-05-2008 à 15:56:48    

Décidément, j'adore le RechercheV !!! :)
 
Est-il possible de faire un recherchev sur une zone nommée, mais la valeur recherchée se trouvant dans la 2e colonne de la matrice ?
 
Alternative : définir une 2e zone a partir d'une premiere avec un offset d'une colonne...
 
Je ne sais pas si j'ai été clair...
 

Reply

Marsh Posté le 12-05-2008 à 21:31:01    

Peut-être en combinant les fonctions INDEX et MATCH

Reply

Marsh Posté le 13-05-2008 à 10:13:47    


C'est effectivement la seule solution à ma connaissance...


---------------
Feedback : http://forum.hardware.fr/hfr/Achat [...] 2666_1.htm
Reply

Marsh Posté le 13-05-2008 à 10:14:52    

jay-jay69 a écrit :

Excuse de te solliciter à nouveau, mais : as-tu une idée s'il est possible en VBA de vérifier l'existance d'une zone déclarée dans le classeur ? Un truc du genre :
 
If Range.Exist("zMyZone" ) ?
merci !
 


ta zone fait parti d'une collection VBA appelée "Name"
 
exemple de suppression de zone :
ActiveWorkbook.Names("MaPlagedeTri" ).Delete
 
si tu doit tester sa présence
je te conseil d'essayé d'accéder a ta zone, avec un on error...
si ton code par en erreur, c'est que ta zone n'existe pas...

Reply

Marsh Posté le 13-05-2008 à 13:08:24    

Salut, sans doute à adapter


Option Explicit
Option Compare Text
 
Private Function ExistenceNomRange(sNom As String, Optional sNomWkb As String) As Boolean
Dim Rng As Range, i As Long
 
    If sNomWkb = vbNullString Then sNomWkb = ActiveWorkbook.Name
 
    If ClasseurExiste(sNomWkb) Then
        With Workbooks(sNomWkb)
            On Error Resume Next
            For i = 1 To .Sheets.Count
                Set Rng = .Sheets(i).Range(sNom)
                If Err = 0 Then
                    ExistenceNomRange = True
                    Exit Function
                Else
                    Err.Clear
                End If
            Next i
        End With
    Else
        MsgBox sNomWkb & " introuvable"
    End If
End Function
 
Private Function ClasseurExiste(sNomClasseur As String) As Boolean
    On Error Resume Next
    ClasseurExiste = Workbooks(sNomClasseur).Name <> ""
    Err.Clear
End Function
 
Sub Tst()
    MsgBox ExistenceNomRange("Test", "Classeur2.xls" )
    MsgBox ExistenceNomRange("Test" )  
End Sub


Message édité par kiki29 le 13-05-2008 à 13:55:05
Reply

Marsh Posté le 13-05-2008 à 13:08:24   

Reply

Marsh Posté le 14-05-2008 à 10:24:54    

Merci pour vos réponses... je vais étudier tout ca !

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed