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 :

Do while Loop [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 93
    Par défaut Do while Loop
    Bonjour,

    Je souhaiterais à l'aide d'une macro recherche un numéro sur toutes les feuilles et dans toutes les cellules existantes.

    Pour ce faire je souhaiterais utilisé un do/loop. Je me sert de ce do/loop pour trouver une feuille par rapport à son nom :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
    Dim ind As Integer
     
    Do While ind <= ThisWorkbook.Sheets.Count
     If ThisWorkbook.Sheets(ind).Name = ThisWorkbook.Sheets("Feuil1").Range("A50").Text Then
                Exit Do
            End If
        ind = ind + 1
    Loop
    Il me faudrait quelque chose de simillaire mais comme dit pour trouver dans une cellule d'une feuille autre que ma feuil1 la valeur donnée.

  2. #2
    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
    Bonjour

    Pour ton cas, une proposition avec For Each Next (on connait la collection des feuilles de ton classeur)
    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 Sh As Worksheet
    Dim c As Range
    Dim Rech As String
    Dim Trouve As Boolean
     
    Rech = "toto"                                    'Mot à rechercher
    For Each Sh In ThisWorkbook.Worksheets           'Pour chaque feuille dans ce classeur
        If Sh.Name <> "Feuil1" Then                  'Si le nom de la feuille est différent de Feuil1
            Set c = Sh.UsedRange.Find(Rech, LookIn:=xlValues, LookAt:=xlWhole)    'on fais la recherche du mot dans la feuille
            If Not c Is Nothing Then
                MsgBox "Occurence du mot " & Rech & " trouvée en " & Sh.Name & "!" & c.Address(0, 0)
                Set c = Nothing
                Trouve = True
            End If
        End If
    Next Sh
    If Not Trouve Then MsgBox "Aucune occurence du mot " & Rech
    End Sub

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 93
    Par défaut
    Merci Mercatog pour ta réponse, j'ai facilement pu l'adapté à ma macro.

    Petites question : la valeur cherchée ne peut être présente qu'à un seul autre endroit que la feuil1. Il ne peut y avoir cette valeur sur plusieurs feuilles ou plusieurs cellules. Donc est ce qu'un Do/Loop ne serait pas mieux?

  4. #4
    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
    Pour arrêter la recherche dès que le mot cherché est trouvé, j'ai ajouté un Exit For
    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 Test()
    Dim Sh As Worksheet
    Dim c As Range
    Dim Rech As String
    Dim Trouve As Boolean
     
    Rech = "toto"                                    'Mot à rechercher
    For Each Sh In ThisWorkbook.Worksheets           'Pour chaque feuille dans ce classeur
        If Sh.Name <> "Feuil1" Then                  'Si le nom de la feuille est différent de Feuil1
            Set c = Sh.UsedRange.Find(Rech, LookIn:=xlValues, LookAt:=xlWhole)    'on fais la recherche du mot dans la feuille
            If Not c Is Nothing Then
                MsgBox "Occurence du mot " & Rech & " trouvée en " & Sh.Name & "!" & c.Address(0, 0)
                Set c = Nothing
                Trouve = True
                Exit For                             'Ici pour arrêter la recherche dans les autres feuilles dès qu'on trouve le mot recherché
            End If
        End If
    Next Sh
    If Not Trouve Then MsgBox "Aucune occurence du mot " & Rech
    End Sub

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 93
    Par défaut
    Re,

    Dans ta macro le resultat de la recherche c'est "c"? Et "c" est une cellule?

  6. #6
    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
    En effet, "c" est la cellule trouvé (de type Range) avec:
    c.address son adresse
    c.value sa valeur
    c.row sa ligne
    c.column sa colonne

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

Discussions similaires

  1. Problème avec une boucle de type Do While =>Loop
    Par Runsh63 dans le forum Macros et VBA Excel
    Réponses: 14
    Dernier message: 23/09/2011, 08h53
  2. continue; et incrementation dans une while loop !
    Par el_bacha dans le forum Langage
    Réponses: 2
    Dernier message: 02/05/2011, 01h23
  3. [XL-2007] Structure Do While loop
    Par carlux3 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 23/11/2010, 12h26
  4. boucle while loop trop lente et pennible
    Par jm_force dans le forum Access
    Réponses: 3
    Dernier message: 10/08/2006, 17h36
  5. Réponses: 13
    Dernier message: 20/03/2006, 16h26

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