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 :

Fonction "rechercher tout"


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif Avatar de Nako_lito
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2008
    Messages
    793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Mai 2008
    Messages : 793
    Par défaut Fonction "rechercher tout"
    Bonjour a tous,
    je souhaiterai savoir si il y a une fonction en VBA pour faire l'equivalent a "Rechercher tout" ?
    Il existe la methode Find sur laquelle on peut appliquer une boucle et tant que l'adresse de la cellule en cours de recherche n'est pas egale a l'adresse de la premiere, on continue a chercher, mais pour mon application, c'est bien trop long.

    J'explique un peu ce que j'ai a faire.
    dans une feuil1, j'ai un tableau assez consequent (6000 lignes), dans la colonne B de cette feuille, plusieur valeur sont a tester (9 au total).
    Si une de ces 9 valeur est trouvée il faut couper la ligne en question et la coller dans une autre feuille.

    Voici le code que j'ai mis en place, mais c'est méga long
    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
     
    Public Sub deplacement()
        Sheets.Add After:=Worksheets(Worksheets.Count)
        Worksheets(Worksheets.Count).Name = "Hors périm"
     
        Dim maRange As Range, Cel As Range
        Dim derniereligneHorsPerim As Integer
        Feuil1.Cells(1, 1).EntireRow.Copy
        Sheets("Hors périm").Range("A1").Insert Shift:=xlDown
        derniereligneHorsPerim = 2
        Set maRange = Feuil1.Range("A2:A" & derniereLigneFeuil1)
        For Each Cel In maRange
            If Cel = ("50") Or Cel = ("55") Or Cel = ("TATA") Or Cel = ("POP") Or Cel = ("TOTO") Or Cel = ("TITI") Or Cel = ("TUTU") Or Cel = ("TETE") Or Cel = ("OTOT") Then
                Cel.EntireRow.Cut
                Sheets("Hors périm").Range("A" & derniereligneHorsPerim).Select
                Selection.Insert Shift:=xlDown
                derniereligneHorsPerim = derniereligneHorsPerim + 1
            End If
        Next Cel
    End Sub
    Quelqu'un aurait une idée ?

    Par avance merci

  2. #2
    Membre chevronné
    Avatar de Bigalo
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    445
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 445
    Par défaut
    Indépendamment du code, le premier point essentiel est le nb de lignes concernées : si sur les 6000, il y en a un petit nombre à couper et coller sur la nouvelle feuille, 9 Find successifs seront bien + rapides, que de boucler et tester TOUTES les lignes.

    Par ailleurs Couper/Coller est une méthode très lente, qui nécessite de passer à chaque fois d’une feuille à l’autre, ce qui dégrade encore les performances.

    Lire les infos, alimenter une matrice, supprimer les lignes, et aller 1 seule fois sur la nouvelle feuille, pour y reporter le contenu de la matrice améliorera considérablement la vitesse.

  3. #3
    Inactif  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 054
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 054
    Par défaut
    Bonjour,
    Et si tu garde ce système, la ligne...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Public Sub deplacement()
        Application.ScreenUpdating= False
        ... Code
        Application.ScreenUpdating= True
    End Sub
    Te ferais déjà gagner un bon bout de temps.
    A+

  4. #4
    Membre très actif Avatar de Nako_lito
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2008
    Messages
    793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Mai 2008
    Messages : 793
    Par défaut
    cette méthode est appelé dans une fonction principale, donc le screen updating est deja a false.

    Pour ce qui est du nombre de ligne c'est plutot de l'ordre de 3000/6000 qui sont a déplacer donc c'est pour ca que le "rechercher tout" m'aiderai. J'ai juste a récuperer les indices des lignes, copier coller, supprimer.

  5. #5
    Membre chevronné
    Avatar de Bigalo
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    445
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 445
    Par défaut
    Voici une approche qui devrait accélérer les choses si tu as beaucoup de lignes : conserve ton test actuel, mais au lieu de couper la ligne, utilise la première colonne non utilisée dans la feuille pour inscrire un « 1 » (ou quoi que ce soit d’autre, peu importe)

    Une fois toutes les lignes balayées, fais un tri sur cette colonne. Les lignes à conserver seront groupées au début de la feuille, et les ligne à transférer vers la nouvelles feuille le seront également, à la fin de la feuille.

    Il suffira alors de faire 1 seul Couper/Coller pour transférer toutes les lignes concernées, puis de supprimer la dernière colonne avec les « 1 » dans la nouvelle feuille.

    Ce devrait être considérablement + rapide :-)

    Voilà !

  6. #6
    Membre très actif Avatar de Nako_lito
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2008
    Messages
    793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Mai 2008
    Messages : 793
    Par défaut
    Nikel, ca fonctionne a merveille.

    Merci beaucoup

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

Discussions similaires

  1. [SP2010] Recherche métadonnées + quote
    Par James Dt dans le forum Développement Sharepoint
    Réponses: 0
    Dernier message: 02/10/2013, 16h19

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