PROBLEME DE MACRO

  • Initiateur de la discussion br44
  • Date de début
B

br44

Guest
Bonjour le forum
voilà j'ai un petit soussi de macros à vous soumettre .
J'ai créer deux macros corespondant chacune au format d'un tablau placé dans le même classeur mais n'étant pour deux feuilles différante ,je les ai placées dans deux modules différants .

Est-il possible de modifier ces macros pour quelles s'executent l'une sous l'autres sachant que l'une commance par:

sub MacforDét
Columns('A:A').ColumnWidth = 19.14
Columns('B:G').Select
Selection.ColumnWidth = 13.14
Range('A1:G2').Select
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlBottom
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
etc....

l'autre
Sub MacForFac()
'
' Macro2
' Macro enregistrée le 28/04/2006 par rimmelé
'

'
Columns('A:A').ColumnWidth = 19.14
Columns('B:G').Select
Selection.ColumnWidth = 13.14
Rows('1:5').Select
Selection.RowHeight = 18
Range('A1:C1,A2:C2,A3:C3,A4:C4,A5:C5,E2:F2').Select
Range('E2').Activate
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlBottom
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
Selection.Merge
Range('A1:C1').Select
With Selection.Font
.Name = 'Arial'
.Size = 14
.Strikethrough = False
.Superscript = False
.Subscript = False
.OutlineFont = False
.Shadow = False
.Underline = xlUnderlineStyleNone
.ColorIndex = xlAutomatic
End With
mon problème au niveau de la deuxième macro

Selection.merge
Range ('A1:C1').Select

comment faire pour que la celleule de destination soit prise pour la cellule ('A1').

En èspèrant avoir ètè claire je vous dis à bientôt sur ce fil ,et vous remercie par avance de l'aide que vous pourrez me donner
br44
 

Gorfael

XLDnaute Barbatruc
Salut br44
Est-il possible de modifier ces macros pour quelles s'executent l'une sous l'autres
l'une après l'autre ?
Vu tes macros, c'est du formatage de cellules.

Déjà, commence par épurer ton code : tout ce qui ne change pas, tu ne le mentionnes pas dans ta macro. par exemple :
.VerticalAlignment = xlBottom
.WrapText = False
sont par défaut. Si tu ne les modifies pas, ne les mentionnes pas, ton code en deviendra plus lisible
--------------------
Sub Macro()
Sheets('A').Columns('A:A').ColumnWidth = 19.14
Sheets('A').Columns('B:G').ColumnWidth = 13.14
Sheets('B').Columns('A:A').ColumnWidth = 19.14
Sheets('B').Columns('B:G').ColumnWidth = 13.14
End Sub

En une seule macro, tu mets les colonnes A des feuille A et B à 19.14 de largeur et pour les colonnes B à G à 13.14 sur les 2 feuilles
-----------------------
Range('A1:C1,A2:C2,A3:C3,A4:C4,A5:C5,E2:F2').Select
Range('E2').Activate
Pourquoi tu active la cellule E2 ici ?
Selection.Merge
Range('A1:C1').Select
With Selection.Font
.Name = 'Arial'
.Size = 14
.Strikethrough = False
.Superscript = False
.Subscript = False
.OutlineFont = False
.Shadow = False
.Underline = xlUnderlineStyleNone
.ColorIndex = xlAutomatic

End With
Tu viens de fusionner A1:C1. Donc, pas besoin de rementionner A1:C1, A1 suffit

Tout ce que j'ai mis en italique sont les valeurs par défaut. Pas besoin de les remettre, ça alourdit le code pour rien

mon problème au niveau de la deuxième macro
Selection.merge
Range ('A1:C1').Select

comment faire pour que la cellule de destination soit prise pour la cellule ('A1')
P'vez répéter la question ? :eek:
La cellule de destination de quoi ?
Tu as fusionné A1:C1
Donc tout ce que tu mets en A1, B1 ou C1 apparait en A1

Explique mieux ton problème pour qu'on puisse te répondre
A+
 
B

br44

Guest
re: Bonjour gorfael
d'abors merci pour avoir répondu aussi vite à ce message .

Pour répondre à t'es questions
1) j'ai construit mes macros avec l'enregistreur d'ou la longueur
2) il s'agit effectivement du formats de mes tableaux mais ils sont sur deux feuilles différantes et sont de tailles et de formes diffèrantes :
feuille('Détail)fait A1:g29
Feuille (Facture) Fait A1:G50
je voudrais quelle s'executes dans un autres classeur afin qu'elle s'affiche l'une sous l'autre soit :
(Détail)de A1 à G29 puis
(Facture) de G30 à G80
et ainsi de suite .Le tout à partir d'un userfrom
j'ai resussi à executer la première macros mais pour la deux sa bloque au niveau que j'ai indiquer .
je vais joindre mon fichier aux complet mais il faut que j'enregistres ma dernière modifies et que le poste ci cela peut te rendre service. bon à plus et merci encore
BR44
 

br44

XLDnaute Impliqué
re: nouvelle essais dèsoler mais eu un petit problème de poids je joint 2 fichiers

Ouvrir le dosier P1 en premier
classeur a.xls dans P2

Désole br44

[file name=p2_20060502185757.zip size=11782]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/p2_20060502185757.zip[/file]
[file name=p2_20060502185757.zip size=11782]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/p2_20060502185757.zip[/file]
 

Pièces jointes

  • p2_20060502185757.zip
    11.5 KB · Affichages: 40

br44

XLDnaute Impliqué
re: le p1 maintenant

vraiment désolé
br44


[file name=p1.zip size=50039]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/p1.zip[/file]
 

Pièces jointes

  • p1.zip
    48.9 KB · Affichages: 20
  • p1.zip
    48.9 KB · Affichages: 21
  • p1.zip
    48.9 KB · Affichages: 19

Gorfael

XLDnaute Barbatruc
Salut
On va reprendre au début les régles de base d'un forum : pas de données personnelles.
Ton fichier C ne contient que ça.

Pas besoin de multiplier les postes : édites-les.
Tu en as un qui à 2 fichiers. si tu l'édites, tu vas te rendres compte que les lignes servant à joindre les fichiers apparaîssent dans ton message. Supprimes celle qui fait doublon.

Quand tu travailles avec plusieurs fichiers, pour envoyer un exemple, condenses-le en un seul de 2 feuilles qui expose uniquement ton problème. Ce que tu cherches n'est pas le programme complet, mais le moyen de résoudre un problème ponctuel. Si c'est trop fouillis, personne ne va passer deux jours pour comprendre comment tu t'y prends, alors que s'il n'y a que la partie qui ne fonctionne pas, tu auras un tas de réponses rapides.

Quand tu fais une macro à base de macro automatique, mets les lignes qui ne te semblent pas nécessaires en commentaire ('). Comme ça, si ta macro fait bien ce que tu veux, tu peux les effacer, sinon, tu enlèves l'apostrophe et tu as ton code de départ.

Fichier C
Colonne F
Au lieu de te faire chier à ajouter des espace, tu te mets derrière le nom et Alt+Enter : retour à la ligne manuel.

Fichier F
Feuille détails
Tu fusionnes A1:G2 ?
Ne fusionnes que quand c'est nécessaire.
Fusionnes A1:G1 et doubles ta hauteur de ligne.

Feuille Facture
Tu sautes des lignes, tu fusionnes des tas de cellules en horizontal et en vertical, sans justification fonctionnelle. Si tu veux arriver à des résultats exploitables et maintenables, évites.
un exemple : si tu veux sauvegarder les quantités, (ou les inscrire) par macro, tu vas ête obligé de faire une boucle du style
For X = 26 to 36 step 2
Traitement
next
Le problème n'est jamais à la création, tu sais ce que tu es en train de faire (enfin j'espère :silly: ). Mais si dans 6 mois, tu dois te replonger dedans, plus ton code sera simple et logique, mieux tu t'y retrouveras

code macro
Range('A48').Activate pas nécessaire : tu fais une sélection et tu fini toujours pas être sur une cellule qui devient active, ce que la macro automatique inscrit

ActiveWindow.SmallScroll Down:=-18 t'as fait un défilement pour trouver tes cellules, ça sert à rien dans ta macro finale

Tu fais des modification sur la cellule E11 ? Elle est vide alors que la cellule E12 correspond à quelque chose.
C'est ça l'avantage de mettre un tas de lignes vides qui ne servent à rien : tu ne peux rien vérifier rapidement.

Ton code part dans tous les sens : structures-le.
Les largeurs des colonnes
Les hauteurs de lignes
le format communs des cellules
.font.bold = true
.font.name = 'Arial'
sur les colonnes A:G éviteront tes répétitions à n'en plus finir
Si t'as 3 cellules en normal, et bien ça te feras seulement 4 lignes de code pour tout définir, alors que tu dois en avoir une trentaine.

Et maintenant la question qui tue :
Tes macros : À quoi elles servent ?
Si je comprends bien, ce sont des macros de mises en forme de plages sur des feuilles. Pourquoi tu veux faire ça par macro ? Une fois que c'est fait, tu n'as pas besoin de le refaire !?
A+

Message édité par: Gorfael, à: 03/05/2006 15:13
 
B

br44

Guest
re: Bonjour le forum ,Bonjour Gorfael

Tout d'abor je suis désolé pour les doublons de fichier expédiés ,j'ais mon fichier principal(F.XLS)qui est trop lourd j'ai essayé de l'allèger au maximum.

en ce qui conserne les données personnelles se n'est pas le cas ,elles sont totalement bidon et ne servent comme exmples.

maintenant en se qui consernent mes macros,je suis dèbutants en vba et de me servir de l'enregistreur ma paru la solution la plus simple et la plus rapide ,ne connaissant pas les termes excat.

En fin pour répondre a t'es questions:
1)Mes macros me servent à reproduir le format de mes feuilles vers la classeur A.XLS
après avoir copier les valeurs.
2)je me suis servis de macros pour le formats pour la simple et bonne raison que la methode :
Copier/Coller sans liaisons ne ma donnais pas le résultats que je désirais .
3)si j'ai besoin de reproduir plusieur fois mes feuilles c'est que j'ai plusieur clients et chaqu'un deux à un exemplaire de chaqu'une des feuilles, sans compter que parmis eux j'ai des groupages de clients (plusieures feuilles'Détail' pour une feuille'Facture').l'autres raisons et qu'une fois le mois terminé je n'aurais plus qu'a imprimer l'essenble de mes FACURES à partir du classeur à.xls Puisqu'elles seront regrouper au même endroits ,le classeur F ne servant qu'à la saisie .
Pour conclure je voudrais simplement pouvoir placer mes deux feuilles du classeur F l'une sous l'autres dans une seule feuille du classeur A ?
je tient à te remercier pour t'es conseil ainsi que du temps que tu à pris pour me rèpondre .Je vais donc essayer de refaire mes macros en fonction de ce que tu ma dis. je m'excuse pour tout les problèmes que celà à put occasioner et te dis à bientôt sur le forum br44
 

Gorfael

XLDnaute Barbatruc
Salut br44
je m'excuse pour tout les problèmes que celà à put occasioner
Et pis quoi encore ! Si ça m'emmerde, je réponds pas et j'ai pas de problème, comme tout ceux qui répondent sur le forum.

Juste un truc :
quand tu fais du code à partir d'une macro automatique, fais-le étape par étape. Tu fais une manip, tu arrêts ta macro et tu exploites ton nouveau code dans ta macro finale, et ainsi de suite.
Ou tu fais une série d'opérations et tu mets une 'balise'
par exemple :
mise en forme ligne 1
H1='AAAA'
lise en forme ligne 2
H1 = 'BBBB'
etc. ça te permets de savoir que les opérations entre DDDD et EEEE ne sont pas bonnes et que tu les as refaites entre LLLL et MMMM

regardes dans ta macro de mise en forme facture, tu as E11 qui apparait plusieurs fois pour la même mise en forme.

Ta macro finale peut prendre deux forme :
soit une seule macro
Sub Macro_globale()
Sheets('Facture').activate
Traitement Facture
Sheets('Détails').activate
Traitement détails
End Sub
soit des macros séparées
Sub Macro_Principale()
Sheets('Facture').activate
Call Macro_Facture
Sheets('Détails').activate
Call Macro_Détails
End Sub

Sub Macro_Facture()
Traitement Facture
End Sub

Sub Macro_Détails()
Traitement détails
End Sub
ou tu peus faire juste les Call dans la macro principale et les activation dans les macros respectives.
Tout dépend de comment tu vas travailler.
La deuxième méthode te permet d'appliquer ton formatage facture ou détails en étant sur la feuille à formater, sans que le nom corresponde
Et si demain, tu changes le nom de la feuille, au lieu de détails tu l'appelles 'récapitulatif', tu change juste le nom de la feuille.
Ou si tu crées une/plusieurs mises en forme suivant des critère, tu crées d'autres macros de mise en forme et dans la Maco_Principale, tu fais un test avec choix, c'est plus souple à maintenir.
A+
 
B

br44

Guest
re:Bonjour le forum ,Bonjour Gorfael

je te remercie de touts t'es conseils il me permettre d'apprendre .En ce qui conserne ma procédure d'execution je l'ai déjàs trouver et tester .Il suffit que je l'insert dans ma procédure de copy avec la methode RUN.
en agreger sa donne:

Sub CommandButton2_Click()

With Wb2.'Activate
Sheets('Détail').Range('A1:G29').Copy
End With
Sheets(Mois).Range('A65536').End(xlUp).PasteSpecial Paste:=XlValues
Operation:XlNone,SkipBlancks:=False,Transpose:=False
Range('A1').Select
With Wb2'.Activate
Run 'MacForDét'
End With
End Sub

Il faut maintenant que rèpete cette action avec la feuille 'Facture' .le Seul Souci et que la macro qui se trouve en position 2 ne s'excute pas pour cause de depart indantique
elle commance toutes les deux en ('A1')d'ou ma questtion du dèpart :

Commant dir à la macros qu'elle commance toujour en ('A1') quelque soit la cellule de destination ('A80','A110'ect..) ?

Tu trouveras la procédure complete dans le code de l'userfron du classeur F.xls .
J'espère avoir ètè claire dans ma demande cette fois ci et te remercie encore de touts t'es conseils. bon je retourne à la cure d'amègrisement pour macros et te dis à plus sur sur le fil
Br44

:)
 

Statistiques des forums

Discussions
312 496
Messages
2 088 979
Membres
103 996
dernier inscrit
KB4175