IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Pouvoir utiliser un range en parametre sans passer un nom de feuille [XL-2003]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Janvier 2003
    Messages
    604
    Détails du profil
    Informations forums :
    Inscription : Janvier 2003
    Messages : 604
    Par défaut Pouvoir utiliser un range en parametre sans passer un nom de feuille
    Bonjour,
    Je voulais recreer une sorte de RerchercheV, j'ai une fonction qui marche, mais je ne parviens pas à traiter la fonction en utilisant que le parametre matrice.
    Il a fallu que j'utilise le nom de la feuille d'ou provient ma matrice
    pour effectuer mes recherches.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    Function Fct_RechercheV(chaine As String, matrice As Range, colonne As Integer) As String
    Dim i As Integer
    Dim j As Integer
    Dim t As Boolean
    On Error GoTo gestErr
    t = False
     
    For i = matrice.Row To matrice.End(xlDown).Row
        For j = matrice.Column To matrice.End(xlToRight).Column
            If Worksheets("Maintenance").Cells(i, j).Text = chaine Then
                Fct_RechercheV = Worksheets("Maintenance").Cells(i, 3)            
          t = True
            End If
        Next j
    Next i
    If t = False Then Fct_RechercheV = ""
    finFunction:
    Exit Function
    gestErr:
    MsgBox Error$
    Resume finFunction
    End Function
    En utilisant le parametre Matrice j'allais pointer je ne sais pas trop ou d'ailleurs.
    Merci d'avance de vos idées pour rendre ce code un peu plus standard.

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 117
    Par défaut
    Quand tu utilises la propriété row de l'objet Range tu te réfères à la feuille contenant le Range (plage de cellules), cela te donne le numéro de ligne de la feuille où commence la plage

    La boucle devrait ressembler à ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    For i = 1 To matrice.Rows.count - 1
        For j = 1 To matrice.Columns.count - 1
            If Worksheets("Maintenance").Cells(i, j).Text = chaine Then
                Fct_RechercheV = Worksheets("Maintenance").Cells(i, 3)            
          t = True
            End If
        Next j
    Next i

  3. #3
    pgz
    pgz est déconnecté
    Expert confirmé Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Par défaut
    Bonjour.

    Si tu a un argument de type Range, quand tu appelles la procédure tu dois lui fournir un argument de type Range.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim oRng as Excel.Range
     
    Set oRng = ...
     
    monResultat = fct(...,oRng,..)
    Ici tu pourrais préciser ByVal pour matrice dans la déclaration de fonction. Les autres arguments aussi, je crois.

    Cordialement,

    PGZ

  4. #4
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Bonsoir
    matrice.parent te donne la feuille mère de la plage matrice

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 117
    Par défaut
    Maintenant si tu veux faire une sorte de recherchev, il serait intéressant de voir cet exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Private Function GetRangeGoal(pRange As Range, pValue As String) As Range
     
        Set GetRangeGoal = pRange.Find(What:=pValue, LookAt:=xlWhole, MatchCase:=True)
     
        ' Si la valeur est trouvée, renvoi de la ligne complète pour avoir l'ensemble des données
        If Not GetRangeGoal Is Nothing Then
            Set GetRangeGoal = GetRangeGoal
        End If
     
    End Function
    Ce serait plus rapide que des boucles imbriquées
    Adaptable en fonction de tes besoins

  6. #6
    Membre éclairé
    Inscrit en
    Janvier 2003
    Messages
    604
    Détails du profil
    Informations forums :
    Inscription : Janvier 2003
    Messages : 604
    Par défaut
    Merci bien à trollinou pour ta dernière intervention.
    Je suis quand même surpris qu'il faille demander à un range sa feuille mère pour pouvoir ensuite tester sa valeur.
    Cela veut il dire que le range passé en parametre n'est plus interrogeable ?...
    Normalement par défaut il est passé byref ?

    Merci de vos idées sur le sujet, ca serait bien de clore le sujet sur une certitude.

  7. #7
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 117
    Par défaut
    En fait le problème n'est pas de demander la feuille mère pour interroger le range mais de demander la mère pour avoir une information qui soit en relation avec la mère.

    Par exemple si tu souhaites connaitre la ligne à laquelle débute la plage (Range) sur la feuille il te faut bien évidemment la mère.
    Mais pour avoir la mère pas besoin du paramètre Worksheet puisque Range.Parent te donne la feuille sur laquelle se trouve la plage.

    Si tu veux connaitre le nombre de ligne de la plage, pas besoin.

    J'espère avoir été clair .....

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Utilisation de MSCOMM sans passer par un userform
    Par jeje86 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 10/12/2008, 08h56
  2. Réponses: 5
    Dernier message: 09/05/2007, 10h00
  3. Utilisation de MDF sans passer par un backup
    Par AODRENN dans le forum Administration
    Réponses: 5
    Dernier message: 19/10/2005, 12h35
  4. [BDE][Access] utilisation de BDDs sans passer par ODBC
    Par Guigui_ dans le forum Bases de données
    Réponses: 4
    Dernier message: 23/01/2005, 14h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo