florebobosch
-
Modifié par baladur13 le 28/06/2016 à 10:47
Mosca -
28 juin 2016 à 14:11
Bonjour,
J'ai un classeur qui constitue une grille tarifaire : chaque ligne représente une pièce et donne son prix en fonction de sa quantité. J'ai créé un code permettant de masquer les lignes inutiles (lignes dont la quantité de la pièce est à 0) de mes feuilles avant de les imprimer seulement l'algorithme parcours la feuille ligne par ligne et cela prend beaucoup de temps (plus de 30s), est-ce que quelqu'un saurait comment améliorer mon code qui est le suivant ?
Sub imprimerfeuille()
Dim numerocol As Integer
Dim numerolig As Long
Dim Derlig As Long
Dim Cell As Range
Derlig = Split(ActiveSheet.UsedRange.Address, "$")(4)
numerocol = 2
For numerolig = 5 To Derlig
If Cells(numerolig, numerocol) = "0" Or IsEmpty(Cells(numerolig, numerocol)) Then
If Not Application.CountA(Cells(numerolig, numerocol).EntireRow) = 0 And Cells(numerolig, 3).Font.Bold = False And Not Cells(numerolig, 3).Interior.ColorIndex = 2 Then
Cells(numerolig, numerocol).EntireRow.Hidden = True
End If
End If
Next
ActiveSheet.PrintOut
With ActiveSheet.Cells
.EntireRow.Hidden = False
End With
End Sub
Merci d'avance, bonne journée!
Flore
EDIT : Ajout des balises de code (la coloration syntaxique). Explications disponibles ici : ICI
Juste une petite question sur le fonctionnement de ces deux lignes, qu'est-ce que ça fait au juste ? Est-ce que j'ai intérêt à le mettre dans tous mes programmes ?
J'ai une dernière question si vous avez le temps de me répondre, je voudrais maintenant créer un bouton "imprimer" dans la page d'entête qui imprime toutes les feuilles du classeur de la même façon que précédemment c'est-à-dire en supprimant toutes les lignes inutiles à chaque fois.
J'ai créé le code ci-dessous :
Sub toutimprimer()
Dim wks As Worksheet
If Worksheets("feuille1").Visible = True Then
Worksheets("feuille1").Activate
Call imprimerfeuille
ElseIf Worksheets("feuille2").Visible = True Then
Worksheets("feuille2").Activate
Call imprimerfeuille
End If
Worksheets("feuille3").Activate
Call imprimerfeuille
Worksheets("feuille3").Activate
Call imprimerfeuille
End Sub
Seulement encore une fois c'est très long et excel se place sur chaque feuille pour exécuter le code, est-il possible d'améliorer cela ?
28 juin 2016 à 11:13
28 juin 2016 à 11:22
Merci encore,
Flore
28 juin 2016 à 11:47
J'ai une dernière question si vous avez le temps de me répondre, je voudrais maintenant créer un bouton "imprimer" dans la page d'entête qui imprime toutes les feuilles du classeur de la même façon que précédemment c'est-à-dire en supprimant toutes les lignes inutiles à chaque fois.
J'ai créé le code ci-dessous :
Sub toutimprimer()
Dim wks As Worksheet
If Worksheets("feuille1").Visible = True Then
Worksheets("feuille1").Activate
Call imprimerfeuille
ElseIf Worksheets("feuille2").Visible = True Then
Worksheets("feuille2").Activate
Call imprimerfeuille
End If
Worksheets("feuille3").Activate
Call imprimerfeuille
Worksheets("feuille3").Activate
Call imprimerfeuille
End Sub
Seulement encore une fois c'est très long et excel se place sur chaque feuille pour exécuter le code, est-il possible d'améliorer cela ?
Merci, bonne journée,
Flore
28 juin 2016 à 14:11
C'est intéressant de l'utiliser lorsque la macro affecte l'affichage comme c'est le cas ici, pour un grand nombre d’itérations.
Sinon, la macro imprimerfeuille est assez simple, on ne peut pas l'améliorer significativement.
L'environnement de travail peut aussi influer sur les temps d'exécution (taille du fichier, capacités de la machine, travail en réseau...)
Bonne continuation