XL 2013 Imposible de figer les volets avec une fonction sous-total

Marboi

XLDnaute Occasionnel
Bonjour à tous,

J'extrais un fichier d'Oracle (qui n'est pas très lisible en impression) puis le copie/colle dans un autre fichier sous excel 2013 pour faire une mise en page simplifiée et surtout automatisée. Bon la macro est une usine à gaz, mais elle fonctionne.
Il y a de la mise en page, du tri, la mise en forme SOUS-TOTAL etc... jusqu'à la ligne 1000 (pour l'extraction des données Oracle qui ne sont pas reconnus comme chiffres, donc obligation de multiplier par 1). Le tableau ne fait jamais le même nombre de lignes !

Le problème est que si j'inclus dans la macro la fonction de figer les volets (désactivée dans l'immédiat, à la fin de la macro), les volets se fixent à la ligne 3 alors que je veux la ligne 6, à cause d'une cellule qui contient la fonction SOUS-TOTAL. Si je place la fonction SOUS-TOTAL dans la macro à la fin, les volets sont bien figés mais la cellule SOUS TOTAL vient se mettre dans la colonne A6 alors qu'elle doit être dans la colonne Q3. C'est fou, non ?

Si vous voulez, je vous joins le fichier : sur la Feuil1 c'est pour la mise en page et la Feuil2 c'est le fichier extrait d'Oracle qui est donc copier/coller sur la Feuil1.

PS : si vous avez aussi la possibilité de m'expliquer : cette fameuse mise en forme Sous-Total, dans un tableau "normal" mets le sous-total à la dernière ligne ; dans mon tableau, la formule de la colonne Q est déplacée vers le bas en fonction du nombre de sous-totaux dans le tableau et donc un sous-total vers les lignes 1500/1600 ou autres alors que le tableau ne comporte ce nombre de lignes. La seule solution que j'ai trouvé étant de supprimer toutes les lignes après 1000 et faire ce fameux sous-total en Q3
Merci pour vos idées.
 

Pièces jointes

  • Copie de Mise en page Clients non soldés.xlsm
    66.6 KB · Affichages: 57

Marboi

XLDnaute Occasionnel
Bonsoir Lone-Wolf,

Tu as mal lu l'énoncé : le fichier est extrait d'Oracle et se présente ainsi : FNDWRR.EXE (je n'ai pas préciser le nom du fichier dans ma demande) que l'on peut ouvrir avec excel. Je l'ai mis sur la Feuille2 pour ne pas envoyer deux fichiers. Le copier/coller est donc bien distinct : 2 fichiers excel. Je conçois (comme je l'ai précisé) que la macro est une usine à gaz mais je l'ai fait rapidement avec l'enregistreur. Si j'ai fait cette macro, c'est justement pour ne pas faire de mise en page manuellement car ce fichier est envoyé à plusieurs personnes qui ont des difficultés avec excel et qui impriment bêtement ce fameux fichier sur je ne sais combien de page alors que l'on peut le rendre beaucoup plus clair avec les infos dont on à besoin (donc la mise en page).

Là tu ne réponds pas à ma question, mais c'est quand même sympa d'avoir pris le temps d'y regarder.
 

Lone-wolf

XLDnaute Barbatruc
Re

Une fois la copie faite, tu paramètre la mise en page manuellement, si moi ou d'autres on arrive à le faire, tu peux le faire aussi. La mise en page se fait une fois c'est tout et non à chaque copie exactement comme dans word; une fois que tu as fait la mise en page et tout le reste, c'est fait une fois pour toute. Et le manoeuvres sont moindre par rapport aux manoeuvres a ce que tu à fait avec la macro.

Voici le code simplifié, je n'ai pas ajouté les lignes à supprimés.

VB:
Private Sub CommandButton1_Click()
Feuil2.Range("a1:v47").Copy Feuil1.Range("a1")
With Feuil1
.Activate
ActiveWindow.FreezePanes = False
.Columns.AutoFit
.Range("N:N").ColumnWidth = 0
.Rows("6:6").Select
ActiveWindow.FreezePanes = True
Application.Goto .Range("a1")
End With
End Sub

EDIT: Ton fichier en retour avec mise en page manuelle.
 

Pièces jointes

  • Mise en page Clients non soldés.xlsm
    46.9 KB · Affichages: 43
Dernière édition:

Marboi

XLDnaute Occasionnel
Bonsoir,
Je sais manipuler les mise en page et généralement je le fais par macros (elles sont généralement plus simples que ce cas). Là je ne pourrai tester car chez moi je suis encore sous excel 2007 et à priori il y à incompatibilité ; je le fais demain au boulot.

Je ne comprends pas bien la mise en page une fois effectuée elle demeure. Quand je fais un copier/coller de la feuille au complet sur mon fichier de mise en page, la copie est à l'identique du fichier Oracle, donc il faut retravailler la mise en page à chaque fois, soit manuellement soit par macro.

Par contre ta macro fait quoi exactement ? Si je comprends bien elle fige les volets ?

Merci de passer ton temps sur mon problème.
 

Lone-wolf

XLDnaute Barbatruc
Re,

Pour commencer(dans le fichier corrigé en PJ), elle supprime en feuille2 les espaces des cellules numeriques( copiées au format texte, donc impossible de faire le sous-total). Ajoute en D4 le sous-total par macro, cree une liste de validation en B11 pour les noms des clients et un filtre, fige les volets en ligne 5 et met à zero la colonne N comme tu fais dans ta macro. Pour le reste, je n'ai pas compris ce que tu as voulu faire.
 

Pièces jointes

  • Mise en page.xlsm
    44.1 KB · Affichages: 54
Dernière édition:

Marboi

XLDnaute Occasionnel
Bonjour et merci,

Ce n'est pas ce que j'attendais mais j'ai pu utiliser une partie de ton code pour figer les volets (Rows !) moi je mettais Range et ça fonctionne. Par la suite je vais essayé de modifier ma macro pour qu'elle soit propre ; comme je l'ai dit plus haut, je l'ai fait avec l'enregistreur alors !...

Je reviendrai peut-être pour quelques infos supplémentaires, bonne journée.
 

Marboi

XLDnaute Occasionnel
Re bonjour,

Avec de la patiente, j'ai finalement réussi à refaire la macro (de temps en temps avec l'enregistreur) en cherchant par ci par là les bouts de codes qui m'intéressait. Ça marche, avec excel 2015 mais pas 2007.

Merci pour vous êtes intéressé à mon cas ; je mets en copie mon fichier, il y aura sans doute des possibilités d'améliorations mais bon !..

Bonne soirée.
 

Pièces jointes

  • Mise en page Clients non soldés.xlsm
    44.9 KB · Affichages: 54

Lone-wolf

XLDnaute Barbatruc
Bonsoir Marboi

Il faut supprimer tous ces SELECT, je l'ai pourtant dit dans mon précédent message. Faire (exemple)

Sheets(1).Select
Range("a1").Select
Selection.Copy
Sheets(2).Select
ActiveSheet.Range("G25").Select
Selection.PasteSpecial Paste;=xlValues
Application.CuteCopyMode = False

Se résume ainsi: Sheets(1).Range("A1").Copy Sheets(2).Range("G25")

Oubien

With Sheets(2)
. Range("g25").Value = Sheets(1).Range("a1").Value
With .Range("g25")
.Font.Bold = True
.Font.ColorIndex = 3
.HorizontalAlignement = xlCenter
End With
End With

Personnellement je n'aime pas les Select, je fume les Marlboro. :D
 
Dernière édition:

Statistiques des forums

Discussions
312 223
Messages
2 086 397
Membres
103 200
dernier inscrit
pascalgip