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 :

Find sur doublons


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
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 93
    Par défaut Find sur doublons
    Bonjour tout le monde

    je lance mon programme de recherche qui grace a la fonction FIND je dois effectuer des actions sur le champ souhaité ,sauf que le fonction FIND ne détecte pas les doublons .

    comment faire pour que la fonction FINF cible tout les champs en double voir plus ??, car dans mon cas la fonction une fois qu'elle trouve un champs elle ne cherche pas s'il y a un doublons !!

    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
    Sub Findq(CIBLE, ligne, WBC)
    Dim x As Variant
    Dim Val As Range
     Application.ScreenUpdating = False
      Application.DisplayAlerts = False
     Set WBS = Workbooks.Open("C:\Documents\Desktop\recap.xls")
     With WBS
     Set Val = WBS.Sheets(2).Columns("A:A").Find(CIBLE, LookIn:=xlValues)
     If Not Val Is Nothing Then
                   WBC.Worksheets(3).Range("C" & ligne) = WBS.Worksheets(2).Cells(Val.Row, 12).Value
          'WBC.Worksheets(3).Range("J" & ligne) = WBS.Worksheets(1).Cells(Val.Row, 6).Value
           Else
        'MsgBox  & CIBLE & " non trouvée dans la table de correspondance"
     End If
     End With
     WBS.Save
     WBS.Close
        Set WBS = Nothing
        Application.ScreenUpdating = True
    End Sub

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 107
    Par défaut
    Je ne l'ai pas testé mais cela devrait faire l'affaire.

    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 Findq(CIBLE, Ligne, WBC)
        Dim Val As Range
        Dim i As Long, k As Long
     
        Application.ScreenUpdating = False
        Application.DisplayAlerts = False
        Set WBS = Workbooks.Open("C:\Documents\Desktop\recap.xls")
        With WBS.Worksheets(2)
            k = .Cells(.Rows.Count, 1).End(xlUp).Row
            Set Val = .Range(.Cells(1, 1), .Cells(k, 1)).Find(CIBLE, LookIn:=xlValues)
            If Not Val Is Nothing Then
                i = Val.Row
                    Do
                        WBC.Worksheets(3).Range("C" & Ligne) = .Cells(Val.Row, 12).Value
                        Ligne = Ligne + 1
                        If i = k Then GoTo 1
                        Set Val = .Range(.Cells(i, 1), .Cells(k, 1)).Find(CIBLE, LookIn:=xlValues)
                        If Val Is Nothing Then GoTo 1
                        If Val.Row = i Then GoTo 1
                        i = Val.Row
                    Loop
            Else
                GoTo 1
            End If
        End With
    1
        WBS.Save
        WBS.Close
        Set WBS = Nothing
        Application.ScreenUpdating = True
        Application.DisplayAlerts = True
    End Sub

  3. #3
    Membre émérite
    Homme Profil pro
    retraité
    Inscrit en
    Mai 2006
    Messages
    542
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Mai 2006
    Messages : 542
    Par défaut
    Bonsoir à tous

    Voici le petit code que je regarde à chaque fois que je veux faire un "Find :
    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
    Sub recherche()
    Dim c as range
    Dim firstAddress As String
    Dim ligne As Integer
    Dim mavar as Integer
     
    With Worksheets("Feuil1").Range("d:d")
     
    mavar = "3"
        Set c = .Find(mavar, LookIn:=xlValues, Lookat:=xlWhole) 
    ' Lookat:=xlwhole => recherche exacte, cad la cellule entière
    ' Lookat:=xlPart   => recherche dans la cellule n'importe où
        If Not c Is Nothing Then
            firstAddress = c.Address
            Do
                'ce que tu veux faire      
                ligne = c.Row
                If Range("C" & c.Row) = "ABCD" Then
                     Range("C" & c.Row).Interior.ColorIndex = 6
                     MsgBox "Gagné ! "
                End If
                'fin de ce que tu veux faire
     
                Set c = .FindNext(c)
            Loop While Not c Is Nothing And c.Address <> firstAddress
        End If
    End With
     
    End Sub
    Cela cherche TOUS les "mavar".
    Tu n'as plus qu'à l'adapter
    Eric

  4. #4
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 93
    Par défaut
    Je vous remercie beaucoup de votre intervention tout les deux .
    passer par paramétre d'adresses de cellules est la solution la plus approprié dans ce genre de situation .
    trés instructif

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

Discussions similaires

  1. find sur un autre serveur ?
    Par gmonta31 dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 03/02/2007, 15h26
  2. "methode" Find sur une Recordset
    Par eclesia dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 18/01/2007, 08h55
  3. [SQL] Lire 1 seul enregistrement sur doublon
    Par lodan dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 15/08/2006, 22h51
  4. Trapper erreur sur doublon
    Par phil321 dans le forum Access
    Réponses: 2
    Dernier message: 07/08/2006, 14h55
  5. Réponses: 7
    Dernier message: 18/04/2006, 17h44

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