Recalcul d'une feuille

  • Initiateur de la discussion Initiateur de la discussion Calvus
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Calvus

XLDnaute Barbatruc
Bonsoir à tous,

Comment forer le recalcul d'une feuille contenant une macro ?

Voici la macro.

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
' variable déclarer (cellule)
    Dim cc As Range
    ' condition 1 : procedure inactive si cellule hors colonne b et ligne inférieur à 6
    If Target.Column = 3 And Target.Row > 25 And Target.Count = 1 Then
        ' condition 2  : si cellule vide, valeurs supprimer de a à f
        If Target = "" Then Target.Offset(, -1).Resize(, 5) = ""
        ' valeur de la cellule sélectionnée chercher en onglet Feuil1, colonne a, parmi cellules visibles et constantes
        Set cc = Sheets("Produits").Columns(5).SpecialCells(xlCellTypeVisible).SpecialCells(xlCellTypeConstants).Find(Target)
        ' condition 3 : si cc (valeur) trouvée
        If Not cc Is Nothing Then
            ' valeurs dupliquer
            With Target
                ' en cellule colonne -1
                .Offset(, -1) = cc.Offset(, -3)
                ' en cellule colonne +2
                .Offset(, 2) = cc.Offset(, 8)
            End With
            ' fin condition 3
        End If
        ' fin conditon 1
    End If
End Sub

Comment recalculer toute la feuille même si l'on a modifié une cellule seulement ?

Merci
 
Re : Recalcul d'une feuille

Bonsoir Calvus,

En ajoutant simplement Application.Calculate en fin de macro:

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
' variable déclarer (cellule)
    Dim cc As Range
    Application.EnableEvents = False
    ' condition 1 : procedure inactive si cellule hors colonne b et ligne inférieur à 6
    If Target.Column = 3 And Target.Row > 25 And Target.Count = 1 Then
        ' condition 2  : si cellule vide, valeurs supprimer de a à f
        If Target = "" Then Target.Offset(, -1).Resize(, 5) = ""
        ' valeur de la cellule sélectionnée chercher en onglet Feuil1, colonne a, parmi cellules visibles et constantes
        Set cc = Sheets("Produits").Columns(5).SpecialCells(xlCellTypeVisible).SpecialCells(xlCellTypeConstants).Find(Target)
        ' condition 3 : si cc (valeur) trouvée
        If Not cc Is Nothing Then
            ' valeurs dupliquer
            With Target
                ' en cellule colonne -1
                .Offset(, -1) = cc.Offset(, -3)
                ' en cellule colonne +2
                .Offset(, 2) = cc.Offset(, 8)
            End With
            ' fin condition 3
        End If
        ' fin conditon 1
    End If
    Application.Calculate
    Application.EnableEvents = True
End Sub
Par contre, j'attire ton attention sur les deux nouvelles lignes Application.EnableEvents qu'il est bon de prévoir systématiquement dans les événements Change pour éviter des redondances ou des tourne-en-rond infinis.

Cordialement.
 
Re : Recalcul d'une feuille

Bonsoir Papounet,

Je te remercie.

Je comprends donc que cela est définitif.
Y a t'il un moyen pour que ce soit à un moment donné si je le souhaite ?
Si non, ta proposition me va très bien quand même. Je modifierai ma macro manuellement si besoin.

Par contre, j'attire ton attention sur les deux nouvelles lignes Application.EnableEvents qu'il est bon de prévoir systématiquement dans les événements Change pour éviter des redondances ou des tourne-en-rond infinis.

Je vais regarder de plus près, mais peux tu d'ores et déjà m'expliquer ce que cela veut dire, même si j'ai compris la conséquence. Quel est le rôle de Application.EnableEvents ?

Merci et bonne fin de soirée.
 
Re : Recalcul d'une feuille

RE:

Rien n'est définitif, tu peux très bien insérer le Calculate à l'endroit où tu le souhaites. Toutefois je n'en vois pas l'intérêt d'autant que ça risque de ralentir le déroulement de la macro.

La procédure Change opérant des écritures sur la feuille, elle se relance du début à chaque fois. D'où le risque de ralentissement ou pire de boucle infinie terminant par un plantage. Cette instruction inhibe donc les répétitions mais il ne faut pas oublier de la remettre à True sinon elle ne se déclenchera plus.

Espérant avoir été limpide dans mes explications.

Bonne fin de soirée également.

Cordialement.
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

  • Question Question
Microsoft 365 worksheet_change
Réponses
29
Affichages
484
Réponses
2
Affichages
154
Réponses
5
Affichages
234
Réponses
4
Affichages
243
Réponses
5
Affichages
245
Retour