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
- Messages
- 9'245
- Excel
- Vista Office 2007FR
- Inscrit
- 08/12/2007
- Emploi
- retraité Sce.Méthodes
Bonjour à tous,
Bonjour Nad,
Tu peux aussi placer en début de code
Application.Calculation = xlCalculationManualet en fin de code
Application.Calculation = xlCalculationAutomaticBonne 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
- Messages
- 9'245
- Excel
- Vista Office 2007FR
- Inscrit
- 08/12/2007
- Emploi
- retraité Sce.Méthodes
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 SubJe 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
- Messages
- 9'245
- Excel
- Vista Office 2007FR
- Inscrit
- 08/12/2007
- Emploi
- retraité Sce.Méthodes
Bonjour,
Je ne connais pas suffisamment les UserForm pour t'en dire +,
tu ne risque rien d'essayer comme tu dis.
Amicalement
Claude.