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 :

Boucle For Next : comment passer à la feuille suivante suite à un Find infructueux ?


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Directeur commercial
    Inscrit en
    Janvier 2019
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Directeur commercial

    Informations forums :
    Inscription : Janvier 2019
    Messages : 5
    Par défaut Boucle For Next : comment passer à la feuille suivante suite à un Find infructueux ?
    Bonjour à tous,
    Je n'arrive pas à trouver le code qui permette, dans ma boucle For Next, de passer à la feuille suivante si mon Find est infructueux...
    Le code ci-dessous If CEL Is Nothing Then Exit For me fait "sortir" complètement de ma boucle For Next si une feuille ne contient pas ma recherche.
    Quelqu'un connaît-il le bon code (sachant que je ne souhaite pas basculer sur un For Each WS qui ne fonctionne pas sur ma version Excel - cf précédent post) ?
    Mille mercis par avance
    Conciliator


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
        k = Worksheets.Count
        For i = 1 To k
        Worksheets(i).Activate
        Cells.Replace What:="2-0.04", Replacement:="2-0.032"
        Set CEL = Cells.Find(What:="2-0.032")
        If CEL Is Nothing Then Exit For
        .../... 'suite du code
        Next i

  2. #2
    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 : 68
    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 Conciliator, et bienvenu sur le Forum,

    S'il te plaît, balise ton code avec #. Il n'en sera que plus lisible.
    Il n'est pas besoin d'activer une feuille pour lui affecter méthodes et propriétés.

    de passer à la feuille suivante si mon Find est infructueux
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If CEL Is Nothing Then Exit For
    Ces 2 phrases sont contradictoires.
    Il te faut balayer les feuilles avant de sortir de la boucle.
    Pour ce faire, tu peux placer une étiquette avant l'instruction et t'y référer en cas d'échec de la recherche.
    Ou mieux, gérer le fait que la cellule cherchée n'est pas rien, autrement dit la condition opposée à celle que tu as considérée

  3. #3
    Membre expérimenté
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2018
    Messages
    254
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2018
    Messages : 254
    Par défaut
    Bonjour,

    Le On Error Resume Next peut être une solution,

    Tu peux aller voir les méthodes de gestion des erreurs sur VBA en suivant le lien ci-dessous:

    https://silkyroad.developpez.com/VBA...eurs/#LIII-D-4

    Bonne journée à toi,

  4. #4
    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 : 68
    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 Trystan,

    Il n'y a pas d'erreur dans le code.
    La problématique réside ici en l'inefficacité de celui-ci.

  5. #5
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    Bonjour

    Question:
    1. pourquoi fait tu un replacement systematique
    2. y a t-il la possibilité qu'il y est plusieurs "2-0.04" dans les sheets
    3. faut-il toute les mettre a jour si plusieurs cellules
    4. ton '.../..reste du code" doit se passer en fonction de la recherche ou tout a fait apres la boucle
    5. faut -il operer un find next pour chopper toutes les occurences et operer un code a la suite poiur chaque occurences


    en fonction des details que tu donne ceci correspond a ta macro
    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
     
    Sub test()
       Dim k 
        k = ThisWorkbook.Worksheets.Count
        For i = 1 To k
            With Worksheets(i)
                Set cel = .Cells.Find(What:="2-0.04", LookIn:=xlValues,lookat:=xlWhole)
                If Not cel Is Nothing Then
                    '.Activate (facultatif)
                    cel.Value = "2-0.032"
                   'si plusieurs faut-il toutes les mettre a jour 
                   'ce que tu veux faire d'autre en fonction si trouvé!! ou pas ici
                    '......
                End If
            End With
        Next i
        'suite du code apres le replacement
        '.....
    End Sub
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  6. #6
    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 : 68
    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 Patrick,

    Sauf erreur, ce sont toutes les valeurs qui sont à remplacer.
    Si tel est le cas, alors mieux vaut utiliser l'exemple classique reportée par Microsoft dans l'aide sur la méthode Find

  7. #7
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    Bonjour Marcel

    c'est pas sur ca
    tout du moins c'est pas la ou je veux en venir
    son "reste du code" dans la boucle il fait quoi en fonction de quoi (d'une cellule/chaque occurence )
    l'organisation du code en est tout a fait différent

    je pense que avant tout il doit nous dire ce qu'il souhaiterais en terme clair sans language informatique

    et peut etre meme que find sera inutile
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    Directeur commercial
    Inscrit en
    Janvier 2019
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Directeur commercial

    Informations forums :
    Inscription : Janvier 2019
    Messages : 5
    Par défaut
    Bonjour à vous 3,
    Merci pour vos réponses. Je vois qu'il y a vraiment du 'lourd' sur le forum. J'ai essayé de comprendre et d'appliquer vos conseils et propositions. Très sincèrement je n'ai pas du tout votre niveau.
    En tout cas je vous ai mis le code entier (pour cette boucle) et c'est en remplaçant If CEL Is Nothing Then Exit For par la proposition de Trystan441 On Error Resume Next que ça fonctionne le mieux sans trop toucher mon code. Merci Trystan441 et merci aussi à MarcelG et patricktoulon.
    J'ai appris plein de chose à vous lire.
    Effectivement, le code qui suit est un filldown car la séquence doit être reproduite sur la colonne jusqu'à un certain niveau.
    Les temps de pause sont là pour que les personnes qui vont appliquer mon cheval de Troie constate que les changements s'opèrent sur leur fichier sinon ils pensent que les modifications n'ont pas été réalisées...
    Excellente soirée et week-end.
    Conciliator

    ps : MarcelG, j'ai mis des # mais je ne trouve pas le résultat probant...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    For i = 1 To k
        Worksheets(i).Activate
        Application.Wait Time + TimeSerial(0, 0, 1)
        lignetotal = ActiveSheet.Range("A100").End(xlUp).Row - 2
        Cells.Replace What:="2-0.04", Replacement:="2-0.032"
        Range("A1").Select
        Set CEL = Cells.Find(What:="2-0.032")
        On Error Resume Next
        Range(CEL.Address, CEL.Offset(lignetotal, 0)).Select
        Selection.FillDown
        Range("A1").Select
        Application.Wait Time + TimeSerial(0, 0, 1)
            Next i

  9. #9
    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 : 68
    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 Conciliator,

    Je ne suis pas bien sûr (litote) que les méthodes aient un quelconque apport à cette procédure.
    Au contraire, elles en rendent la lecture moins aisée.

    Bonne continuation et au plaisir de te retrouver.

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

Discussions similaires

  1. Passer à la feuille suivante dans une boucle
    Par Nathan_8569 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 19/04/2017, 16h18
  2. Réponses: 5
    Dernier message: 27/11/2008, 18h34
  3. boucle for next ? peut être mais comment
    Par caro2552 dans le forum VBA Access
    Réponses: 11
    Dernier message: 07/02/2007, 21h26
  4. Réponses: 3
    Dernier message: 03/11/2005, 20h22
  5. Etat : comment passer à la page suivante
    Par Celia1303 dans le forum Access
    Réponses: 2
    Dernier message: 26/10/2005, 17h45

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