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 :

objectisation d'une recherche et loop


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Octobre 2008
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 28
    Par défaut objectisation d'une recherche et loop
    voilà mon probleme, je fais ce code qui doit m'afficher l'adresse de la cellule ou est trouvée linfo que je veux chercher. Or, à chaque répétition jusqu'à 18, c'est la première adresse trouvée qui est répétée, le j incrémente l'inscription dans la case, mais pas la recherche.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub UAR()
    Dim j As Integer
    j = 5
    BL = Cells(5, j).Value
    With Workbooks("ApplicationsA123&UAR_All.xls").Worksheets("sheet1").Range("a1:aa40000")
    Set c = .Find(BL, LookIn:=xlValues)
    End With
    a = c.Address
    Do
    Cells(4, j) = a
    j = j + 1
    Loop While j < 18
    End Sub
    j'ai également un autre souci: quand je mets le loop avant j=j+1 la macro semble bugger et je dois faire un ctrl pause pour arreter la macro. Pourquoi ?

    Merci de vos réponses

    NulenVBA

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    753
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 753
    Par défaut
    Tu as le bouton de code qui te permet de rendre ton code plus lisible (et indente ton code ça sera encore plus lisible):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub UAR()
    Dim j As Integer
    j = 5
    BL = Cells(5, j).Value
    With Workbooks("ApplicationsA123&UAR_All.xls").Worksheets("sheet1").Range("a1:aa40000")
        Set c = .Find(BL, LookIn:=xlValues)
    End With
    a = c.Address
    Do
        Cells(4, j) = a
        j = j + 1
    Loop While j < 18
    End Sub
    Tout ce que je constate, c'est que ta boucle ne correspond pas du tout à ce que tu dis: je vois une boucle qui recopie dans plus de 10 cases l'adresse de la première cellule trouvée.

    As-tu essayé d'enregistrer une recherche ou tu fais une recherche, puis tu passes au résultat suivant en cliquant sur "suivant"? Tu mettras une partie du code obtenu à l'intérieur de ta boucle ça donnera de meilleurs résultats.

  3. #3
    Membre Expert Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 403
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 403
    Par défaut
    Citation Envoyé par decondelite Voir le message
    As-tu essayé d'enregistrer une recherche via l'enregistreur de macro où tu fais une recherche, puis tu passes au résultat suivant en cliquant sur "suivant"? Tu mettras une partie du code obtenu à l'intérieur de ta boucle ça donnera de meilleurs résultats.
    petite précision en gras, au cas ou ce ne serait pas clair.

    Salut Decondelite.

  4. #4
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Par défaut
    Citation Envoyé par NulenVBA Voir le message
    j'ai également un autre souci: quand je mets le loop avant j=j+1 la macro semble bugger et je dois faire un ctrl pause pour arreter la macro. Pourquoi ?
    parce qu'alors j ne s'incrémente pas dans ta boucle et que ta boucle ne s'arrête que lorsque J >= 18 !!!

  5. #5
    Membre chevronné
    Inscrit en
    Octobre 2008
    Messages
    273
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Octobre 2008
    Messages : 273
    Par défaut
    Bonjour,
    Tu as aussi l'aide de vba qui peut t'aider.
    Voici ce qu'elle donne pour find et findnext :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    With Worksheets(1).Range("a1:a500")
        Set c = .Find(2, lookin:=xlValues)
        If Not c Is Nothing Then
            firstAddress = c.Address
            Do
                c.Value = 5
                Set c = .FindNext(c)
            Loop While Not c Is Nothing And c.Address <> firstAddress
        End If
    End With
    j'ai également un autre souci: quand je mets le loop avant j=j+1 la macro semble bugger et je dois faire un ctrl pause pour arreter la macro. Pourquoi ?
    Comme l'a dit ucfoutu, si tu n''incrémente pas j entre do et loop, il va rester à sa valeur initiale (5 dans ton cas) et comme la boucle doit durer tant que j est différent de 18, tu créés une boucle infinie.

  6. #6
    Membre averti
    Inscrit en
    Octobre 2008
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 28
    Par défaut
    ok merci jvais continuer à chercher, sachant que je ne comprends pas pourquoi mon code semble figer j à 5 alors qu'en introduisant cells(x,j) je pensais faire incrémenter le truc mais bon comme mon pseudo lindique jai pas le cerveau fait pr le vba c bien dommage dailleurs

    j'ai modifié le code, je suis désemparé devant mon niveau. Le bloc if n'est plus reconnu, on me dit 'end if' without block 'if'. ce qui est affreux c'est qu'un détail peut faire planter un programme, c'est dur à accepter...

    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
    Sub UAR()
    Dim j As Integer
    j = 5
    BL = Cells(5, j).Value
    With Workbooks("ApplicationsA123&UAR_All.xls").Worksheets("sheet1").Range("a1:aa40000")
        Set c = .Find(BL, LookIn:=xlValues)
    End With
        If Not c Is Nothing Then
          a = c.Address
         Do
            Cells(4, j).Value = a
        End If
    j = j + 1
    Loop While j < 18
    End Sub

  7. #7
    Membre émérite
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    753
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 753
    Par défaut
    Oulah c'est beau ce que tu viens de nous pondre.

    Je te suggère de bien potasser les tutos pour apprendre les bases de VBA, car tu ne comprends visiblement pas ce que les termes "programmation par blocs" veut dire.

    En gros et pour t'expliquer vu que tu ne comprends pas: on met un if... end if à l'intérieur d'un do...while, ou l'inverse, mais on n'entrecroise pas les 2 le code ne veut plus rien dire, et par conséquent je ne comprends pas du tout la logique de topn code.

  8. #8
    Membre chevronné
    Inscrit en
    Octobre 2008
    Messages
    273
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Octobre 2008
    Messages : 273
    Par défaut
    Pour résumer, tu peux faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if ...
      do
         ...
      loop while
    end if
    ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    do
      if ...
      end if
    loop while
    mais pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    do 
      if ...
    loop while
      end if
    VBA trouve du coup un if sans end if car il cherche entre le do et le loop.

Discussions similaires

  1. [index] performance sur une recherche descendante
    Par jean-jacques varvenne dans le forum Oracle
    Réponses: 16
    Dernier message: 15/01/2005, 10h22
  2. Optimisation d'une recherche et mise à jour
    Par gandf dans le forum C++Builder
    Réponses: 4
    Dernier message: 07/01/2005, 18h38
  3. Réponses: 8
    Dernier message: 10/09/2004, 17h30
  4. [VB.NET] Quel objet tableau pour une recherche indexée ???
    Par Kitano dans le forum Windows Forms
    Réponses: 7
    Dernier message: 02/09/2004, 09h38
  5. Enlever la surbrillance lors d'une recherche avec vi
    Par sekiryou dans le forum Applications et environnements graphiques
    Réponses: 8
    Dernier message: 04/03/2004, 13h55

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