Procedure Worksheet_change uniquement si changement dans cellule specifique

sim

XLDnaute Occasionnel
Bonjour a tous!!

Tout est dit dans le titre,

J'ai une procedure Worksheet_change qui me pose des probleme car je ne peut rien toucher dans ma feuille sans que la macro se lance, et c'est pas du tout pratique et je dirai meme plus c'est dangereux.

Est ce que quelqu'un sait comment faire pour qu'elle ne se declenche qu'en cas de changement dans la cellule G1

Merci d'avance!! :)

Sim
 

sim

XLDnaute Occasionnel
Re : Procedure Worksheet_change uniquement si changement dans cellule specifique

Bon c'est genial!!!!

Ca fonctionne!!! Je suis content, seul soucy, c'est que je dois faire au moins un changement de marche pour recuperer ma mise en page

en effet le 3) quand je met a jour mes TCD me fait perdre ma mise en page...

alors tout betement je me suis dit ba je vais enregistrer une macro ou je selectionne le premeir marche a traver la Userform mais cela ne fonctionne pas, pas de code quand je m'enregistre entrain de changer un marche...

Du coupn j'hesite a passer le code du refresh pivot dans le code de validation du marche....mais toujours meme probleme, la lenteur du code....toujour entre 10 et 15 seconde...

Donc question est ce que il ne saurait pas possible de passser le code qui met en page la feuille current_market dans un module standard et l'appeler a chaque changement de marche....

Comment faire pour passer de 10 seconde a 1/2 seconde voire 1 seconde ( tps que j'avais avant de mettre en page la feuille)

Merci d'avance pour vos conseils :)

Sim
 

sim

XLDnaute Occasionnel
Re : Procedure Worksheet_change uniquement si changement dans cellule specifique

Cher Hippolite, cher tous.,


Comment puis je dire cela....si j'enleve mes select, ma mcro tombe a l'eau

je te donne deux petit extrait de mon code, tu verras....mais je crois que ca va etre dur dur, bon apres je suis qu'un profane lol..alors dis moi

h1 = Title_Position(t1)
Rows(h1 + 2 & ":" & h1 + 4).Select
Selection.EntireRow.Hidden = True

h1 = Title_Position(t2)
Rows(h1 + 2 & ":" & h1 + 4).Select
Selection.EntireRow.Hidden = True

h1 = Title_Position(t3)
Rows(h1 + 2 & ":" & h1 + 4).Select
Selection.EntireRow.Hidden = True

h1 = Title_Position(t4)
Rows(h1 + 2 & ":" & h1 + 4).Select
Selection.EntireRow.Hidden = True

h1 = Title_Position(t5)
Rows(h1 + 2 & ":" & h1 + 4).Select
Selection.EntireRow.Hidden = True


ou encore

Code:
 h1 = Title_Position(t2)                     ' we choose the right table
 h2 = ActiveSheet.PivotTables("affiliate").TableRange2.Rows.Count     'we want to know the size of the table from the filter to the last line
 Range("D" & h1 + 5 & ":D" & h1 + h2 + 1).Select    ' We select the area we want to improove.
  
 'We remove all borders of the selection
  Selection.Borders.LineStyle = xlNone
   
 ' Then we put borders around the table
  With Selection
  .BorderAround LineStyle:=xlContinuous
  .BorderAround Weight:=xlThin
  .BorderAround ColorIndex = 1
  End With
  
  'Then we add Horizontal lines
   If Selection.Rows.Count > 1 Then
    Selection.Borders(xlInsideHorizontal).LineStyle = xlContinuous
End If

ou encore

Code:
Private Sub Fill_Background(num_line, column_begin, column_end, high_area, color1)

Range(column_begin & num_line & ":" & column_end & (num_line + high_area - 1)).Select
Selection.Interior.ColorIndex = color1
End Sub


Je dois avoir au moins 50 fois ecrit le mot select dans mon code....mais a chaque fois il servent a quelque chose....

Comment proceder...

Merci beaucoup
 

Hippolite

XLDnaute Accro
Re : Procedure Worksheet_change uniquement si changement dans cellule specifique

Re,
Code:
Rows(h1 + 2 & ":" & h1 + 4).Select
Selection.EntireRow.Hidden = True
peut être remplacé par
Code:
Rows(h1 + 2 & ":" & h1 + 4).EntireRow.Hidden = True
Tu peux procéder petit à petit en testant à chaque fois que ta macro fonctionne (il y a tout de même quelques actions qui nécessitent un select ou un Activate, mais il y en a peu).
J'ai vu que tu pouvais également regrouper des With...End With:
Code:
Range("D" & h1 + 5 & ":D" & h1 + h2 + 1).Select    ' We select the area we want to improove.
 
 'We remove all borders of the selection
 Selection.Borders.LineStyle = xlNone
   
 ' Then we put borders around the table
 With Selection
  .BorderAround LineStyle:=xlContinuous
  .BorderAround Weight:=xlThin
  .BorderAround ColorIndex = 1
  End With
  
  'Then we add Horizontal lines
  If Selection.Rows.Count > 1 Then
    Selection.Borders(xlInsideHorizontal).LineStyle = xlContinuous
End If
est équivalent à
Code:
With Range("D" & h1 + 5 & ":D" & h1 + h2 + 1)
    'We remove all borders of the selection
    .Borders.LineStyle = xlNone
    ' Then we put borders around the table
    .BorderAround LineStyle:=xlContinuous
    .BorderAround Weight:=xlThin
    .BorderAround ColorIndex = 1
    'Then we add Horizontal lines
    If .Rows.Count > 1 Then
        .Borders(xlInsideHorizontal).LineStyle = xlContinuous
    End If
End With
Bon courage
A+
 

sim

XLDnaute Occasionnel
Re : Procedure Worksheet_change uniquement si changement dans cellule specifique

Bonjour a tous et a toutes, Hippolite,

Voila j'ai fait les changements, c'est un peu moin long et un peu plus clair mais, toujours aussi long...

Donc plus j'y reflechis plus je me dis que le probleme peut venir de 2 causes differente.

1) Le premiere execution est rapide, ou devrais je dire normale, la seconde est tres lente
Donc pourquoi pas un probleme de memoire.

2) Une chose est sure, la structure du code, et les appels de procedure sont organise n'importe comment, enfin c'est la vague impression que j'ai.....

Qu'en pensez vous, et dans les deux cas comment puis je faire pour remedier a cela...

Merci d'avance pour vos conseils avises :)

Sim
 

Discussions similaires

Statistiques des forums

Discussions
312 493
Messages
2 088 956
Membres
103 989
dernier inscrit
jralonso