Module qui exécute frénétiquement un autre module

Y compris Power BI, Power Query et toute autre question en lien avec Excel
Répondre
F
Flammuche
Nouveau venu
Nouveau venu
Messages : 2
Inscrit le : 15 avril 2019
Version d'Excel : 2016 FR

Message par Flammuche » 15 avril 2019, 21:45

Bonsoir,

J'ai un tableur excel à faire et je m'arrache les cheveux depuis quelques heures dessus... Je tiens à préciser que je ne connaissais rien à VBA il y a encore quelques jours, mes macros ne sont donc pas super propres.

Donc j'ai un bouton qui exécute la macro suivante :
Sub Clearcells()

Application.ScreenUpdating = False

Range("C13", "D22").ClearContents
Range("E13", "H22").Value = "OUI"
Range("C5:D5:E5").ClearContents
Range("C6:D6:E6").ClearContents
Range("C7:D7:E7").ClearContents
Range("C8:D8:E8").ClearContents
Range("C27", "H36").ClearContents
Range("C40", "H49").ClearContents
Range("C50", "H50").Value = 12
Range("C54", "H57").ClearContents

'AssociŽ 1 ou individuel

Range("C62", "H65").ClearContents
Range("C66", "H66").Value = "NON"
Range("C67", "H67").ClearContents
Range("B70:C70:D70:E70:F70:G70:H70:B71:C71:D71:E71:F71:G71:H71").ClearContents

'AssociŽ 2

Range("C76", "H79").ClearContents
Range("C80", "H80").Value = "NON"
Range("C81", "H81").ClearContents
Range("B84:C84:D84:E84:F84:G84:H84:B85:C85:D85:E85:F85:G85:H85").ClearContents

'AssociŽ 3

Range("C90", "H93").ClearContents
Range("C94", "H94").Value = "NON"
Range("C95", "H95").ClearContents
Range("B98:C98:D98:E98:F98:G98:H98:B99:C99:D99:E99:F99:G99:H99").ClearContents

'AssociŽ 4

Range("C104", "H107").ClearContents
Range("C108", "H108").Value = "NON"
Range("C109", "H109").ClearContents
Range("B112:C112:D112:E112:F112:G112:H112:B113:C113:D113:E113:F113:G113:H113").ClearContents

'AssociŽ 5

Range("C118", "H121").ClearContents
Range("C122", "H122").Value = "NON"
Range("C123", "H123").ClearContents
Range("B126:C126:D126:E126:F126:G126:H126:B127:C127:D127:E127:F127:G127:H127").ClearContents

'AssociŽ 6

Range("C132", "H135").ClearContents
Range("C136", "H136").Value = "NON"
Range("C137", "H137").ClearContents
Range("B140:C140:D140:E140:F140:G140:H140:B141:C141:D141:E141:F141:G141:H141").ClearContents

'AssociŽ 7

Range("C146", "H149").ClearContents
Range("C150", "H150").Value = "NON"
Range("C151", "H151").ClearContents
Range("B154:C154:D154:E154:F154:G154:H154:B155:C155:D155:E155:F155:G155:H155").ClearContents

'AssociŽ 8

Range("C160", "H163").ClearContents
Range("C164", "H164").Value = "NON"
Range("C165", "H165").ClearContents
Range("B168:C168:D168:E168:F168:G168:H168:B169:C169:D169:E169:F169:G169:H169").ClearContents

'AssociŽ 9

Range("C174", "H177").ClearContents
Range("C178", "H178").Value = "NON"
Range("C179", "H179").ClearContents
Range("B182:C182:D182:E182:F182:G182:H182:B183:C183:D183:E183:F183:G183:H183").ClearContents

'AssociŽ 10

Range("C188", "H191").ClearContents
Range("C192", "H192").Value = "NON"
Range("C193", "H193").ClearContents
Range("B196:C196:D196:E196:F196:G196:H196:B197:C197:D197:E197:F197:G197:H197").ClearContents

Application.ScreenUpdating = True
End Sub
J'ai mis les Application.screenUpdating pour que la macro s'exécute plus rapidement.

Ensuite j'ai récupéré sur un site une fonction améliorée de rechercheV qui permet de gérer plusieurs occurences. Seulement, j'ai l'impression que cette fonction recalcule après chaque modification du classeur.

Dès lors que j'exécute la macro ci-dessus, cette fonction s'exécute à chaque ligne de la macro, ce qui l'utilisation du tableur très lente.

Voici la fonction en question :
Option Explicit

'RD =cellule où commencer la recherche
'RC = cellule critère
'RDT = cellule où chercher la donnée
'Ligne rechercher jusque ligne... (optional) si 0 cherche jusqu'au bout de la ligne
 

Public Function RechercheVmulti(RD As Range, RC As Range, RDT As Range, _
            Optional Ligne As Long = 0)


Dim i As Integer, e As Integer, Txt As String
Dim LigE As Long, ColE As Long 'où écrire résultats
Dim Col As Integer
Dim Lig As Long, Occ As Long
Dim FeuilE As String, FeuilRD As String, FeuilRDT As String

    On Error GoTo sortie
    LigE = Application.Caller.Row
    ColE = Application.Caller.Column
    FeuilE = Application.Caller.Parent.Name
    Application.Volatile
    Lig = RD.Row ' Ligne où commencer la recherche
    Col = RD.Column 'Colonne où commencer la recherche
    FeuilRD = RD.Parent.Name
    FeuilRDT = RDT.Parent.Name
    If Ligne = 0 Then
        Ligne = Range(Sheets(FeuilRD).Cells(65536, Col), Sheets(FeuilRD).Cells(65536, Col)).End(xlUp).Row
    End If
    'Recherche le numéro de l'occurrence à trouver
    For Occ = LigE - 1 To 1 Step -1
        Txt = Sheets(FeuilE).Cells(Occ, ColE).Formula
        If Txt = Sheets(FeuilE).Cells(LigE, ColE).Formula Then
            e = e + 1
        End If
    Next Occ
    For i = Lig To Ligne
        If Sheets(FeuilRD).Cells(i, Col) = RC Then
            If e <> 0 Then
                e = e - 1
            Else
                RechercheVmulti = Sheets(FeuilRDT).Cells(i, RDT.Column)
                Exit Function
            End If
        End If
    Next i
    'Si plus trouvé de concordance
    RechercheVmulti = ""
Exit Function
sortie:
    'si erreur dans la formule, non détectée par Excel.
    RechercheVmulti = "#FAUTE!"
    
End Function
Comment faire pour que la deuxième fonction ne s'exécute pas à chaque ligne de première macro ?

Je vous remercie par avance de votre aide, mon cerveau va exploser là :D
Avatar du membre
Jean-Eric
Fanatique d'Excel
Fanatique d'Excel
Messages : 16'697
Appréciations reçues : 699
Inscrit le : 27 août 2012
Version d'Excel : 365 Personnel

Message par Jean-Eric » 16 avril 2019, 00:43

Bonjour et bienvenue,
Un petit conseil, joins un classeur à ta demande.
Cdlt.
Jean-Eric

Je ne réponds pas aux M.P. non sollicités.
F
Flammuche
Nouveau venu
Nouveau venu
Messages : 2
Inscrit le : 15 avril 2019
Version d'Excel : 2016 FR

Message par Flammuche » 16 avril 2019, 18:14

Bonjour,

Voici le fichier Excel correspondant.

Lors de l'exécution de la macro ClearCells, la macro appelle la fonction RechercheVmulti à chaque ligne et je ne comprend pas pourquoi.

Les cellules utilisant la fonction RechercheVmulti se trouve sur la feuille "Associe".

Je vous remercie de votre aide !
2042_Excel.xlsm
(76.95 Kio) Téléchargé 7 fois
Répondre
  • Sujets similaires
    Réponses
    Vues
    Dernier message
  • Module qui s'execute à la fin d'une autre ...
    par babouze64 » 21 décembre 2019, 12:41 » dans Excel - VBA
    2 Réponses
    48 Vues
    Dernier message par babouze64
    21 décembre 2019, 15:06
  • Retour module
    par TeamG1 » 22 août 2017, 14:45 » dans Excel - VBA
    4 Réponses
    214 Vues
    Dernier message par medas
    25 août 2017, 09:12
  • Copie module
    par Tidog117 » 6 décembre 2018, 12:03 » dans Excel - VBA
    2 Réponses
    141 Vues
    Dernier message par Tidog117
    22 mai 2019, 15:10
  • Module VBA
    par geo34 » 17 octobre 2014, 13:50 » dans Excel - VBA
    2 Réponses
    354 Vues
    Dernier message par geo34
    19 octobre 2014, 20:09
  • supprimer un module
    par target » 26 août 2014, 21:49 » dans Excel - VBA
    6 Réponses
    1294 Vues
    Dernier message par target
    27 août 2014, 00:02
  • Module de classe
    par Remy00 » 21 avril 2019, 17:09 » dans Excel - VBA
    5 Réponses
    168 Vues
    Dernier message par James007
    21 avril 2019, 19:33