Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Sommaire pour Impression - Arrays, VBA

  • Initiateur de la discussion Initiateur de la discussion randle88
  • 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 !

R

randle88

Guest
Bonsoir à tous,

J'ai commencé à réaliser une petite macro, qui imprime les feuilles selon une condition, voir fichier joint.

Etant donné que je commence en VBA, j'imagine que le code que j'ai réalisé n'est pas optimal.

Je souhaiterais donc avoir vos suggestions concernant un code, pour réaliser un "sommaire" qui permettra d'imprimer les feuilles qui répondent à une condition (Oui dans la cellule de droite). Sachant que le nombre de feuille peut varier.

J'ai vu que les tableaux permettaient d'optimiser au mieux les codes, mais j'ai un peu de mal à les utiliser pour le moment. Je pense donc qu'avec un exemple concret, ce sera plus simple.

En vous remerciant par avance,
 

Pièces jointes

Re : Sommaire pour Impression - Arrays, VBA

Bonsoir randle88,

En passant par un tableau ont peux compresser le code comme ceci :

VB:
Sub test2()

Tabl = Range(Cells(6, 2), Cells(15, 3))

For i = 1 To UBound(Tabl)
If Tabl(i, 2) = "Oui" Then
Sheets(Tabl(i, 1)).PrintOut
End If
Next i

End Sub

Laurent
 
Re : Sommaire pour Impression - Arrays, VBA

Suite,

Si ont veu stoker le resultat dans un nouveau tableau :

VB:
 Sub test3()
'Stok les feuilles a imprimer dans un tableau a une dimenssion ici "TabStok"

' Mise en mémoire de la zone dans un tableau "Tabl"
Tabl = Range(Cells(6, 2), Cells(15, 3))

'Tableau a une dimension = Initialisation
Dim TabStok() As String
' Donne la dimenssion du tableau "TabStok" ici une seul case
ReDim TabStok(1)
' Variable qui initialise la variable j à 1 (pour la premiere case du tableau "TabStok"
j = j + 1

' Boucle sur (Mise en mémoire de la zone dans un tableau "Tabl")
For i = 1 To UBound(Tabl)
If Tabl(i, 2) = "Oui" Then     ' Ici la condition Tabl(i, 2) / i = Ligne et 2 pour la colonne 2 tu tableau (lecture dans la mémoire)
TabStok(j) = Tabl(i, 1)  ' ici TabStok(j) J = 1 premiere case du nouveau tableau et Tabl(i, 1) i = ligne et 1 colonne soit (Nom Feuil)
j = j + 1        ' Icrémente j soi (j = 1) et donc J + 1 = 2
ReDim Preserve TabStok(j) ' ici on redimenssionne le tableau en lui ajoutant une case soit J pour 2 et Preserve le donné (pas effacé)
End If
Next i

i = Empty
For i = 1 To UBound(TabStok) - 1   '  - 1 car enfaite l'incremetation de j est = a 4 mais le tableau est = a 3 case en faite
Sheets(TabStok(i)).PrintOut            '  ici on imprime la feuille (lecture dans le tableau) TabStok(i)) = i est = au numéro de la case
Next i

End Sub

J'ai essayer d'expliquer pas toujours simple (Il y a aussi le tableau a 2 dimenssion) mais pour la suite

laurent
 
Dernière édition:
Re : Sommaire pour Impression - Arrays, VBA

salut

avec PrintOut, il n'est pas sûr que ce soit plus rapide avec des tableaux.
Si... on veut simplifier le code initial, cela pourrait suffire :
Code:
Sub test()
  Dim C As Range
  For Each C In Sheets(1).Range("C6:C15")
    If C = "Oui" Then Sheets(C.Offset(, -1).Text).PrintOut
  Next
End Sub
 
Re : Sommaire pour Impression - Arrays, VBA

Merci je vais voir si c'est mieux ou pas avec les tableaux (c'était plus pour aborder les tableaux avec un cas concret comme j'ai un peu de mal pour l'instant).

Sinon comment pourrais je gérer le fait que la plage n'est pas défini (des nouvelles feuilles peuvent se rajouter?)

Merci d'avance
 
Re : Sommaire pour Impression - Arrays, VBA

Laurent, quant au code rédigé ci-dessous que j'ai un peu de mal à cerner, je voudrais savoir quelle est sa difference (et donc bénéfice) par rapport à votre code précedent ou celui de "Si..."

Juste pour comprendre un peu mieux l'utilité des tableaux

Merci par avance

PS : Si vous avez des codes pour réaliser cette tâche, n'hésitez pas à les poster, j'ai fait comme j'ai pu (avec mes maigres connaissances) mais je ne suis pas du tout réfractaire à une autre méthode.


 
Re : Sommaire pour Impression - Arrays, VBA



Bonjour

je trouve sa merveilleux ce code (débutant)
mais une question qui me trotte dans la tête
dans ce même code peu t’ont lui dire par exemple d'imprimer la cellule X a la colonne X ?
si mes données sont a la colonne A-B-C-D-E-F-G et en cellule 4-5-6-7-8-9-10-11
et imprimer B-C-G - 6-8-9
j'espère que je m'explique bien

merci a vous
 
Re : Sommaire pour Impression - Arrays, VBA

Je reviens avec cette macro,

J'ai au final, utilisé la première macro de laurent950 (au passage je ne suis toujours pas arrivé à décortiquer la deuxième).

Maintenant j'ai donc un fichier avec le même fonctionnement (Oui = imprime). J'ai ajouter dans une cellule (G7) un nombre de copie à imprimer.

Cependant lorsque je fait le test, les copies sortent non assemblées (si j'imprime A et B * 2, il sort dans cet ordre A A et B B). Je souhaiterais donc que les copies sortent dans l'ordre A B puis encore A B.

C'est peut etre là qu'utiliser un tableau est opportun ? (simple suggestion)

Si quelqu'un a une idée,

Merci par avance
 

Pièces jointes

Re : Sommaire pour Impression - Arrays, VBA

Bonsoir randle88,

Poste 7 et 8.
La différence avec le code de Si et mon code (Variable Tableau).
Si fait la lecture dans la feuille du classeur Excel en passant par une boucle for each.
Mon code Variable Tableau :
Les donner sont écrite en mémoire (Je n’ai plus besoin de la feuille Excel) pour la lecture des données, je les lis dans la mémoire de l’ordinateur.
Pour Lolo57
Oui c’est possible il faut en passant par une variable Tableau stocké les informations (Classeur et feuille en objet) repérer les positions qui nous intéresse est les stocker dans une variable Tableau. Ensuite le code sera d’imprimer les zones de sélection (En passant par une boucle sur la variable tableau)
Je vais répondre à randles88 dans un autre poste
Laurent
 
Re : Sommaire pour Impression - Arrays, VBA

Suite

Pour l'idée peu être cela :

VB:
Sub Impressionfeuille()

tabl = Range("B9").CurrentRegion
PrintNo = Range("G7")

For j = 1 To PrintNo
For i = 1 To UBound(tabl)
If tabl(i, 3) = "Oui" Then
Sheets(tabl(i, 1)).PrintOut Copies:=1, Collate:=True
End If
Next i
Next j

End Sub

Laurent
 
Re : Sommaire pour Impression - Arrays, VBA

Merci encore Laurent, je testerai ca demain.

Concernant la différence entre ton code et celui de Si, j'ai compris.

Ma question portait plutôt sur l'utilité de ton second code (le plus long) et l'utilité de stocker dans une nouveau tableau. Dans ton premier code, les valeurs sont aussi stockées dans la mémoire, si j'ai bien tout compris?

Suite,

Si ont veu stoker le resultat dans un nouveau tableau :

laurent

Merci en tout cas pour ta contribution
 
Dernière édition:
Re : Sommaire pour Impression - Arrays, VBA

Merci pour les liens, je vais tenté de voir ca,

Pour les cours, j'ai déjà recherché sur le net, mais pas évident au départ.

Merci
 
- 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
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

A
  • Résolu(e)
Réponses
2
Affichages
599
annesophan
A
C
Réponses
1
Affichages
2 K
W
Réponses
4
Affichages
3 K
WhatIsVBA
W
A
Réponses
2
Affichages
1 K
AntoineLTO
A
F
Réponses
14
Affichages
6 K
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…