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 :

Recherche VBA avec condition


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Avril 2012
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien réseau

    Informations forums :
    Inscription : Avril 2012
    Messages : 83
    Par défaut Recherche VBA avec condition
    Bonjour à tous !

    Je suis bloqué sur cette macro qui permettra d'effectuer une recherche.
    Il y a un message d'erreur sur la variable de "b" alors que je la déclare.

    Mon but :
    - Faire une recherche en fonction des colonnes b de destination et ma feuille source en colonne y
    - S'il trouve il renvoi la valeur de la cellule WsSrc vers wsDest
    - s'il celle-ci ne pas égale à OK.

    c'est toujours difficile de décrire ce que l'on veut obtenir.
    Mais bon je pense que j'ai un bon début mais je bloque sur ce message d'erreur
    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
    Sub Modif_localistion()
    Dim cell As Range
    Dim WsSrc As Worksheet
    Dim WsDest As Worksheet
     
    Set WsSrc = Worksheets("Modif")
    Set WsDest = Worksheets("SCDM")
     
    For Each cell In WsDest.Range("b1:b" & WsDest.Range("b" & Rows.Count).End(xlUp).Row)
        Set b = WsSrc.Range("y:y").Find(cell, LookIn:=xlValues, LookAt:=xlWhole)
     
        If Not b Is Nothing Then
           If WsSrc.Range("o:o", "p:p", "q:q").Value = "OK" Is Nothing Then
     
            With WsDest
                .Cells(cell.Row, 29) = WsSrc.Cells(cell.Row, 14) 'Modif du bureau
                .Cells(cell.Row, 28) = WsSrc.Cells(cell.Row, 15) 'Modif de l'étage
                .Cells(cell.Row, 27) = WsSrc.Cells(cell.Row, 16) 'Modif Tour
            End With
           End If
        End If
        Next cell
    End Sub
    help !!!

  2. #2
    Expert confirmé Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Par défaut
    Bonsoir,
    Il y a un message d'erreur sur la variable de "b" alors que je la déclare.
    elle est déclarée ou et comment ?
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur :resolu: si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  3. #3
    Membre confirmé
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Avril 2012
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien réseau

    Informations forums :
    Inscription : Avril 2012
    Messages : 83
    Par défaut
    a niveau
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set b = WsSrc.Range("y:y").Find(cell, LookIn:=xlValues, LookAt:=xlWhole)
    Normalement, il ne devrait pas faire de message d'erreur.
    je ne comprends pas, je suis encore trop novice mais je m'aperçois que certaines macro sont trop pratiques.

    Merci ton aide

  4. #4
    Expert confirmé Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Par défaut
    a niveau
    qu'est-ce que ça veut dire ?

    As-tu avant, en tete de module un

    ou
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur :resolu: si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  5. #5
    Membre confirmé
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Avril 2012
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien réseau

    Informations forums :
    Inscription : Avril 2012
    Messages : 83
    Par défaut
    Au finale j'ai trouver l'erreur mais je ne parviens pas obtenir le resultat voulu

    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
    Sub Modif_localisation()
    Dim cell As Range
    Dim WsSrc As Worksheet
    Dim WsDest As Worksheet
     
    Set WsSrc = Worksheets("Modif")
    Set WsDest = Worksheets("SCDM")
     
    For Each cell In WsDest.Range("b1:b" & WsDest.Range("c" & Rows.Count).End(xlUp).Row)
        Set c = WsSrc.Range("y:y").Find(cell, LookIn:=xlValues, LookAt:=xlWhole)
     
        If Not c Is Nothing Then
           If WsSrc.Range("P" & cell.Row) <> "OK" Then
            If WsSrc.Range("O" & cell.Row) <> "OK" Then
             If WsSrc.Range("Q" & cell.Row) <> "OK" Then
               With WsDest
                .Cells(cell.Row, 29) = WsSrc.Cells(cell.Row, 15) 'Modif du bureau
                .Cells(cell.Row, 28) = WsSrc.Cells(cell.Row, 16) 'Modif de l'étage
                .Cells(cell.Row, 27) = WsSrc.Cells(cell.Row, 17) 'Modif Tour
            End With
           End If
         End If
        End If
      End If
    Next cell
    End Sub
    Je cherche à faire en sorte que lorsque la valeur de la cellule est égale "OK" il ne faut pas importer la valeur dans WsDest.

    Comment faire pour lorsqu’il trouve "OK" dans une cellule de ne pas importé la valeur?

  6. #6
    Membre confirmé
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Avril 2012
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien réseau

    Informations forums :
    Inscription : Avril 2012
    Messages : 83
    Par défaut
    Bon je sais difficile de me faire comprendre mais en creusant un peu j'ai pu trouver une solution.
    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
    Sub Modif_localisation()
    Dim cell As Range
    Dim WsSrc As Worksheet
    Dim WsDest As Worksheet
     
    Set WsSrc = Worksheets("Modif")
    Set WsDest = Worksheets(" SCDM")
     
    For Each cell In WsDest.Range("b1:b" & WsDest.Range("c" & Rows.Count).End(xlUp).Row)
        Set c = WsSrc.Range("y:y").Find(cell, LookIn:=xlValues, LookAt:=xlWhole)
     
        If Not c Is Nothing Then
        If WsSrc.Range("Q" & c.Row) <> "OK" Then ' Si la valeur dans la colonne Q n'est pas égale à OK
           With WsDest
                .Cells(cell.Row, 27) = WsSrc.Cells(cell.Row, 17) ' corrige la tour
           End With
    Else
        If WsSrc.Range("P" & c.Row) <> "OK" Then 'Si la valeur dans la colonne P n'est pas égale à OK
           With WsDest
                .Cells(cell.Row, 28) = WsSrc.Cells(cell.Row, 16) ' Corrige l'étage
            End With
    Else
        If WsSrc.Range("O" & c.Row) <> "OK" Then 'Si la valeur dans la colonne O n'est pas égale à OK
               With WsDest
                .Cells(cell.Row, 29) = WsSrc.Cells(cell.Row, 15) 'Corrige Office
               End With
          End If
        End If
      End If
      End If
    Next cell
    End Sub
    Reste à le mettre en forme comme un vrai code VBA

    Merci à tous !

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

Discussions similaires

  1. [XL-2007] Recherche VBA avec condition
    Par Leodams dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 20/06/2013, 12h40
  2. [XL-2010] Macro ou Formule pour une recherche verticale avec condition
    Par Orsaylg dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 15/09/2010, 13h22
  3. [XL-2003] Recherche valeur avec condition
    Par Jeyjey1 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 01/02/2010, 12h03
  4. numérotation en vba avec condition
    Par nrdz83 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 26/01/2010, 20h06
  5. [XL-2003] Recherche multicritere avec condition
    Par doudou1609 dans le forum Excel
    Réponses: 4
    Dernier message: 15/04/2009, 17h24

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