Macro excel

Résolu/Fermé
red-69 Messages postés 15 Date d'inscription vendredi 2 mai 2008 Statut Membre Dernière intervention 8 mai 2008 - 2 mai 2008 à 14:37
Le Pingou Messages postés 12227 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 6 janvier 2025 - 7 mai 2008 à 13:48
Bonjour,

Je débute en macro et je souhaite à partir d'un tableau excel créer une macro qui me fasse apparaître une nouvelle feuille pour chaque nouvelle entité de l'une de mes colonnes.
Je m'explique :
En colonne A c'est le nom des clients et je veux une nouvelle feuille pour chaque client qui reprenne toutes les données de ce client.

Merci d'avance.
A voir également:

10 réponses

gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 713
5 mai 2008 à 22:57
bonjour red-69,

Puisque tu n'apprécies pas la gestion des événements, voici le modèle avec le gros bouton à cliquer : https://www.cjoint.com/?ffwZTB5Am4

Excel ne gère pas la casse dans le nom des onglets donc je fonctionne en majuscule comme toi.

PS : bonjour Le Pingou et merci de l'aide mais red-69 ne veux apparemment pas d'événementiel car il n'a pas intégré ses fonctionnalités avancées qu'il faut comprendre pour les utiliser.
2
Le Pingou Messages postés 12227 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 6 janvier 2025 1 454
5 mai 2008 à 23:29
Merci gbinforme,
J'ai apprécié de découvrir votre procédure et d'enrichir mon savoir.
Bonne soirée.
0
aquarelle Messages postés 7141 Date d'inscription dimanche 8 avril 2007 Statut Modérateur Dernière intervention 19 décembre 2024 1 303
6 mai 2008 à 00:09
Je me joins aux remerciements de Le Pingou car comme lui, la lecture de vos procédures me permet d'apprendre énormément.
Je profite donc aussi de l'occasion pour te saluer Le Pingou car cela faisait longtemps que nous ne nous étions pas croisés.
Bonne nuit et jolis rêves à tous ;-)
0
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 713 > aquarelle Messages postés 7141 Date d'inscription dimanche 8 avril 2007 Statut Modérateur Dernière intervention 19 décembre 2024
6 mai 2008 à 08:20
bonjour

Merci pour ce sympathique message car une belle journée commence !

En fait chacun progresse avec les échanges d'idées... et c'est très bien ainsi.

à très bientôt sur un autre sujet.
0
Le Pingou Messages postés 12227 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 6 janvier 2025 1 454 > aquarelle Messages postés 7141 Date d'inscription dimanche 8 avril 2007 Statut Modérateur Dernière intervention 19 décembre 2024
6 mai 2008 à 08:37
Merci aquarelle, bonne semaine.
0
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 713
4 mai 2008 à 09:45
bonjour

C'est tout à fait possible mais ce n'est pas nécessairement une bonne formule car le nombre d'onglets n'est pas infini mais limité par la mémoire.

Si tu as plusieurs dizaines de clients tu sera rapidement bloqué sinon je peux te mettre un exemple.
0
Merci gbinforme de répondre.

Le nom de clients n'est pas très élevé, entre 5 à 10 par fichier. En revanche j'ai un nombre important de ficihers excel c'est pour cela qu'une macro s'impose à mon avis.
Si tu pouvais me donner ton exemple, ce serait avec joie.
0
Bonjour,

Question pour les pros de la macro: que signifie le message "erreur de compilation dans le module caché this workbook"?
0
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 713
4 mai 2008 à 21:54
bonjour

Voici donc un petit exemple qui fait cela à partir d'une feuille "modèle"pour avoir le même formatage des données

https://www.cjoint.com/?fevZdLj6Dw
0
red-69 Messages postés 15 Date d'inscription vendredi 2 mai 2008 Statut Membre Dernière intervention 8 mai 2008
4 mai 2008 à 23:21
Ton fichier semble répondre à mes attentes. Je n'ai juste pas accès à la macro !!! je peux donc pas la reproduire pour mes propres fichiers. Pourrais-tu me la fournir stp ??
0
aquarelle Messages postés 7141 Date d'inscription dimanche 8 avril 2007 Statut Modérateur Dernière intervention 19 décembre 2024 1 303 > red-69 Messages postés 15 Date d'inscription vendredi 2 mai 2008 Statut Membre Dernière intervention 8 mai 2008
4 mai 2008 à 23:33
Bonsoir red-69,
La macro que gbinforme te propose est une macro évènementielle, donc quand tu es dans l'éditeur VBA, dans l'arborescence, il te faut double cliquer sur "Feuil1(récapitulatif)" et tu y verras la macro qu'il a faite.
Bonne nuit
0
red-69 Messages postés 15 Date d'inscription vendredi 2 mai 2008 Statut Membre Dernière intervention 8 mai 2008 > aquarelle Messages postés 7141 Date d'inscription dimanche 8 avril 2007 Statut Modérateur Dernière intervention 19 décembre 2024
5 mai 2008 à 09:47
Bonjour,

j'essaye de faire tourner la macro de gbinforme, mais lorsque j'exécute sa macro à son exemple pour bien comprendre le principe, cela m'indique erreur d'exécution 424 et le débogage se bloque sur la ligne "For Each sel In zone".

que dois-je faire pour réussir à la faire fonctionner ?
0
aquarelle Messages postés 7141 Date d'inscription dimanche 8 avril 2007 Statut Modérateur Dernière intervention 19 décembre 2024 1 303 > red-69 Messages postés 15 Date d'inscription vendredi 2 mai 2008 Statut Membre Dernière intervention 8 mai 2008
5 mai 2008 à 10:13
Bonjour,
La macro de gbinforme n'est, en fait, pas une macro habituelle, comme je te l'ai dit au dessus c'est une macro évenementielle qui se déclenche seule à partir du moment où le contenu de certaines cellules changent, tu n'as pas à la lancer toi même.
Pour la déclencher, il te suffit de compléter dans la feuille "récapitulatif", une nouvelle ligne du tableau : n°client /QUANTITE/INTITULE /UNITE (la macro se déclenchera seule et ajoutera un nouvel onglet).
J'espère que ces explications t'aideront quelque peu.
Bonne journée

0
red-69 Messages postés 15 Date d'inscription vendredi 2 mai 2008 Statut Membre Dernière intervention 8 mai 2008 > aquarelle Messages postés 7141 Date d'inscription dimanche 8 avril 2007 Statut Modérateur Dernière intervention 19 décembre 2024
5 mai 2008 à 10:39
D'accord merci de ces explications.

Du coup je viens de le tester, cela fonctionne effectivement comme tu l'annonces.
Seul souci maintenant, si dans la feuille récapitulatif je créer la ligne 1 avec le client A pour une quantité de 1, intutile AA et Unité AA et sur la ligne 2 je créer le client A pour une quantité de 2, intutile AA et Unité AA, un nouvel onglet apparait nommé "A" (donc jusqu'ici tout va bien) par contre dans ce nouvel onglet, n'apparait que la ligne 2 le client A avec la quantité 1 n'existe pas.

Il me faudrait dans l'onglet A en ligne 1 le client A quantité 1 et en ligne 2 le client A avec la quantité 2

merci d'avance pour votre aide
0
aquarelle Messages postés 7141 Date d'inscription dimanche 8 avril 2007 Statut Modérateur Dernière intervention 19 décembre 2024 1 303
5 mai 2008 à 11:20
'Lu,
Là, désolée mais il va te falloir attendre que gbinforme (que je salue au passage) revienne car je ne m'y connais pas suffisamment dans ce genre de macro pour pouvoir t'aider. Je suis juste intervenue pour t'aider à comprendre comment fonctionnait la macro.

Je te souhaite donc bonne continuation et une bonne journée
0
red-69 Messages postés 15 Date d'inscription vendredi 2 mai 2008 Statut Membre Dernière intervention 8 mai 2008
5 mai 2008 à 12:14
OK merci aquarelle, j'attendrais donc gbinforme
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Pour être plus clair :
https://www.cjoint.com/?ffmPel0qiZ

voila un exemple de fichier.
à partir de la feuille 1, je souhaite obtenir les feuilles A, D, EF et B.
Je voudrais pouvoir cliquer sur le bouton de commande "trier par nom" pour obtenir les 4 feuilles.

Moi je sais le faire en citant systématiquement dans ma macro le nom recherché. Or je souhaite faire une macro où pour toute information apparaissant dans la colonne nom une nouvelle feuille soit créée.

Merci à tous
0
Le Pingou Messages postés 12227 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 6 janvier 2025 1 454
5 mai 2008 à 22:27
Bonsoir,
J'ai adapté le super modèle de gbinforme (au passage, merci de nous faire profiter de votre savoir)
par rapport à votre demande.
Entrer les données sur la feuille "EntrerData"
Le lien : https://www.cjoint.com/?ffwvdlfEIK
0
red-69 Messages postés 15 Date d'inscription vendredi 2 mai 2008 Statut Membre Dernière intervention 8 mai 2008 > Le Pingou Messages postés 12227 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 6 janvier 2025
5 mai 2008 à 23:02
Bonsoir à tous.

Je viens de tester la modification apportée par Jean-Pierre que je remercie au passage. Cela fonctionne très bien avec mon modèle.
Je voudrais savois si, à partir de cette macro, il serait possible de créer un bouton de commande me permettant de faire des mises à jour de toutes les feuilles. Je m'explique, si par exemple mon entité A a une quantité de 200 et que j'ai besoin de la passer à 250, la macro ne tient pas comte de cette modification sauf à créer une nouvelle ligne auquel cas je me retrouve dans la feuille "A" avec une ligne A d'une quantité de 200 et une ligne "A" d'une quantité de 250.

merci d'avance de votre aide
0
red-69 Messages postés 15 Date d'inscription vendredi 2 mai 2008 Statut Membre Dernière intervention 8 mai 2008
6 mai 2008 à 09:33
Merci à tous pour votre aide et vos différentes solutions. Tout cela m'a été très utile, j'avance petit à petit dans les macros.

Bonne journée à tous.
0
red-69 Messages postés 15 Date d'inscription vendredi 2 mai 2008 Statut Membre Dernière intervention 8 mai 2008
6 mai 2008 à 16:17
rebonjour à tous,

je souhaite apporter des modification à la macro de de gbinforme.

je voudrais trier les nouvelles feuilles par ordre croissant des dates en case H2
et j'aimerais une mise en page automatique .

J'ai donc rajouter les lignes suivantes :

Cells.Select 'tri par date croissante
Selection.Sort Key1:=Range("H2"), Order1:=xlAscending, Header:=xlYes, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal

Cells.Select ' ajustement lmise en forme
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
.WrapText = True
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = True
.ReadingOrder = xlContext
.MergeCells = False
End With

Cette formule fonctionne mais pas systématiquement, donc je suis un peu perdu. Mes tableuax initiaux sont similaire dans la forme mais le résultat la macro ne donne pas les me^mes résultats. Dans certains cas la mise en forme est faite dans les nouveaux onglets avec le tri par date en H2 ; dans d'autre cas rien de tout cela n'est effectué .

D'après vous, où se situe l'erreur ??
0
Le Pingou Messages postés 12227 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 6 janvier 2025 1 454
6 mai 2008 à 16:52
Bonjour,
Juste en passant, comment voulez-vous que l'on trouve le disfonctionnement de la moitié d'un code.
Il faut mettre toute la macro pour celà.
Merci
0
red-69 Messages postés 15 Date d'inscription vendredi 2 mai 2008 Statut Membre Dernière intervention 8 mai 2008
6 mai 2008 à 17:08
très bien Le Pingou. Désolé. Voici la macro entière :


Option Explicit
___________________________________________________________
Public Sub Tri_par_nom()
' en fonction de la valeur de la colonne A
' création d'une feuille avec nom colonne A
' autres colonnes documentant les cellules concernées
Dim W1 As Worksheet ' feuille base
Dim W2 As Worksheet ' feuille client
Dim lig As Long ' ligne traitée
Dim feu As Object ' feuille présente
Dim ong As Integer ' numèro feuille
Set W1 = Sheets("Feuil1") ' position feuille base
Application.ScreenUpdating = False
For Each feu In Sheets ' suppression feuilles
If feu.Name <> W1.Name Then
Application.DisplayAlerts = False
feu.Delete
Application.DisplayAlerts = True
End If
Next feu
' création des feuilles client
For lig = 10 To W1.Cells(65536, 7).End(xlUp).Row
For ong = 1 To Sheets.Count ' test existance feuille
If Sheets(ong).Name = UCase(W1.Cells(lig, 7).Text) Then
Set W2 = Sheets(ong)
Exit For
End If
Next ong
If ong > Sheets.Count Then
For ong = 2 To Sheets.Count ' tri feuille
If Sheets(ong).Name > UCase(W1.Cells(lig, 7).Text) Then Exit For
Next ong ' création feuille
Sheets.Add(After:=Sheets(ong - 1)).Name = UCase(W1.Cells(lig, 7).Text)
Set W2 = ActiveSheet
W1.Rows(8).Copy Destination:=W2.Rows(1) ' ajout titre

End If
W1.Rows(lig).Copy Destination:=W2.Rows(W2.Cells(65536, 7).End(xlUp).Row + 1) ' ajout ligne traitée

Cells.Select 'tri par date croissante
Selection.Sort Key1:=Range("H2"), Order1:=xlAscending, Header:=xlYes, _
OrderCustom:=1, MatchCase:=True, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal

Cells.Select ' ajustement lmise en forme
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
.WrapText = True
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = True
.ReadingOrder = xlContext
.MergeCells = False
End With


Next lig
W1.Activate
Application.ScreenUpdating = True
End Sub

Voila , encore merci
0
Le Pingou Messages postés 12227 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 6 janvier 2025 1 454
6 mai 2008 à 18:42
Bonjour red-69,
Il manque l'intruction suivante:
Sheets(W2.Name).Select
La placer juste avant la ligne : Cells.Select 'tri par date croissante
0
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 713
6 mai 2008 à 23:00
bonjour

Tout simplement : W2.Cells

  'tri par date croissante
W2.Cells.Sort Key1:=Range("H2"), Order1:=xlAscending, Header:=xlYes, _
OrderCustom:=1, MatchCase:=True, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal

 ' ajustement lmise en forme
With W2.Cells
   .HorizontalAlignment = xlCenter
   .VerticalAlignment = xlCenter
   .WrapText = True
   .Orientation = 0
   .AddIndent = False
   .IndentLevel = 0
   .ShrinkToFit = True
   .ReadingOrder = xlContext
   .MergeCells = False
End With


0
Le Pingou Messages postés 12227 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 6 janvier 2025 1 454
6 mai 2008 à 23:36
Bonjour gbinforme,
Juste pour comprendre: la notation W2.Cells.... à la place de Selection......
permet de se passer du Sheets(W2.Name).Select suivit du Cells.Select
Est-ce bien comme celà.!
0
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 713
7 mai 2008 à 00:19
bonjour Le Pingou,

à partir du moment où l'on a positionné la feuille avec
Set W2 = Sheets(ong) 
ou
Set W2 = ActiveSheet

le fait d'utiliser W2. identifie clairement la feuille concernée et la sélection (depuis excel 2000) n'a aucune utilité pour la plupart des actions.

Tu noteras que dans chaque macro événementielle ou non, je n'ai jamais sélectionné de données : il suffit qu'elles soit clairement identifiées.

Bien sûr si tu lances l'enregistreur de macro tu vas avoir systématiquement des "select" mais c'est seulement dû au fait que l'enregistreur enregistre les sélections effectuées.

On obtient donc par exemple
    Range("A1").Select
    Selection.Copy
    Range("I1").Select
    ActiveSheet.Paste

Ceci peut être remplacé sans aucun souci par:
Range("A1").Copy
Range("I1").Paste

ou sur une ligne

Range("A1").Copy Destination:=Range("I1")

ou en condensé

[A1].Copy Destination:=[I1]
0
red-69 Messages postés 15 Date d'inscription vendredi 2 mai 2008 Statut Membre Dernière intervention 8 mai 2008
7 mai 2008 à 12:16
merci à tous.

Cela fonctionne comme je le souhaitais.
0
Le Pingou Messages postés 12227 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 6 janvier 2025 1 454
7 mai 2008 à 13:48
Bonjour gbinforme,
Merci infiniment pour votre serviabilité et de vos explications qui me sont très profitables.
Excellente journée.
0