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

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à

Bonjour et bienvenue,

Un petit conseil, joins un classeur à ta demande.

Cdlt.

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 !

92042-excel.xlsm (76.95 Ko)
Rechercher des sujets similaires à "module qui execute frenetiquement"