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 :

Macro modifiée après exécution d'une autre macro. [XL-2013]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Décembre 2016
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2016
    Messages : 46
    Par défaut Macro modifiée après exécution d'une autre macro.
    Bonjour le Forum, Bonjour à tous,

    Je suis en train de m'arracher les cheveux !!!

    Dans un fichier, je dois lancer 2 macros.

    Les 2 macros fonctionnent indépendamment l'une de l'autre.

    La macro 2 seule fonctionne.
    La macro 1 seule fonctionne.

    Le problème est que lorsque la macro 1 à tournée, la macro 2 ensuite ne donne plus le résultat voulu.

    Après analyse, cela vient de cette ligne dans la macro 1 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    x = Columns(15).Find("*", , xlValues, , 1, 2, 0).Row
    Une fois que cette ligne est passée, la macro 2 ne donne plus le résultat voulu.

    Macro 2 :

    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 Historisation()
     
    Dim Trouve As Range, PlageDeRecherche As Range
    Dim Valeur_Cherchee As Date, AdresseTrouvee As String
    Dim Rep As Integer
     
    Valeur_Cherchee = Range("H2")
    Set PlageDeRecherche = Sheets("TDB").Range("D2:BR2")
    Set Trouve = PlageDeRecherche.Cells.Find(what:=Valeur_Cherchee, LookAt:=xlWhole)
     
    If Trouve Is Nothing Then
     
     
        AdresseTrouvee = Valeur_Cherchee & " n'est pas présent dans " & PlageDeRecherche.Address
        Else
     
        Rep = MsgBox("Vous allez historiser les données de " & Format(Valeur_Cherchee, "mmmm-yy") & ". Voulez-vous continuer ?", vbYesNo + vbQuestion, "Mon message")
     
        If Rep = vbYes Then => Action
    La macro 1 agit sur l'onglet 1.
    La macro 2 agit sur l'onglet 2 et 3

    Si je lance la macro 2 avant la macro 1, Trouve = La date correspondente et j'ai ma box qui s'ouvre.
    Si je lance la macro 2 après la macro 1, Trouve = Nothing et End.
    H2 est une date
    D2:BR2 = plage comprenant des dates
    Lorsque la date en H2 est trouvée dans D2:BR2, alors action.
    Sinon, end.
    Après la macro 1, la macro 2 dit ne pas trouver la date dans D2:BR2 (alors qu'elle y est bien...)

    Si je ferme tous les excel et que je re-ouvre mon fichier, la macro 2 me redonne Trouve = La date correspondente et j'ai ma box qui s'ouvre...

    J'ai testé la macro 1 pas à pas et c'est bien a partir de x = Columns(15).Find("*", , xlValues, , 1, 2, 0).Row que le bat blesse.

    Y a t-il une ligne à changer pour que cela fonctionne ?

    Macro 1 :

    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
    Sub MiseEnFormerelevé()
    '
    ' MiseEnFormerelevé Macro
    '
    Dim x As Range
    Dim DernLigne As Integer
     
    Cells.Select
    Range("AA1").Activate
    Selection.EntireColumn.Hidden = False
     
     
    Set x = Columns(18).Find("*", , xlValues, , 1, 2, 0)
     
     
        If Not x Is Nothing Then
     
            DernLigne = x.Row
            MaPlage = "(M2:W" & DernLigne & ")"
            Range(MaPlage).Select
     
        End If
     
    Selection.Copy
    Range("Tableau1[Ordre]").Select
    ActiveSheet.Paste
     
    Columns("M:BB").Select
    Selection.EntireColumn.Hidden = True
    Range("Tableau1[[#Headers],[Ordre]]").Select
    Application.CutCopyMode = False
     
    End Sub
    Macro 2 :

    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
    43
    44
    45
    46
    47
    48
    49
    50
    Sub Historisation()
     
    Dim Trouve As Range, PlageDeRecherche As Range
    Dim Valeur_Cherchee As Date, AdresseTrouvee As String
    Dim Rep As Integer
     
    Valeur_Cherchee = Range("H2")
    Set PlageDeRecherche = Sheets("TDB").Range("D2:BR2")
    Set Trouve = PlageDeRecherche.Cells.Find(what:=Valeur_Cherchee, LookAt:=xlWhole)
     
    If Trouve Is Nothing Then
     
     
        AdresseTrouvee = Valeur_Cherchee & " n'est pas présent dans " & PlageDeRecherche.Address
        Else
     
        Rep = MsgBox("Vous allez historiser les données de " & Format(Valeur_Cherchee, "mmmm-yy") & ". Voulez-vous continuer ?", vbYesNo + vbQuestion, "Les 100 DERNIERS METRES")
     
        If Rep = vbYes Then
            AdresseTrouvee = Trouve.Address
            Sheets("Formules").Visible = True
            Sheets("Formules").Select
            Range("D4:E18").Select
            Application.CutCopyMode = False
            Selection.Copy
            Sheets("TDB").Select
            Range(AdresseTrouvee).Select
            ActiveCell.Offset(2, 0).Select
            ActiveSheet.Paste
     
            Sheets("Formules").Select
            Range("D22:E62").Select
            Application.CutCopyMode = False
            Selection.Copy
            Sheets("TDB").Select
            Range(AdresseTrouvee).Select
            ActiveCell.Offset(20, 0).Select
            ActiveSheet.Paste
            Range("A1").Select
     
            Sheets("Formules").Visible = False
     
            Sheets("TDB").Select
     
        Else
        End If
     
    End If
     
    End Sub
    (Je ne peux pas diffuser le fichier car très lourd et confidentiel)
    Merci.

    Bob 182

  2. #2
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,


    j'avoue ne pas avoir lu toute ton explication, ni cherché à la comprendre.

    Ce qui me saute aux yeux, c'est que tes deux macros n'utilisent pas Find avec les mêmes paramètres

    dans macro1, tu prend du xlvalues (par exemple, le paramètre LookAt) sans renseigner le paramètre LookIn*
    et dans macro2, tu fais l'inverse

    Or, la fonction Find utilisé en VBA va "mémoriser" les paramètres utilisés lors de son dernier appel.

    Ainsi, si dans Macro1 tu dois utiliser un XlValue et XlPart .... quand tu va appeler Find dans Macro2 il conservera ces paramètres si tu ne les renseignes pas

    Je t'invite dans un premier temps à bien spécifier tous les paramètres de Find, et vérifier si c'est le noeud de ton problème

    Par ailleurs, si ce sont des vraies dates que tu recherches, il est toujours conseillé d'utiliser LookIn:=xlFormulas ou de travailler sur les numéros de séries ... Find étant capricieux sur les dates (numéro de série / format d'affichage etc...)

  3. #3
    Membre averti
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Décembre 2016
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2016
    Messages : 46
    Par défaut
    Bonjour Joe.Levrai et merci pour ta réponse.

    Y a t-il une méthode pour "fermer" le find à la fin de la macro 1 ?
    Je regarde pour modifier les paramètres mais je rame un peu... :-)

    Merci. Bob 182

  4. #4
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    "fermer" un Find ça ne veut rien dire.

    Si tu entends par là "effacer les paramètres de recherche du find après l'avoir utilisé", ça n'existe pas. On se contentera d'écraser les précédents paramètres en les renseignant dans une nouvelle utilisation de Find

    https://msdn.microsoft.com/fr-fr/vba...d-method-excel

    Remarques

    Cette méthode renvoie Nothing si aucune correspondance n'est trouvée. La méthode Find n'affecte pas la sélection ni la cellule active.

    Les paramètres des arguments LookIn, LookAt, SearchOrder et MatchByte sont enregistrés chaque fois que vous utilisez cette méthode. Si vous ne spécifiez aucune valeur pour ces arguments lors du prochain appel à la méthode, les valeurs enregistrées sont utilisées. Le fait de définir ces arguments modifie les paramètres de la boîte de dialogue Rechercher, ce qui a pour effet de changer les paramètres enregistrés qui sont utilisés lorsque vous ne spécifiez pas les arguments. Pour éviter toute ambiguïté, définissez ces arguments explicitement chaque fois que vous utilisez cette méthode.

    Tu dois donc tout simplement, à chaque utilisation de Find, veillez à minima à renseigner la valeur des 4 paramètres indiqués en rouge dans la citation ... ainsi il n'y a plus de problème à ce niveau

  5. #5
    Membre averti
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Décembre 2016
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2016
    Messages : 46
    Par défaut
    Merci,

    J'étais justement sur cette page.

    Je potasse ça...

  6. #6
    Membre averti
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Décembre 2016
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2016
    Messages : 46
    Par défaut
    Bien :

    J'ai rajouté un LookIn:=xlFormulas dans le Find de la macro 2 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set Trouve = PlageDeRecherche.Cells.Find(what:=Valeur_Cherchee, LookIn:=xlFormulas, LookAt:=xlWhole)
    Et ça fonctionne !!!

    J'ai fais un peu au hasard en fait, sans savoir vraiment ce que cela implique.

    Je n'avais jamais utilisé la méthode Find. Merci Joe.Levrai d'avoir pointé mon erreur.

    Bob 182

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

Discussions similaires

  1. Sauvegarde d'une Macro VBA à l'aide d'une autre Macro: je m'explique
    Par SMarly78 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 02/01/2016, 00h31
  2. [XL-2010] Reprise d'une macro 1 après exécution d'une macro 2 appelée par la macro 1
    Par julio44 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 02/07/2014, 12h32
  3. Réponses: 1
    Dernier message: 10/12/2012, 11h09
  4. Revenir sur la cellule sélectionné après exécution d'une macro
    Par Daniel-Gérald dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 25/02/2007, 21h50
  5. Réponses: 5
    Dernier message: 04/01/2007, 16h46

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