Blocage de calcul aprés saisie

Bonjour à tous,

J'ai réaliser une application qui me permet de saisir des paramètres dans un fichier excel (sur plusieurs feuilles), puis, qui calcul automatiquement en fonction de divers facteurs.

Le problème je possède plus de 12000 lignes dans ma feuilles principale (un référentiel) et excel peine un peu lors des saisies...

J'aimerais savoir s'il est possible des bloquer les calculs de façon à ce qu'il ne s'exécute que lors des la fin de ma saisie par exemple.

Je vous remercie d'avance

Bonjour et bienvenue

Tu vas dans OUTILS ==> Options et dans l'onglet "Calcul" tu coches "Sur Ordre".

Quand tu voudras calculer, tu appuieras sur la touche F9

Amicalement

Nad

Bonjour à tous,

Bonjour Nad,

Tu peux aussi placer en début de code

Application.Calculation = xlCalculationManual

et en fin de code

Application.Calculation = xlCalculationAutomatic

Bonne journée

Claude.

Merci pour cette réponse rapide

Par contre ce qui m'arrangerais le plus c'est qu'excel effectue le calcul juste après que ma saisie soit faite. En bref, quand je clique sur un bouton dans ma feuille principale ça m'ouvre mon application où j'effectue mes saisie, j'aimerais que le calcul se fasse automatiquement après la fermeture de mon application.

Est-ce possible ?

Ah merci Claude

Je pense que ce que tu me propose est ce que j'attendais, je file tester ça de suite

re,

C'est ce que font les 2 lignes de code fournies + haut,

Maintenant si tu ne sais pas où les placés, envoie le code de ton bouton en question.

ou ton fichier.

Claude.

édit: on s'est croisés

Donc, voilà mon code :

Private Sub CboMNEMO_Click()
' lors d'une sélection clic de souris
' sélectionne la feuille Référentiel
    Sheets("Référentiel").Activate
    Range("A1").Select
    On Error Resume Next
' filtre sur le MNEMO
    Selection.AutoFilter Field:=1, Criteria1:=CboMNEMO.Value
    If Err.Number = 1004 Then Exit Sub
    On Error GoTo 0
' récupère le nom de rue
    Range("B1").Select
    Selection.End(xlDown).Select
    TxtLIBELLE_RUE.Value = ActiveCell.Value
' vide toutes les cellules inutiles
    Range("E" & maxlig + 1 & ":E65536").Select
    Selection.ClearContents
' copie les valeurs trouvées dans la colonne Tronçon pour alimenter la ComboBox CboTRONCON
    Range("E2:E" & maxlig).Select
    Selection.SpecialCells(xlCellTypeVisible).Select
    Selection.Copy
    Range("E" & maxlig + 4).Select
    Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
        False, Transpose:=False
    If ActiveCell.Offset(1, 0) <> "" Then
        Selection.End(xlDown).Select
    End If
    maxselection = ActiveCell.Row
    CboTRONCON.RowSource = "Référentiel!E" & maxlig + 4 & ":E" & maxselection
End Sub
Private Sub CboMNEMO_Enter()
' désactive le filtre si il y en a un lors de l'accès à CboMNEMO
    Sheets("Référentiel").Activate
    CboTRONCON.Style = fmStyleDropDownCombo
    CboTRONCON.Text = ""
    CboTRONCON.Style = fmStyleDropDownList
    Range("A1").Select
    Selection.AutoFilter
End Sub

Private Sub UserForm_Initialize()
' se positionne sur la feuille Référentiel
    Sheets("Référentiel").Activate
' se positionne sur la cellule A1
    Range("A1").Select
' se positionne sur la dernière cellule non vide de la colonne
    Selection.End(xlDown).Select
' récupère le numéro de ligne
    maxlig = ActiveCell.Row
' filtre élaboré sur place sans doublon + copie vers un autre emplacement pour avoir la liste des MNEEMO
    Range("A1:A" & maxlig).AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Range( _
        "A" & maxlig + 3), Unique:=True
' sepositionne sur la première cellule du résultat de la copie
    Range("A" & maxlig + 4).Select
' se positionne sur la dernière cellule non vide de la colonne
    Selection.End(xlDown).Select
' récupère le numéro de ligne
    maxselection = ActiveCell.Row
' approvisionne la propriété RowSource du ComboBox CboMNEMO qui permettra de sélectionner le MNEMO
    CboMNEMO.RowSource = "Référentiel!A" & maxlig + 4 & ":A" & maxselection
    Range("A1").Select
' désactive le filtre élaboré (affiche tout)
    Selection.AutoFilter

End Sub

Private Sub UserForm_Terminate()

' sélection de le feuille Référentiel
    Sheets("Référentiel").Activate
' suppression des lignes inutiles (ont servi pour les ComboBox)
    Rows(maxlig + 1 & ":65536").Select
    Selection.Delete Shift:=xlUp
' reclassement des trois feuilles de saisie
    Sheets("Trottoirs").Select
    Range("A1").Select
    If ActiveCell.Offset(1, 0) <> "" Then
        Selection.Sort Key1:=Range("G1"), Order1:=xlAscending, Header:=xlGuess, _
            OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
    End If
    Sheets("Obstacles").Select
    Range("A1").Select
    If ActiveCell.Offset(1, 0) <> "" Then
        Selection.Sort Key1:=Range("G1"), Order1:=xlAscending, Header:=xlGuess, _
            OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
    End If
    Sheets("AbaissementsPP").Select
    Range("A2").Select
    If ActiveCell.Offset(1, 0) <> "" Then
        Selection.Sort Key1:=Range("G3"), Order1:=xlAscending, Header:=xlGuess, _
            OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
        End If
' sélection de le feuille Référentiel
    Sheets("Référentiel").Activate
' sélection de la cellule A1
    Range("A1").Select
' retrait du filtre
    Selection.AutoFilter
    Application.Calculation = xlCalculationAutomatic
End Sub

Je pensais le placer au début et à la fin de ma procédure "UserForm_Terminate()" mais n'en étant pas certain je demande d'abord au plus avisés

Merci d'avance

Bonjour,

Je ne connais pas suffisamment les UserForm pour t'en dire +,

tu ne risque rien d'essayer comme tu dis.

Amicalement

Claude.

Rechercher des sujets similaires à "blocage calcul saisie"