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 :

Erreur avec FindNext


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    apt
    apt est déconnecté
    Membre éclairé
    Inscrit en
    Mai 2002
    Messages
    867
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 867
    Par défaut Erreur avec FindNext
    Bonjour à tous,

    Dans le code ci-dessous, j’utilise Find et FindNext pour parcourir une plage de cellules issues d’un filtre automatique (Plage discontinue).

    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
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    Sub test()
        Dim Zone As Range, C, Depart As String
        Dim MonDico As Object
        Dim Cel As Range, Rng As Range, Rng2 As Range
        Dim i As Integer
     
        With Worksheets(1)
            With .Range("A1:B" & .Cells(.Rows.Count, 1).End(xlUp).Row)
                .AutoFilter
                .AutoFilter Field:=2, Criteria1:="EVR"
            End With
        End With
        With ActiveSheet.AutoFilter.Range
            On Error Resume Next
            Set Rng2 = .Offset(1, 0).Resize(.Rows.Count - 1, 6) _
                       .SpecialCells(xlCellTypeVisible)
            On Error GoTo 0
        End With
        If Rng2 Is Nothing Then
            MsgBox "No data to copy"
            Exit Sub
        Else
     
            Set MonDico = CreateObject("Scripting.Dictionary")
            Set Zone = Intersect(Rng2, [A:A])
     
            MsgBox "Zone : " & Zone.Address
     
            ' -- Noms sans doublons
            For Each Cel In Zone
                If Not MonDico.Exists(Trim(Cel.Value)) Then MonDico.Add Trim(Cel.Value), Trim(Cel.Value)
            Next Cel
     
            For Each C In MonDico.Keys
                Set Cel = Zone.Find(what:=Trim(C), LookIn:=xlValues, lookat:=xlPart)
                If Not Cel Is Nothing Then
                    Depart = Cel.Address
                    i = i + 1
                    Do
                        MsgBox "Cel : " & Cel & ", ligne i : " & i
                        Set Cel = Zone.FindNext(C)
                    Loop While Not Cel Is Nothing And Depart <> Cel.Address
                End If
     
            Next C
        End If
        ActiveSheet.ShowAllData
     
    End Sub
    Mais L’exécution du code s’arrête à la ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set Cel = Zone.FindNext(C)
    Avec cette erreur :

    Erreur d’exécution : 1004
    Impossible de lire la propriété FindNext de la classe range
    http://cjoint.com/?CKvuYCYTA7x

    Merci d’avance.

  2. #2
    Membre extrêmement actif
    Homme Profil pro
    Inscrit en
    Septembre 2013
    Messages
    1 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 1 369
    Par défaut
    Bonjour,

    Ci dessous, un essai qui fonctionne.

    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
     
    Sub cherche_plusieurs()
      Set mondico = CreateObject("Scripting.Dictionary")
      For Each c In Range("a2", [a65000].End(xlUp))
        mondico(c.Value) = ""
      Next c
      [d1].Resize(, mondico.Count) = mondico.keys
      [A:B].Interior.ColorIndex = xlNone
      Set zone = [_FilterDataBase].Resize(, 1).SpecialCells(xlCellTypeVisible)
      For Each elem In mondico.keys
         Set c = zone.Find(elem, , , xlWhole)
         If Not c Is Nothing Then
           premier = c.Address
           Do
            c.Resize(, 2).Interior.ColorIndex = 4
            Set c = zone.FindNext(c)
           Loop While Not c Is Nothing And c.Address <> premier
         End If
         Stop
       Next elem
    End Sub
    Jacques Boisgontier
    Fichiers attachés Fichiers attachés

  3. #3
    Membre extrêmement actif
    Avatar de NVCfrm
    Homme Profil pro
    Administrateur Système/Réseaux - Developpeur - Consultant
    Inscrit en
    Décembre 2012
    Messages
    1 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Administrateur Système/Réseaux - Developpeur - Consultant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2012
    Messages : 1 037
    Billets dans le blog
    5
    Par défaut
    Bonsoir,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set Cel = Zone.FindNext(C)
    plutôt:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set Cel = Zone.FindNext(Cel)
    L'approche est de toute façon mal faite. Puisque tu ne boucles pas sur les areas en externe de la boucle Find.

  4. #4
    apt
    apt est déconnecté
    Membre éclairé
    Inscrit en
    Mai 2002
    Messages
    867
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 867
    Par défaut
    Bonsoir JB, NVCfrm, mercatog,

    merci pour réponses.

    Citation Envoyé par NVCfrm Voir le message
    L'approche est de toute façon mal faite. Puisque tu ne boucles pas sur les areas en externe de la boucle Find.
    Comment cela ?

  5. #5
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set Cel = Zone.FindNext(Cel)

Discussions similaires

  1. Erreur Avec Interbase
    Par smokemon dans le forum Bases de données
    Réponses: 1
    Dernier message: 29/10/2004, 07h24
  2. Erreur avec procédure LockWorkStation ...
    Par simonseztech dans le forum API, COM et SDKs
    Réponses: 4
    Dernier message: 16/08/2004, 15h33
  3. [Débutant][Conception] Erreur avec une classe interne
    Par Devil Redneck dans le forum Général Java
    Réponses: 5
    Dernier message: 11/06/2004, 15h45
  4. Erreur avec les ADO
    Par megane dans le forum Bases de données
    Réponses: 7
    Dernier message: 08/03/2004, 21h37
  5. Erreur avec WM_COMMAND (BN_CLICKED)
    Par cyberlewis dans le forum Windows
    Réponses: 2
    Dernier message: 09/02/2004, 00h25

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