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 :

(Optimisation) Range sur une cellule variable [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Membre Expert
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2011
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2011
    Messages : 1 503
    Par défaut (Optimisation) Range sur une cellule variable
    Bonjour à tous,

    J'imagine que j'aurais une réponse rapide au vu de la simplicité de la question, mais je n'ai pas trouvé de réponse facile, claire et propre...

    J'ai une cellule variable ("M9" par exemple) et je souaite passer par référence cette cellule dans une fonction.

    Cette fonction doit ensuite exécuter une recherche sur la colonne entière de la cellule variable.

    J'ai actuellement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .Range(Pos_comp, Pos_comp.Offset(65635 - Pos_comp.Row, 0))
    Avec "Pos_comp" = position de comparaison de type Range.

    Y a-t-il une façon "plus simple" d'y parvenir ?
    Merci ! =)

  2. #2
    Membre éprouvé
    Homme Profil pro
    Retraité
    Inscrit en
    Février 2012
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Février 2012
    Messages : 75
    Par défaut
    Bonjour,

    J'ai une cellule variable ("M9" par exemple) et je souaite passer par référence cette cellule dans une fonction.

    Cette fonction doit ensuite exécuter une recherche sur la colonne entière de la cellule variable.
    Il faut en premier lieu récupérer le No de la colonne de cette cellule
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    NoCol = ActiveCell.Column
    et ensuite définir la plage de recherche sur la colonne
    ______________
    Cordialement

  3. #3
    Membre Expert
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2011
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2011
    Messages : 1 503
    Par défaut
    Cela me pose un problème :

    Quand je fais une recherche sur une colonne j'emploie la formule suivante (pour la colonne B par exemple) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Worksheets("wkst").Range("B:B").Find(search, LookIn:=xlFormulas, lookat:=xlWhole)
    Or, ce que tu me proposes retourne le numéro de la colonne. Comment puis-je, avec cela faire une recherche sur une colonne complète ?

    Merci ! =)

  4. #4
    Membre Expert
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2011
    Messages
    1 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 858
    Par défaut
    Bonjour,

    Premier point
    En fait, tu definis ta plage avec une cellule de départ (Pos_comp) et une cellule d'arrivée (dernière cellule de la colonne qui contient Pos_comp).
    Pour la cellule d'arrivée, son numéro de colonne est Pos_comp.column et son numéro de ligne est rows.count.
    Tu peux donc définir ta plage simplement avec la formule suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .Range(Pos_comp, .Cells(.Rows.Count, Pos_comp.Column))
    Tu peux également composer avec d'autres formulations :
    Avec le décalage (c'est cette propriété qui est utilisée dans ta formule)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .Range(Pos_comp, Pos_comp.Offset(.Rows.Count - Pos_comp.Row, 0))
    Avec le redimensionnement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Pos_comp.Resize(.Rows.Count - Pos_comp.Row + 1, 1)
    etc.

    Deuxième point
    Worksheets("wkst").Range("B:B").Find(search, LookIn:=xlFormulas, lookat:=xlWhole)
    Comment tu définis search?
    Et tu en fais quoi de cette formule ?

    Cordialement.

  5. #5
    Membre Expert
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2011
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2011
    Messages : 1 503
    Par défaut
    Ok, je me suis mal exprimé.

    Mon but est de faire une recherche sur la colonne entière de ma cellule variable "Pos_comp".
    - Soit à partir de la cellule en question, jusqu'en bas de la page
    - Soit sur la colonne entière

    Donc, pour ce faire, j'ai appliqué la formule suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Worksheets("wkst").Range(Pos_comp, Pos_comp.Offset(65635 - Pos_comp.Row, 0)).Find(search, LookIn:=xlFormulas, lookat:=xlWhole)
    wkst est le nom de mon onglet
    search est une String

    Je voulais donc savoir s'il y avait une possibilité de remplacer ".Range(Pos_comp, Pos_comp.Offset(65635 - Pos_comp.Row, 0))" par quelque chose de plus simple.

    C'est simplement pour chipoter un peu... Désolé de vous faire perdre votre temps...

    Pour autant, à quoi sert ".Rows.Count" ?

    Bref, merci, en espérant avoir été plus clair cette fois-ci !

  6. #6
    Membre Expert
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2011
    Messages
    1 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 858
    Par défaut
    Voici un exemple d'utilisation.
    La feuille est nommée "wkst".
    La variable Search est de type String et sa valeur est "Toto".
    On recherche dans la colonne B la cellule qui contient "Toto" et on attribue la référence de cette cellule à la variable Pos_comp.
    Si cette cellule existe, on définit "MaPlage" qui correspond à la plage qui débute à Pos_comp et finit à la derniere cellule de la colonne.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Option Explicit
    Sub Test()
    Dim Pos_comp As Range, MaPlage As Range
    Dim Search As String
        Search = "Toto"
        With Worksheets("wkst")
            Set Pos_comp = .Range("B:B").Find(Search, LookIn:=xlFormulas, lookat:=xlWhole)
            If Not Pos_comp Is Nothing Then
                Set MaPlage = .Range(Pos_comp, .Cells(.Rows.Count, Pos_comp.Column))
            End If
            MsgBox "Plage : " & MaPlage.Address
        End With
        Set MaPlage = Nothing: Set Pos_comp = Nothing
    End Sub
    Pour autant, à quoi sert ".Rows.Count" ?
    Rows.count indique le nombre de lignes de ta feuille.
    Il est préférablede l'utiliser plutôt que d'indiquer "en dur" le nombre de ligne (65635 dans ton cas) car ce nombre est différent suivant la version XL.


    Cordialement.

  7. #7
    Membre Expert
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2011
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2011
    Messages : 1 503
    Par défaut
    Ok super, j'ai pigé !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .Range(Pos_comp, .Cells(.Rows.Count, Pos_comp.Column))
    => Pos_comp = position initiale
    => .Cells(.Rows.Count, Pos_comp.Column) est la cellule qui se situe en "dernière ligne de l'onglet" (.Rows.Count) et "à la colonne de Pos_comp" (Pos_comp.Column).

    Je ne sais pas si c'est plus "optimisé" mais tu as répondu à ma question !

    Merci bcp ! =)

    Bien à toi !

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

Discussions similaires

  1. Changement de style lors du focus sur une cellule
    Par zyg dans le forum Général JavaScript
    Réponses: 13
    Dernier message: 23/12/2005, 10h29
  2. Besoin d'une petite aide:onclick sur une cellule
    Par pierrot10 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 29/11/2005, 08h47
  3. [Optimisation] Problème sur une requête UNION.
    Par françois62 dans le forum Requêtes
    Réponses: 5
    Dernier message: 28/06/2005, 16h08
  4. Focus sur une cellule spécifique d'un DBGrid
    Par danbern dans le forum Bases de données
    Réponses: 4
    Dernier message: 25/11/2004, 19h04
  5. capter l'evenement clic sur une cellule d'un string grid
    Par lasconic dans le forum Composants VCL
    Réponses: 3
    Dernier message: 25/06/2003, 10h51

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