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 :

Instructions avant un Findnext


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Ecole d'ingénieur
    Inscrit en
    Novembre 2018
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ecole d'ingénieur

    Informations forums :
    Inscription : Novembre 2018
    Messages : 20
    Par défaut Instructions avant un Findnext
    Bonjour,

    j'aimerai exécuter des instructions avant de boucler avec un findnext.
    Je connais la structure de findnext. Je veux qu'au premier find, une série d'instructions soient faites exemple (copier coller, reprendre le premier mot de la ligne etc) ça je sais faire mais lorsque je veux mettre le findnext à la fin avec le fameux loop while not, j'ai une erreur d'exécution 91 : Variable objet ou variable de bloc with non définit. Et ne passe donc pas à l'itération suivante.

    Une idée ?

    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
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
     
    Option Explicit
     
    Sub Essai_Electrique_modelage()
     
    Dim zero As Range 'Variable qui permet de trouver et de copier à la suite
    Dim Essais As Variant ' Déclaration tableau
    Dim firstAddress As String
    Dim Essaidep As String 'Variable qui renvoie l'essai
    Dim Essainom As String 'Variable qui renvoie l'essai à n+1
    Dim Error As Integer
    Dim Error2 As Integer
    Dim Essaizero As String
    Dim derligne As Integer
    Dim i As Integer
    Dim lastname As String
    Dim Suiv As Range
    Dim secondAddress As String
     
    'Ecriture du tableau recompiler
            Essais = Array("Nom de l'essais", "Emplacement", "Durée Te(min)", "Dépendance", "Support", "Sous-tension")
     
            Cells(1, 12) = Essais(0)
     
            Cells(1, 13) = Essais(1)
     
            Cells(1, 14) = Essais(2)
     
            Cells(1, 15) = Essais(3)
     
            Cells(1, 16) = Essais(4)
     
    derligne = Range("G" & Rows.Count).End(xlUp).Row
     
     
     
     
     'Trouve la ligne de l'essai correspondant à la dep=0
     With ActiveSheet
    Set Suiv = Columns(7).Find(what:=0, LookIn:=xlValues, LookAt:=xlWhole)
     
      If Not Suiv Is Nothing Then
      secondAddress = Suiv.Address
     
      Do
                    Range(Range(Suiv, Suiv(1, 0)).End(xlToLeft), Range(Suiv, Suiv(1, 0)).End(xlToRight)).Select
                    Selection.Copy Destination:=Range("L" & Rows.Count).End(xlUp).Offset(1, 0)
     
     
                    Essaizero = Range("L" & Rows.Count).End(xlUp).Value
     
     
     
                    Essaidep = Essaizero
     
     
                    'Ecris dans le tableau les essais dont dépend l'essai à dépendance 0
     
                    Set zero = Columns(7).Find(what:=Essaidep, LookIn:=xlValues, LookAt:=xlWhole)
     
                      If Not zero Is Nothing Then
     
                      Do
                        firstAddress = zero.Address
                        If Not zero Is Nothing Then Range(Range(zero, zero(1, 0)).End(xlToLeft), Range(zero, zero(1, 0)).End(xlToRight)).Select
                        Selection.Copy Destination:=Range("L" & Rows.Count).End(xlUp).Offset(1, 0)
                        Set zero = Columns(7).FindNext(zero)
     
                    Loop While Not zero Is Nothing And zero.Address <> firstAddress
     
     
                    End If
     
     
                    'trouve le nom de l'essai correspondant à l'essai à dépendance n+1
                    Essainom = Range("L" & Rows.Count).End(xlUp).Value
     
     
                    Set zero = Columns(7).Find(what:=Essainom, LookIn:=xlValues, LookAt:=xlWhole)
     
                      If Not zero Is Nothing Then
                      firstAddress = zero.Address
                      Do
                        If Not zero Is Nothing Then Range(Range(zero, zero(1, 0)).End(xlToLeft), Range(zero, zero(1, 0)).End(xlToRight)).Select
                        Selection.Copy Destination:=Range("L" & Rows.Count).End(xlUp).Offset(1, 0)
                        Set zero = Columns(7).FindNext(zero)
     
                    Loop While Not zero Is Nothing And zero.Address <> firstAddress
     
                    End If
     
     
                    For i = 5 To derligne
     
                    lastname = Range("L" & Rows.Count).End(xlUp).Value
     
     
                    Set zero = Columns(7).Find(what:=lastname, LookIn:=xlValues, LookAt:=xlWhole)
     
                      If Not zero Is Nothing Then
                      firstAddress = zero.Address
                      Do
                        If Not zero Is Nothing Then Range(Range(zero, zero(1, 0)).End(xlToLeft), Range(zero, zero(1, 0)).End(xlToRight)).Select
                        Selection.Copy Destination:=Range("L" & Rows.Count).End(xlUp).Offset(1, 0)
                        Set zero = Columns(7).FindNext(zero)
     
                    Loop While Not zero Is Nothing And zero.Address <> firstAddress
     
                    End If
     
     
                     Next
     
                   Set Suiv = Columns(7).FindNext(Suiv)
     
    Loop While Not Suiv Is Nothing And Suiv.Address <> secondAddress
     
     
    End If
    End With
    End Sub

  2. #2
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    L'exemple qui est dans la doc Microsoft de cette méthode est nul (plus exactement dysfonctionnel).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Loop While Not Suiv Is Nothing And Suiv.Address <> secondAddress
    Quand la condition est testée, elle est testée dans son intégralité, aussi bien le Is Nothing que l'inégalité suivante.
    Donc, si FindNext ne trouve rien, il renvoie Nothing dans la variable Suiv.

    Le Is Nothing le détecte mais le reste de la condition est testé aussi.
    Or avec Suiv = Nothing, Suiv.Address va planter le code.

    Conclusion, il faut faire le test "Is Nothing" avant (et séparément" de l'inégalité sur Suiv.Address.

    En plus, perso, j'utilise toujours Find/FindNext avec un With pour être sûr qu'ils pointent sur le même objet.
    Je ne suis pas sûr qu'en indiquant un autre objet (même identique), VBA comprennent bien.
    Il se peut que je me trompe mais je ne prends jamais le risque.
    Dans ton cas, c'est d'autant plus risqué que tu mets visiblement deux Find différents suivis de FindNext.
    Ca, c'est vraiment chercher les problèmes....

  3. #3
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    Bonjour,

    Quelques remarques préliminaires:
    1 - Attacher les objets (ici Range) à leur parent (feuille) est fondamental si l'on souhaite y voir plus clair.
    Donc, tu peux utiliser le bloc With sur la feuille concernée et faire précéder tous tes objets Range de "." pour les rattacher.
    2 - Enlever ces p... de Select qui n'ajoutent rien au code si ce n'est de la confusion

    Apparemment, tu as utilisé l'aide de la méthode Find sur objet Range.
    A ceci près que la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    firstAddress = zero.Address
    doit être placé avant la boucle
    Do...Loop
    .

    Reviens avec un code épuré et testé.

  4. #4
    Membre averti
    Homme Profil pro
    Ecole d'ingénieur
    Inscrit en
    Novembre 2018
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ecole d'ingénieur

    Informations forums :
    Inscription : Novembre 2018
    Messages : 20
    Par défaut
    MarcelG :

    Merci de ta réponse.
    J'ai fais ce que tu as dis et placer des .Range avec With Activesheets en haut.
    Seulement comment puis-je enlever les .select sachant que c'est ce qui me sert à copier le range dans un autre tableau sur la même feuille créer au préalable en haut de mon code ?

    Menhir :
    Merci de ta réponse,

    J'ai remis des with Activesheet à chaque Find/Next.
    Comment puis-je placer les 2 test donc dont tu parles plus distinctement ?




    Cordialement à vous


    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
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    Option Explicit
     
    Sub Essai_Electrique_modelage()
     
    Dim zero As Range 'Variable qui permet de trouver et de copier à la suite
    Dim Essais As Variant ' Déclaration tableau
    Dim firstAddress As String
    Dim Essaidep As String 'Variable qui renvoie l'essai
    Dim Essainom As String 'Variable qui renvoie l'essai à n+1
    Dim Essaizero As String
    Dim derligne As Integer
    Dim i As Integer
    Dim lastname As String
    Dim Suiv As Range
    Dim secondAddress As String
     
    'Ecriture du tableau recompiler
            Essais = Array("Nom de l'essais", "Emplacement", "Durée Te(min)", "Dépendance", "Support", "Sous-tension")
     
            Cells(1, 12) = Essais(0)
     
            Cells(1, 13) = Essais(1)
     
            Cells(1, 14) = Essais(2)
     
            Cells(1, 15) = Essais(3)
     
            Cells(1, 16) = Essais(4)
     
     With ActiveSheet
     
    derligne = .Range("G" & Rows.Count).End(xlUp).Row
     
     
     
     
     'Trouve la ligne de l'essai correspondant à la dep=0
    Set Suiv = ActiveSheet.Columns(7).Find(what:=0, LookIn:=xlValues, LookAt:=xlWhole)
     
      If Not Suiv Is Nothing Then
      secondAddress = Suiv.Address
     
      Do
                    .Range(.Range(Suiv, Suiv(1, 0)).End(xlToLeft), .Range(Suiv, Suiv(1, 0)).End(xlToRight)).Select
                    Selection.Copy Destination:=.Range("L" & Rows.Count).End(xlUp).Offset(1, 0)
     
     
                    Essaizero = .Range("L" & Rows.Count).End(xlUp).Value
     
     
     
                    Essaidep = Essaizero
     
     
                    'Ecris dans le tableau les essais dont dépend l'essai à dépendance 0
                    With ActiveSheet
                    Set zero = ActiveSheet.Columns(7).Find(what:=Essaidep, LookIn:=xlValues, LookAt:=xlWhole)
     
                      If Not zero Is Nothing Then
                     firstAddress = zero.Address
     
                      Do
                        If Not zero Is Nothing Then .Range(Range(zero, zero(1, 0)).End(xlToLeft), .Range(zero, zero(1, 0)).End(xlToRight)).Select
                        Selection.Copy Destination:=.Range("L" & Rows.Count).End(xlUp).Offset(1, 0)
                        Set zero = ActiveSheet.Columns(7).FindNext(zero)
     
                    Loop While Not zero Is Nothing And zero.Address <> firstAddress
     
     
                    End If
                    End With
     
                    'trouve le nom de l'essai correspondant à l'essai à dépendance n+1
                    Essainom = .Range("L" & Rows.Count).End(xlUp).Value
     
                    With ActiveSheet
                    Set zero = ActiveSheet.Columns(7).Find(what:=Essainom, LookIn:=xlValues, LookAt:=xlWhole)
     
                      If Not zero Is Nothing Then
                      firstAddress = zero.Address
                      Do
                        If Not zero Is Nothing Then .Range(.Range(zero, zero(1, 0)).End(xlToLeft), .Range(zero, zero(1, 0)).End(xlToRight)).Select
                        Selection.Copy Destination:=.Range("L" & Rows.Count).End(xlUp).Offset(1, 0)
                        Set zero = ActiveSheet.Columns(7).FindNext(zero)
     
                    Loop While Not zero Is Nothing And zero.Address <> firstAddress
     
                    End If
                    End With
     
                    For i = 5 To derligne
     
                    lastname = .Range("L" & Rows.Count).End(xlUp).Value
     
                  With ActiveSheet
                    Set zero = ActiveSheet.Columns(7).Find(what:=lastname, LookIn:=xlValues, LookAt:=xlWhole)
     
                      If Not zero Is Nothing Then
                      firstAddress = zero.Address
                      Do
                        If Not zero Is Nothing Then .Range(.Range(zero, zero(1, 0)).End(xlToLeft), .Range(zero, zero(1, 0)).End(xlToRight)).Select
                        Selection.Copy Destination:=.Range("L" & Rows.Count).End(xlUp).Offset(1, 0)
                        Set zero = ActiveSheet.Columns(7).FindNext(zero)
     
                    Loop While Not zero Is Nothing And zero.Address <> firstAddress
     
                    End If
                    End With
     
                     Next
     
          Set Suiv = ActiveSheet.Columns(7).FindNext(Suiv)
     
    Loop While Not Suiv Is Nothing And Suiv.Address <> secondAddress
     
     
    End If
    End With
    End Sub

  5. #5
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    Salut Josh,

    Seulement comment puis-je enlever les .select sachant que c'est ce qui me sert à copier le range dans un autre tableau sur la même feuille créer au préalable en haut de mon code ?
    Justement! Tu n'en as pas besoin.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Range("A1").Select
    Selection.Copy
    se remplace par

    Sans m'avancer sur la proposition de Menhir, je te conseille d'adapter l'exemple donné par l'aide en ligne sur la méthode Find.

    Modifie ton code en fonction de ces remarques.
    Teste-le (éventuellement en pas à pas)
    N'hésite pas à revenir.

  6. #6
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par Josh.Bateman Voir le message
    Comment puis-je placer les 2 test donc dont tu parles plus distinctement ?
    Tu fais le test "Is Nothing" avec un If et si le test est concluent tu sors de la boucle avec un Exit Do.

    Mais ce n'est pas le plus gros problème de ton code.
    Le double Fin/FindNext imbriqués, ça ne peut pas fonctionner.

  7. #7
    Membre averti
    Homme Profil pro
    Ecole d'ingénieur
    Inscrit en
    Novembre 2018
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ecole d'ingénieur

    Informations forums :
    Inscription : Novembre 2018
    Messages : 20
    Par défaut
    J'ai réussi à avoir ce que je veux mais le seul soucis c'est qu'il fait une boucle infini.
    En effet, arriver au
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set Suiv = ActiveSheet.Columns(7).FindNext(Suiv)
    VBA ne sait plus ce que renvoi Suiv.
    J'ai donc pour test refais un Find avant le findnext pour lui remémorer le Suiv.
    Le problème naturellement posé après c'est que Suiv.Address sera toujours différent de secondAddress et fait donc une boucle infini.

    Voyez-vous comment contourner cela ?

    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
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    Option Explicit
     
    Sub Essai_Electrique_modelage()
     
    Dim zero As Range 'Variable qui permet de trouver et de copier à la suite
    Dim Essais As Variant ' Déclaration tableau
    Dim firstAddress As String
    Dim Essaidep As String 'Variable qui renvoie l'essai
    Dim Essainom As String 'Variable qui renvoie l'essai à n+1
    Dim Essaizero As String
    Dim derligne As Integer
    Dim i As Integer
    Dim lastname As String
    Dim Suiv As Range
    Dim secondAddress As String
     
    'Ecriture du tableau recompiler
            Essais = Array("Nom de l'essais", "Emplacement", "Durée Te(min)", "Dépendance", "Support", "Sous-tension")
     
            Cells(1, 12) = Essais(0)
     
            Cells(1, 13) = Essais(1)
     
            Cells(1, 14) = Essais(2)
     
            Cells(1, 15) = Essais(3)
     
            Cells(1, 16) = Essais(4)
     
     With ActiveSheet
     
    derligne = .Range("G" & Rows.Count).End(xlUp).Row
     
     
     
     
     'Trouve la ligne de l'essai correspondant à la dep=0
    Set Suiv = ActiveSheet.Columns(7).Find(what:=0, LookIn:=xlValues, LookAt:=xlWhole)
     
      If Not Suiv Is Nothing Then
      secondAddress = Suiv.Address
     
      Do
                    .Range(.Range(Suiv, Suiv(1, 0)).End(xlToLeft), .Range(Suiv, Suiv(1, 0)).End(xlToRight)).Select
                    Selection.Copy Destination:=.Range("L" & Rows.Count).End(xlUp).Offset(1, 0)
     
     
                    Essaizero = .Range("L" & Rows.Count).End(xlUp).Value
     
     
     
                    Essaidep = Essaizero
     
     
                    'Ecris dans le tableau les essais dont dépend l'essai à dépendance 0
                    With ActiveSheet
                    Set zero = ActiveSheet.Columns(7).Find(what:=Essaidep, LookIn:=xlValues, LookAt:=xlWhole)
     
                      If Not zero Is Nothing Then
                     firstAddress = zero.Address
     
                      Do
                        If Not zero Is Nothing Then .Range(Range(zero, zero(1, 0)).End(xlToLeft), .Range(zero, zero(1, 0)).End(xlToRight)).Select
                        Selection.Copy Destination:=.Range("L" & Rows.Count).End(xlUp).Offset(1, 0)
                        Set zero = ActiveSheet.Columns(7).FindNext(zero)
     
                    Loop While Not zero Is Nothing And zero.Address <> firstAddress
     
     
                    End If
                    End With
     
                    'trouve le nom de l'essai correspondant à l'essai à dépendance n+1
                    Essainom = .Range("L" & Rows.Count).End(xlUp).Value
     
                    With ActiveSheet
                    Set zero = ActiveSheet.Columns(7).Find(what:=Essainom, LookIn:=xlValues, LookAt:=xlWhole)
     
                      If Not zero Is Nothing Then
                      firstAddress = zero.Address
                      Do
                        If Not zero Is Nothing Then .Range(.Range(zero, zero(1, 0)).End(xlToLeft), .Range(zero, zero(1, 0)).End(xlToRight)).Select
                        Selection.Copy Destination:=.Range("L" & Rows.Count).End(xlUp).Offset(1, 0)
                        Set zero = ActiveSheet.Columns(7).FindNext(zero)
     
                    Loop While Not zero Is Nothing And zero.Address <> firstAddress
     
                    End If
                    End With
     
                    For i = 5 To derligne
     
                    lastname = .Range("L" & Rows.Count).End(xlUp).Value
     
                  With ActiveSheet
                    Set zero = ActiveSheet.Columns(7).Find(what:=lastname, LookIn:=xlValues, LookAt:=xlWhole)
     
                      If Not zero Is Nothing Then
                      firstAddress = zero.Address
                      Do
                        If Not zero Is Nothing Then .Range(.Range(zero, zero(1, 0)).End(xlToLeft), .Range(zero, zero(1, 0)).End(xlToRight)).Select
                        Selection.Copy Destination:=.Range("L" & Rows.Count).End(xlUp).Offset(1, 0)
                        Set zero = ActiveSheet.Columns(7).FindNext(zero)
     
                    Loop While Not zero Is Nothing And zero.Address <> firstAddress
     
                    End If
                    End With
     
                     Next
     
    Set Suiv = ActiveSheet.Columns(7).Find(what:=0, LookIn:=xlValues, LookAt:=xlWhole)
     
          Set Suiv = ActiveSheet.Columns(7).FindNext(Suiv)
     
     
    Loop While Not Suiv Is Nothing And Suiv.Address <> secondAddress
     
     
     
    End If
    End With
    End Sub

  8. #8
    Membre averti
    Homme Profil pro
    Ecole d'ingénieur
    Inscrit en
    Novembre 2018
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ecole d'ingénieur

    Informations forums :
    Inscription : Novembre 2018
    Messages : 20
    Par défaut
    Le double Fin/FindNext imbriqués, ça ne peut pas fonctionner.
    Si cela fonctionne mais le soucis c'est que ça fonctionne pour le premier trouver. Pas pour les autres que je veux trouver.
    La logique serait que :"Dès que tu me trouves ça, tu me cherches ça, tu me le copies et ensuite tu cherches ça dans ça, tu me le copies" et encore et encore. Mais si il ne trouve pas la deuxième chose qu'il doit me chercher, il passe à un autre ou là il cherchera les mêmes critères qu'il copiera etc.

    Je ne sais pas si c'est très clair mais c'est l'idée.

  9. #9
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par Josh.Bateman Voir le message
    Si cela fonctionne mais le soucis c'est que ça fonctionne pour le premier trouver. Pas pour les autres que je veux trouver.
    Ca fonctionne parce que tu remets un Find avant le FindNext, ce qui rend complètement inutile ta boucle.

    Je le répète, deux Find/FindNext imbriqués, ça ne fonctionne pas.

    Pour que ton code fonctionne avec ces deux recherches imbriquées, il faut oublier FindNext et ne faire que des Find, en modifiant à chaque tour de boucle la zone de recherche : tu prends comme départ de la zone de recherche, la cellule juste au dessous de celle trouvée par l'occurrence précédente du Find.

    En plus, avec cette méthode, tu n'as plus à comparer le résultat courant et le précédent.
    Il suffit d'attendre que Find renvoie Nothing pour la zone restante.

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

Discussions similaires

  1. [Python 3.X] (tkinter) Dernière instruction non exécutée avant sortie fenêtre
    Par Milag dans le forum Général Python
    Réponses: 8
    Dernier message: 25/03/2018, 18h48
  2. [XL-2003] Arret inexpliqué avant fin d'instructions d'une macro / raisons ?
    Par clent7550 dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 20/07/2011, 13h38
  3. Réponses: 3
    Dernier message: 21/12/2007, 14h10
  4. À lire OBLIGATOIREMENT avant de poster sur ce forum
    Par ok.Idriss dans le forum Débats sur le développement - Le Best Of
    Réponses: 2
    Dernier message: 24/09/2006, 23h21
  5. IMPORTANT! A lire avant tout chose
    Par Aurelien.Regat-Barrel dans le forum Windows
    Réponses: 0
    Dernier message: 01/05/2002, 16h55

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