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 :

[VBA-E] Find + condition + attribution variable


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 38
    Par défaut [VBA-E] Find + condition + attribution variable
    Bonjour, bonjour...me revoilà

    Voilà ce que je souhaite faire :

    1) Sélectionner une cellule précise;
    2) Lancer une recherche seulement dans la colonne où se trouve la cellule sélectionnée;
    3) Etant donné que plusieurs résultats peuvent correspondre mais qu'un seul m'intéresse, je voudrais associer une condition au résultat pour affiner : En gros, si la valeur de la colonne A, même ligne que le résultat de la recherche, est égale à 16h, c'est la bonne valeur sinon, on passe au résultat suivant.
    4) Pour terminer, une fois que le bon résultat est trouvé, je voudrais associer la valeur qui se trouve dans la colonne (à droite) voisine, même ligne à une variable "Bid".

    Voilà, j'espère que j'ai été assez clair

    Pour le moment, j'ai fait ça...

    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    Dim DateCalcul As Date, Recherche As Variant
    Dim AdresseRésultat1 As String, Bid As Variant
     
    DateCalcul = "12/03/2007"
     
    ActiveCell.Offset(0, -1).Select
    Columns(ActiveCell.Column).Select
     
    With Selection
     
    Set Recherche = .Find(What:=DateCalcul, after:=ActiveCell, _
            LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, _
            SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False).Activate
     
        If Not Recherche Is Nothing Then
            Do
                AdresseRésultat1 = ActiveCell.Address
     
                    If Range("A" & ActiveCell.Row) = "16h" Then
                        ActiveCell.Offset(0, 1).Select
                        Bid = ActiveCell.Value
                        Exit Do
                    End If
     
                Set Recherche = .FindNext(after:=ActiveCell).Activate
     
                    If Recherche.Address = AdresseRésultat1 Then
                        Exit Do
                    End If
            Loop
        End If
    End With
    ...mais ça ne fonctionne pas...je ne vois pas trop ce qui cloche, je pensais pourtant toucher au but ??

    Merci pour votre aide

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 38
    Par défaut
    Après quelques modifications, ça a l'air de fonctionner...mais il y a peut-être plus "propre" ?

    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    'On Error Resume Next
     
    Dim DateCalcul As Date, Recherche As Variant
    Dim AdresseRésultat1 As String, Bid As Variant
     
    DateCalcul = "12/03/2007"
     
    ActiveCell.Offset(0, -1).Select
    Columns(ActiveCell.Column).Select
     
    With ActiveSheet.Columns(ActiveCell.Column)
     
    Set Recherche = .Find(What:=DateCalcul, _
            LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, _
            SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False)
     
    Recherche.Activate
     
    AdresseRésultat1 = Recherche.Address
     
        If Not Recherche Is Nothing Then
            Do
                If Range("A" & ActiveCell.Row) = "16h" Then
                    ActiveCell.Offset(0, 1).Select
                    Bid = ActiveCell.Value
                    Exit Do
                End If
     
                Set Recherche = .FindNext(after:=ActiveCell)
     
                Recherche.Activate
     
                    If Recherche.Address = AdresseRésultat1 Then
                        Exit Do
                    End If
            Loop
        End If
    End With

  3. #3
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Oui, tu peux simplifier si tu effectues une recherche sur les lignes d'une seule colonne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
                Do
                    NoLigne = Recherche.Row + 1 'on mémorise le N° de ligne
                    'Tu places ton saut de page
                    Set Recherche = .FindNext(Recherche)
                Loop While Not Recherche Is Nothing And Recherche.Row > NoLigne
    Tu rajoutes ton code dans la boucle
    Ce code t'évite ces trois lignes
    If Recherche.Address = AdresseRésultat1 Then
    ......Exit Do
    End If
    (Recherche.activate te sert à quoi ?)

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 38
    Par défaut
    Merci

    J'ai remarqué que si je ne sélectionnais pas la cellule contenant le résultat de la recherche (donc Recherche.activate), ceci ne fonctionnait pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    If Range("A" & ActiveCell.Row) = "16h" Then
                    ActiveCell.Offset(0, 1).Select

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

Discussions similaires

  1. [AC-2010] Query SQL VBA (Insert INTO) avec Conditions en variable (Date)
    Par Deustalos dans le forum Requêtes et SQL.
    Réponses: 7
    Dernier message: 12/03/2015, 21h15
  2. [VBA] taille max d'une variable public
    Par gigs dans le forum Général VBA
    Réponses: 9
    Dernier message: 23/11/2005, 15h27
  3. [VBA] Mettre un tableau de variable en paramètre
    Par loacast dans le forum Général VBA
    Réponses: 10
    Dernier message: 15/11/2005, 11h28
  4. [MFC] Portée d'attributs/variables ?
    Par BaBeuH dans le forum MFC
    Réponses: 4
    Dernier message: 14/06/2005, 10h31
  5. [VBA-E]modifier les attributs d'un commentaire dans une cellule
    Par Olivier vb dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 15/03/2004, 10h26

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