simplifié une macro

beatrice2fr

XLDnaute Nouveau
bonjour
je voudrai savoir si la macro suivante peut etre simplifié car la procedure prend environ 10 bonnes secondes.....

j'explique un peu . vba examine le contenue de 2 cellules dans 2 feuilles differentes ( ce qui correspond a un repere ) et renvoie un msgbox pour chaque repere, si les conditions sont remplies. Est il possible que vba examine et ne renvoie qu'un seul message regroupant tous les reperes; du genre
"REP 1 /3 / 6 / 8 : VOIR GRANDE LONGEUR"


Code:
Private Sub Worksheet_Activate()

Application.ScreenUpdating = False
On Error Resume Next

' premiere partie

If Sheets("CLOTURE").[D15] <> "" And Sheets("RC").[C4] = "" Then
MsgBox ("REP 1 : VOIR GRANDE LONGEUR")
End If

If Sheets("CLOTURE").[D16] <> "" And Sheets("RC").[I4] = "" Then
MsgBox ("REP 2 : VOIR GRANDE LONGEUR")
End If

If Sheets("CLOTURE").[D17] <> "" And Sheets("RC").[O4] = "" Then
MsgBox ("REP 3 : VOIR GRANDE LONGEUR")
End If

If Sheets("CLOTURE").[D18] <> "" And Sheets("RC").[U4] = "" Then
MsgBox ("REP 4 : VOIR GRANDE LONGEUR")
End If

If Sheets("CLOTURE").[D19] <> "" And Sheets("RC").[AA4] = "" Then
MsgBox ("REP 5 : VOIR GRANDE LONGEUR")
End If

If Sheets("CLOTURE").[D20] <> "" And Sheets("RC").[C26] = "" Then
MsgBox ("REP 6 : VOIR GRANDE LONGEUR")
End If

If Sheets("CLOTURE").[D21] <> "" And Sheets("RC").[I26] = "" Then
MsgBox ("REP 7 : VOIR GRANDE LONGEUR")
End If

If Sheets("CLOTURE").[D22] <> "" And Sheets("RC").[O26] = "" Then
MsgBox ("REP 8 : VOIR GRANDE LONGEUR")
End If

If Sheets("CLOTURE").[D23] <> "" And Sheets("RC").[U26] = "" Then
MsgBox ("REP 9 : VOIR GRANDE LONGEUR")
End If

If Sheets("CLOTURE").[D24] <> "" And Sheets("RC").[AA26] = "" Then
MsgBox ("REP 10 : VOIR GRANDE LONGEUR")
End If

If Sheets("CLOTURE").[D25] <> "" And Sheets("RC").[C48] = "" Then
MsgBox ("REP 11 : VOIR GRANDE LONGEUR")
End If

If Sheets("CLOTURE").[D26] <> "" And Sheets("RC").[I48] = "" Then
MsgBox ("REP 12 : VOIR GRANDE LONGEUR")
End If

If Sheets("CLOTURE").[D27] <> "" And Sheets("RC").[O48] = "" Then
MsgBox ("REP 13 : VOIR GRANDE LONGEUR")
End If

If Sheets("CLOTURE").[D28] <> "" And Sheets("RC").[U48] = "" Then
MsgBox ("REP 14 : VOIR GRANDE LONGEUR")
End If

If Sheets("CLOTURE").[D29] <> "" And Sheets("RC").[AA48] = "" Then
MsgBox ("REP 15 : VOIR GRANDE LONGEUR")
End If

' deuxieme partie
' procedure de valeur cible , mais la je ne pense pas que l'on puisse simplifié....
    Sheets("WCL").[A9] = ""
    Sheets("WCL").[V6].GoalSeek Goal:=Sheets("WCL").[W6], ChangingCell:=Sheets("WCL").[A9]
    Sheets("WCL").[A70] = ""
    Sheets("WCL").[V67].GoalSeek Goal:=Sheets("WCL").[W67], ChangingCell:=Sheets("WCL").[A70]
    Sheets("WCL").[A132] = ""
    Sheets("WCL").[V129].GoalSeek Goal:=Sheets("WCL").[W129], ChangingCell:=Sheets("WCL").[A132]
    Sheets("WCL").[A194] = ""
    Sheets("WCL").[V191].GoalSeek Goal:=Sheets("WCL").[W191], ChangingCell:=Sheets("WCL").[A194]
    Sheets("WCL").[A256] = ""
    Sheets("WCL").[V253].GoalSeek Goal:=Sheets("WCL").[W253], ChangingCell:=Sheets("WCL").[A256]
    Sheets("WCL").[A318] = ""
    Sheets("WCL").[V315].GoalSeek Goal:=Sheets("WCL").[W315], ChangingCell:=Sheets("WCL").[A318]
    Sheets("WCL").[A344] = ""
    Sheets("WCL").[V341].GoalSeek Goal:=Sheets("WCL").[W341], ChangingCell:=Sheets("WCL").[A344]
    Sheets("WCL").[A371] = ""
    Sheets("WCL").[V368].GoalSeek Goal:=Sheets("WCL").[W368], ChangingCell:=Sheets("WCL").[A371]
    Sheets("WCL").[A397] = ""
    Sheets("WCL").[V394].GoalSeek Goal:=Sheets("WCL").[W394], ChangingCell:=Sheets("WCL").[A397]
    Sheets("WCL").[A423] = ""
    Sheets("WCL").[V420].GoalSeek Goal:=Sheets("WCL").[W420], ChangingCell:=Sheets("WCL").[A423]
    Sheets("WCL").[A449] = ""
    Sheets("WCL").[V446].GoalSeek Goal:=Sheets("WCL").[W446], ChangingCell:=Sheets("WCL").[A449]
    Sheets("WCL").[A475] = ""
    Sheets("WCL").[V472].GoalSeek Goal:=Sheets("WCL").[W472], ChangingCell:=Sheets("WCL").[A475]
    Sheets("WCL").[A501] = ""
    Sheets("WCL").[V498].GoalSeek Goal:=Sheets("WCL").[W498], ChangingCell:=Sheets("WCL").[A501]
    Sheets("WCL").[A527] = ""
    Sheets("WCL").[V524].GoalSeek Goal:=Sheets("WCL").[W524], ChangingCell:=Sheets("WCL").[A527]
    Sheets("WCL").[A553] = ""
    Sheets("WCL").[V550].GoalSeek Goal:=Sheets("WCL").[W550], ChangingCell:=Sheets("WCL").[A553]

Application.ScreenUpdating = True
On Error GoTo 0
End Sub
 

pierrejean

XLDnaute Barbatruc
Re : simplifié une macro

bonjour beatrice

Pour la 1ere partie

Code:
Adresses = Array("C4", "I4", "O4", "U4", "AA4", "C26", "I26", "O26", "U26", "AA26", "C248", "I48", "O48", "U48", "AA48")
For n = 15 To 29
 If Sheets("CLOTURE").Range("D" & n) <> "" And Sheets("RC").Range(Adresses(n - 15)) = "" Then
   liste = liste & "REP " & n - 14 & " et "
 End If
Next n
liste = Left(liste, Len(liste) - 3) & ": VOIR GRANDE LONGEUR"
MsgBox (liste)

La 2eme partie peut etre traitée sur le même modèle
Je te laisse essayer et si tu n'y arrive pas reviens
 

beatrice2fr

XLDnaute Nouveau
Re : simplifié une macro

merci de ta reponse, et c'est bien ce que je cherche a faire. Toutefois j'ai , entretemps, essayer d'avancer par moi meme, et de ce fait j'ai un peu modifier les données ( ex. une seule cellule a examiner) . Et j'ai beau essayer je ne parviens pas a adapter ta procedure correctement.
je joins un exemple pour plus de clareté .
 

Pièces jointes

  • exemple1.xls
    15.5 KB · Affichages: 44
  • exemple1.xls
    15.5 KB · Affichages: 53
  • exemple1.xls
    15.5 KB · Affichages: 48

bqtr

XLDnaute Accro
Re : simplifié une macro

Bonsoir beatrice
Bonsoir pierrejean :)

Essaye ceci :

Code:
Sub ListeRep()

Dim k As Byte, List As String

With Sheets("CLOTURE")
  For k = 7 To 14
    If .Cells(k, 7) <> "" Then List = List & .Cells(k, 7) & " - "
  Next
End With
 
If List <> "" Then MsgBox "REP " & Left(List, Len(List) - 2) & " : VOIR GRANDE LONGUEUR", vbInformation, "Résultat REP :"

End Sub

A+
 

beatrice2fr

XLDnaute Nouveau
Re : simplifié une macro

j'ai constater que c'est uniquement la partie valeur cible qui prend du temps,
alors je vous solliciterai encore pour un moyen d'accelerer le processus :)

Code:
Private Sub Worksheet_Activate()
Application.ScreenUpdating = False
On Error Resume Next
Dim k As Byte, List As String

With Sheets("WCL")
  For k = 7 To 14
    If .Cells(k, 79) <> "" Then List = List & .Cells(k, 79) & " - "
  Next
End With
 
If List <> "" Then MsgBox "REP " & Left(List, Len(List) - 2) & " : VOIR GRANDE LONGUEUR", vbInformation, "RESULTAT REP :"


'Deuxieme partie   Valeur cible

   
    Sheets("WCL").[V6].GoalSeek Goal:=Sheets("WCL").[W6], ChangingCell:=Sheets("WCL").[A9]
    Sheets("WCL").[V67].GoalSeek Goal:=Sheets("WCL").[W67], ChangingCell:=Sheets("WCL").[A70]
    Sheets("WCL").[V129].GoalSeek Goal:=Sheets("WCL").[W129], ChangingCell:=Sheets("WCL").[A132]
    Sheets("WCL").[V191].GoalSeek Goal:=Sheets("WCL").[W191], ChangingCell:=Sheets("WCL").[A194]
    Sheets("WCL").[V253].GoalSeek Goal:=Sheets("WCL").[W253], ChangingCell:=Sheets("WCL").[A256]
    Sheets("WCL").[V315].GoalSeek Goal:=Sheets("WCL").[W315], ChangingCell:=Sheets("WCL").[A318]
    Sheets("WCL").[V341].GoalSeek Goal:=Sheets("WCL").[W341], ChangingCell:=Sheets("WCL").[A344]
    Sheets("WCL").[V368].GoalSeek Goal:=Sheets("WCL").[W368], ChangingCell:=Sheets("WCL").[A371]
    Sheets("WCL").[V394].GoalSeek Goal:=Sheets("WCL").[W394], ChangingCell:=Sheets("WCL").[A397]
    Sheets("WCL").[V420].GoalSeek Goal:=Sheets("WCL").[W420], ChangingCell:=Sheets("WCL").[A423]
    Sheets("WCL").[V446].GoalSeek Goal:=Sheets("WCL").[W446], ChangingCell:=Sheets("WCL").[A449]
    Sheets("WCL").[V472].GoalSeek Goal:=Sheets("WCL").[W472], ChangingCell:=Sheets("WCL").[A475]
    Sheets("WCL").[V498].GoalSeek Goal:=Sheets("WCL").[W498], ChangingCell:=Sheets("WCL").[A501]
    Sheets("WCL").[V524].GoalSeek Goal:=Sheets("WCL").[W524], ChangingCell:=Sheets("WCL").[A527]
    Sheets("WCL").[V550].GoalSeek Goal:=Sheets("WCL").[W550], ChangingCell:=Sheets("WCL").[A553]
Application.ScreenUpdating = True
On Error GoTo 0
End Sub
 

pierrejean

XLDnaute Barbatruc
Re : simplifié une macro

Re

Salut Pierre Olivier

A tester:
Code:
[COLOR=blue]Application.Calculation = xlCalculationManual[/COLOR]
Sheets("WCL").[V6].GoalSeek Goal:=Sheets("WCL").[W6], ChangingCell:=Sheets("WCL").[A9]
Sheets("WCL").[V67].GoalSeek Goal:=Sheets("WCL").[W67], ChangingCell:=Sheets("WCL").[A70]
Sheets("WCL").[V129].GoalSeek Goal:=Sheets("WCL").[W129], ChangingCell:=Sheets("WCL").[A132]
Sheets("WCL").[V191].GoalSeek Goal:=Sheets("WCL").[W191], ChangingCell:=Sheets("WCL").[A194]
Sheets("WCL").[V253].GoalSeek Goal:=Sheets("WCL").[W253], ChangingCell:=Sheets("WCL").[A256]
Sheets("WCL").[V315].GoalSeek Goal:=Sheets("WCL").[W315], ChangingCell:=Sheets("WCL").[A318]
Sheets("WCL").[V341].GoalSeek Goal:=Sheets("WCL").[W341], ChangingCell:=Sheets("WCL").[A344]
Sheets("WCL").[V368].GoalSeek Goal:=Sheets("WCL").[W368], ChangingCell:=Sheets("WCL").[A371]
Sheets("WCL").[V394].GoalSeek Goal:=Sheets("WCL").[W394], ChangingCell:=Sheets("WCL").[A397]
Sheets("WCL").[V420].GoalSeek Goal:=Sheets("WCL").[W420], ChangingCell:=Sheets("WCL").[A423]
Sheets("WCL").[V446].GoalSeek Goal:=Sheets("WCL").[W446], ChangingCell:=Sheets("WCL").[A449]
Sheets("WCL").[V472].GoalSeek Goal:=Sheets("WCL").[W472], ChangingCell:=Sheets("WCL").[A475]
Sheets("WCL").[V498].GoalSeek Goal:=Sheets("WCL").[W498], ChangingCell:=Sheets("WCL").[A501]
Sheets("WCL").[V524].GoalSeek Goal:=Sheets("WCL").[W524], ChangingCell:=Sheets("WCL").[A527]
[COLOR=blue]Application.Calculation = xlCalculationAutomatic[/COLOR]
[COLOR=#0000ff][/COLOR]
 

Discussions similaires

Réponses
2
Affichages
153
Réponses
8
Affichages
497

Statistiques des forums

Discussions
312 232
Messages
2 086 461
Membres
103 220
dernier inscrit
samira2024