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 :

Utilisation de la fonction fonction Find [XL-2013]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2013
    Messages : 5
    Par défaut Utilisation de la fonction fonction Find
    Bonjour à tous !

    Aujourd'hui j'ai une petite problématique. Je vous l'expose.

    J'ai deux tableaux : "Equipement Pre" & "Equipement Post"

    Je veux trouver quels sont les équipements présents dans "Equipement Post" qui ne sont pas dans "Equipement Pre".

    Voici mon code :

    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
    '  /////////////////////////////////
    ' /// DECLARATION DES VARIABLES ///
    '/////////////////////////////////
     
    Dim j As Integer  'Variable tableau Equipement Pre
    Dim k As Integer  'Variable tableau Equipement Post
    Dim v As Integer  'Variable tableau CR MENSUEL
    Dim num_gmao As Long 'Variable contenant le numéro GMAO de l'équipement recherché
     
     
    '------------------------ TABLEAU EN PLUS --------------------------------------------------------------------
     
    '  ////////////////////////////////////
    ' /// INITIALISATION DES VARIABLES ///
    '////////////////////////////////////
     
    j = 2
    k = 2
    v = 7
     
    '  //////////////////
    ' /// ALGORITHME ///
    '//////////////////
     
    While Workbooks("Equipement Post").Sheets(1).Cells(k, 1) <> ""
        num_gmao = Workbooks("Equipement Post").Sheets(1).Cells(k, 1)
        j = 2
        While (Workbooks("Equipement Pre").Sheets(1).Cells(j, 1) <> num_gmao And Workbooks("Equipement Pre").Sheets(1).Cells(j, 1) <> "")
            j = j + 1
        Wend
        If Workbooks("Equipement Pre").Sheets(1).Cells(j, 1) = "" Then
            Workbooks("CR MENSUEL").Sheets("EVOLUTION DU PERIMETRE").Cells(v, 1) = Workbooks("Equipement Post").Sheets(1).Cells(k, 1)
            Workbooks("CR MENSUEL").Sheets("EVOLUTION DU PERIMETRE").Cells(v, 2) = Workbooks("Equipement Post").Sheets(1).Cells(k, 3)
            Workbooks("CR MENSUEL").Sheets("EVOLUTION DU PERIMETRE").Cells(v, 3) = Workbooks("Equipement Post").Sheets(1).Cells(k, 2)
            Workbooks("CR MENSUEL").Sheets("EVOLUTION DU PERIMETRE").Cells(v, 4) = Workbooks("Equipement Post").Sheets(1).Cells(k, 9)
            v = v + 1
            Workbooks("CR MENSUEL").Sheets("EVOLUTION DU PERIMETRE").Activate
            Workbooks("CR MENSUEL").Sheets("EVOLUTION DU PERIMETRE").Range(Cells(v, 1), Cells(v, 7)).Select
            Selection.Insert
        End If
        k = k + 1
    Wend
    Le problème avec cet algo est que le fichier est très long est donc le temps de calcul est très long. Comme je débute en VBA j'ai découvert que la fonction find peut considérablement m'aider à réduire mon temps de calcul.

    Je vois comment rechercher un mot par cette fonction. Par contre je ne sait pas comment repérer la ligne (dans une variable i par exemple) sur laquelle se trouve le mot trouvé.

    Je ne demande pas que l'on me fasse tout l'algo mais juste la façon de trouver la ligne sur laquelle est placé le mot trouvé.

  2. #2
    Inactif  
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    1 733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 1 733
    Par défaut
    range.find(valeur).row va te donner la ligne ou est trouvée la valeur

    Par contre l'utilisation de scripting dicos te réduirait ton temps de traitement bien plus.

  3. #3
    Membre Expert
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Par défaut
    Bonjour

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    what = num_gmao: LookIn = xlFormulas
    Set FisrtCellToSearch = Cells(2, 1)
        Set rg = Columns(1).Find(what:=what, After:=FisrtCellToSearch.Offset(-1), LookIn:=LookIn, LookAt:=xlWhole, SearchFormat:=False, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False)
     
         If Not rg Is Nothing Then
          MsgBox rg.Address
         End If
    Cordialement

    Docmarti

  4. #4
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2013
    Messages : 5
    Par défaut
    Merci pour vos réponses. Je vais donc tester ceci.

    Je vais aussi me renseigner sur scripting dicos comme conseiller.

    (Je ne clos pas encore le topic, je tiens à tester ça pour ne pas en recréer un si j'ai une autre question).


    EDIT :

    Voilà j'ai modifié mon code. J'ai mis ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    While Workbooks("Equipement Post").Sheets(1).Cells(u, 1) <> ""
        num_gmao = Workbooks("Equipement Post").Sheets(1).Cells(u, 1)
        With Workbooks("Equipement Pre").Sheets(1).Columns(1)
        Set rg = .Find(num_gmao, LookIn:=xlValues, LookAt:=xlWhole, SearchFormat:=False, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False)
     
            If rg Is Nothing Then
                Workbooks("CR MENSUEL").Sheets("EVOLUTION DU PERIMETRE").Cells(v, 1) = Workbooks("Equipement Post").Sheets(1).Cells(u, 1)
                Workbooks("CR MENSUEL").Sheets("EVOLUTION DU PERIMETRE").Cells(v, 2) = Workbooks("Equipement Post").Sheets(1).Cells(u, 6)
                Workbooks("CR MENSUEL").Sheets("EVOLUTION DU PERIMETRE").Cells(v, 3) = Workbooks("Equipement Post").Sheets(1).Cells(u, 3)
                total = total + 1
            End If
        End With
        u = u + 1
    Wend
    Je suis passé de 3min à 1.8s. Merci beaucoup pour votre aide et je clos le topic !

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

Discussions similaires

  1. Peut-on utiliser RECHERCHEV dans une fonction ?
    Par dany13 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 14/02/2008, 16h14
  2. probleme avec la fonction std::find
    Par APoLLoN1234 dans le forum SL & STL
    Réponses: 10
    Dernier message: 25/12/2007, 11h23
  3. Réponses: 1
    Dernier message: 19/04/2007, 09h08
  4. Thread -> Utiliser Synchronize() dans une fonction
    Par Futixu dans le forum C++Builder
    Réponses: 5
    Dernier message: 26/01/2007, 13h13
  5. Utilisation multiple d'une fonction
    Par crevygood dans le forum Framework .NET
    Réponses: 5
    Dernier message: 23/11/2006, 20h01

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