CODE pour séparation de données/impression

almas

XLDnaute Occasionnel
Bonjour le forum

j 'ai une problématique et je ne sais pas par quelle bout la prendre.

j 'ai un tableau de données généré par une macro via une condition dans une liste déroulante

Ce tableau à donc jamais les mêmes données

j 'ai besoins de faire une impression ce ces données mais noms par noms

or un noms peut avoir 2 lignes ou 10 lignes et ça change selon la condition

je sais pas si je doit partir dans une création de nouvel onglets avant d imprimer ou si on peut le faire directement

j 'ai mis un fichier de ce que pourrai être un de ces tableaux généré

Au final il me faudrait une impression par noms avec les titres de façon automatique( afin d 'éviter de filtrer chaque nom puis d'imprimer car je peut avoir plus de 50 noms)
Mon idée est un code affecté a un bouton qui effectuait l'opération

Merci
 

Pièces jointes

  • TEST 1.xls
    30.5 KB · Affichages: 32
  • TEST 1.xls
    30.5 KB · Affichages: 32
  • TEST 1.xls
    30.5 KB · Affichages: 33

Caillou

XLDnaute Impliqué
Re : CODE pour séparation de données/impression

bonjour,

Tu peux peut-etre créer une macro qui réalise les opérations suivantes :
- extraction sans doublons des noms dans une colonne vide de ta feuille
- boucle sur les noms extraits pour faire un filtre auto

Code:
Sub Macro1()
  Dim i As Integer

  i = 2
  
  'extrait sans doublons
  Range("A1").Copy
  Range("P1").Select
  ActiveSheet.Paste
  Range("A1").Select
  Application.CutCopyMode = False
  'boucle sur les noms extraits
  Do Until IsEmpty(Cells(i, "P"))
    Range("A1").CurrentRegion.AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Range( _
        "P1"), Unique:=True
    Range("A1").Select
    Selection.AutoFilter
    ActiveSheet.Range("$A$1").CurrentRegion.AutoFilter Field:=1, Criteria1:=Cells(i, "P")
    
    'Aperçu (remplacer PrintPreview par PrintOut pour imprimer)
    ActiveWindow.SelectedSheets.PrintPreview
    
    i = i + 1
  Loop
End Sub

Caillou
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : CODE pour séparation de données/impression

Bonjour Almas, Caillou, bonjour le forum,

Une autre proposition :

Code:
Sub Macro1()
Dim OS As Object 'déclare la variable OS (Onglet Source)
Dim DL As Integer 'déclare la variable DL (Dernière Ligne)
Dim PL As Range 'déclare la variable PL (PLage)
Dim D As Object 'déclare la variable D (Dictionnaire)
Dim CEL As Range 'déclare la variable CEL (CELlule)
Dim TMP As Variant 'déclare la variable TMP (tableau TeMPoraire)
Dim I As Long 'déclare la variable I (Incrément)
 
Application.ScreenUpdating = False 'masque les rafraîchissements d'écran
Set OS = Sheets("Feuil1") 'définit l'onglet source OS
DL = OS.Cells(Application.Rows.Count, 1).End(xlUp).Row 'définit la dernière ligne éditée DL de la colonne 1 (=A) de l'onglet OS
Set PL = OS.Range("A2:A" & DL) 'définit la palge PL
Set D = CreateObject("Scripting.Dictionary") 'définit le dictionnaire D
For Each CEL In PL 'boucle sur toutes les cellules CEL de la plage PL
    D(CEL.Value) = "" 'alimente le dictionnaire D
Next CEL 'prochaine cellule de la boucle
TMP = D.keys 'récupère dans la tableau temporaire TMP les éléments uniques (sans doublon) du dictionnaire D
For I = 0 To UBound(TMP) 'boucle sur tous les éléments uniques du tableau temporaire TMP
    OS.Range("A1").AutoFilter Field:=1, Criteria1:=TMP(I) 'filtre la colonne 1 (=A) de l'onglet OS avec TMP(I) comme critère
    ActiveSheet.PrintOut 'imprime l'onglet filtré
    OS.Range("A1").AutoFilter 'supprime le filtre automatique
Next I 'prochain élément de la boucle
Application.ScreenUpdating = True 'affiche les rafraîchissements d'écran
End Sub
 

almas

XLDnaute Occasionnel
Re : CODE pour séparation de données/impression

bon j 'ai tester les 2 code
deja merci a vous 2 pour avoir pris le temps de le composer
dsl caillou mais je n 'ai pas réussi a faire fonctionner ton code....

robert pour le tiens pas de problème et en plus les explication c 'est top!

par contre j 'ai un problème de mise en page pour le transposer sur mon classeur original

j 'ai pourtant décalé les référence de cellule mais je n 'arrive pas au même résultat que le fichier test (pas la ligne titre a chaque page)
j' ai reporter la mise en page original sur le fichier test mais j 'ai pas trouver la solution( pourtant mis le début de plage en A7 et filtre en A8) mais j 'ai jamais la ligne A7 qui s 'imprime
 

Pièces jointes

  • TEST 1-1.xls
    36 KB · Affichages: 24
  • TEST 1-1.xls
    36 KB · Affichages: 23
  • TEST 1-1.xls
    36 KB · Affichages: 24

Caillou

XLDnaute Impliqué
Re : CODE pour séparation de données/impression

Bonjour,

La mise en page n'est pas correcte car lorsque le filtre est activé en A7, c'est toute la place de cellules contigües qui est filtrée, or il y a des données en lignes 5 & 6 (donc contigüe à 7), les en-têtes de colonnes de la plage deviennent donc la ligne 5 (au lieu de 7).
Solution : Il suffit de faire en sorte que la ligne 6 soit vide : déplace les données des lignes 5 & 6 vers le haut (en 4 & 5 par exemple) et il n'y aura même pas besoin de toucher au code !!!!!

Par contre le code que j'avais fourni fonctionne !!!!!!!!

Caillou
 
Dernière édition:

almas

XLDnaute Occasionnel
Re : CODE pour séparation de données/impression

merci cailloux pour l astuce
j 'ai trouver aussi avec les saut de page CA marche

Pour ton code j 'ai pourtant bien remplacé la commande mais rien ne s imprime
je vais retester

merci encore
 

almas

XLDnaute Occasionnel
Re : CODE pour séparation de données/impression

bonjour le forum

bon tous marche bien maintenant mais je voudrai reporter le nom en titre sur chaque impression et le code que j 'ai essayé n'est pas le bon ou alors je le place pas au bonne endroit dans la boucle.
j 'ai simplement utilisé==> Range("E3").Value = Range("A8").Value

seul le 1er nom s 'affiche

merci
 

Pièces jointes

  • TEST 1-1.xls
    37.5 KB · Affichages: 29
  • TEST 1-1.xls
    37.5 KB · Affichages: 24
  • TEST 1-1.xls
    37.5 KB · Affichages: 28

almas

XLDnaute Occasionnel
Re : CODE pour séparation de données/impression

re
j 'ai tester une autre ligne de code mais cette fois il me met la cellule a1 sur une des feuilles en E3
Range("E3").Value = Range("A8").SpecialCells(xlCellTypeVisible).Value
j 'avoue être perdu, qu'es que je fait mal?:confused:
 

Discussions similaires

Statistiques des forums

Discussions
312 764
Messages
2 091 862
Membres
105 082
dernier inscrit
saragestion