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
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)
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....
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