Bienvenue sur les forums conseil & création · S'enregistrer

Se connecter automatiquement

Forums » Tableurs et logiciels de gestion (Money, Excel, Open Office...) » Macro excel - Sous total de plusieurs feuilles · Envoyer le lien

Par lolo40, le 21 Jan 2006, 10:53 Revenir en haut de page Répondre en citant

bonjour,
je suis face un problème de macro excel.................. peut être pouvez vous m'aider. J'ai la macro suivante qui va me créer autant d'onglets que de codes présents ds la première colonne :

Code:
Sub FeuilleParClient()
Dim cell As Range
 
  Application.ScreenUpdating = False
  'en supposant que la feuille 'base de données' s'appelle Datas
  With Sheets("Datas")
  'extraction des valeurs uniques de la colonne des noms
  '(=noms des clients)
    .Range("AA1:AA2").ClearContents
    .Columns("A:A").AdvancedFilter _
        Action:=xlFilterCopy, _
        CriteriaRange:=.Range("AA1:AA2"), _
        CopyToRange:=.Columns("AB"), Unique:=True
       
  'traitement de chaque client (boucle sur la liste de la colonne AB)
  For Each cell In Range("AB2:AB" & Cells(2, "AB").End(xlDown).Row)
    'ajout d'une feuille au nom du client (+date)
    Sheets.Add.Name = cell.Value & " " & Format(Date, "dd-mm-yyyy")
    'zone critères sur feuille Datas
    .Range("AA1").Value = .Range("A1").Value
    .Range("AA2").Value = cell.Value
    'tri sur la base de données ( 10 colonnes, à adapter)
    .Columns("A:J").AdvancedFilter _
        Action:=xlFilterCopy, _
        CriteriaRange:=.Range("AA1:AA2"), _
        CopyToRange:=ActiveSheet.Columns("A:J"), Unique:=False
  Next
  'nettoyage de la feuille Datas
  .Columns("AA:AB").Clear
  .Activate
  End With
End Sub


mais je souhaiterais une certaine mse en forme auto ds chaques onglet :
client1 2.30.............
client1 3.30.........
client2 6.40.........
client3 5.5............
je vousdrais entre chaque client le total de la colonne 2 :
client 1.....2.30
client 1.....3.30
total 5.30
cliant 2 6.40
total 6.40
cliant 3 5.5
totalt 5.5

et ce pour tous les onglets
si tu peux m'aider bien a toi merci
@+
Par Cédric, le 22 Jan 2006, 16:40 Revenir en haut de page Répondre en citant

Citation:
client 1.....2.30
client 1.....3.30
total 5.30

oups Rolling Eyes ... Laughing

Salut,

Si j'ai bien compris, la colonne A est une ref. client (1, 2, 3...) et la colonne B un "prix" ? Donc en admettant que tu as :

Code:
A        B
1       2,30
2       6,40
1       3,30
3       5,50

Tu veux que la colonne 1 soit triée, puis que chaque client soit converti en feuille (onglet). Ta fonction copie les données de ce client dans l'onglet et ton problème, c'est que tu veux avoir le total de la colonne 2 dans chaque onglet... donc si j'ai bien compris, il faudrait ajouter ces lignes juste avant Next (à la fin de la boucle) :

Code:
ActiveSheet.Range("B1").End(xlDown).Offset(1, -1).FormulaR1C1 = "Total :"
ActiveSheet.Range("B1").End(xlDown).Offset(1, 0).FormulaR1C1 = "=SUM(R2C2:R[-1]C)"


  • ActiveSheet.Range("B1").End(xlDown).Offset(1, 0) : sélectionne la première cellule vide de la colonne B.

  • FormulaR1C1 = "=SUM(R1C2:R[-1]C) : la formule de cette cellule doit être la somme (SUM) des cellules R2C2 (correspond à B2) : (à) R[-1]C (correspond à Bxx est la ligne du dernier enregistrement, d'où l'utilisation du mode R1C1).


Par contre, pourquoi utiliser des onglets ? Ca risque d'être illisible si tu as beaucoup de clients... surtout que tu les onglets vont se multiplier au fil des jours ???
Par lolo40, le 23 Jan 2006, 20:45 Revenir en haut de page Répondre en citant

cedric,
je ne suis pas encore familier du site.......... j'ai posté une reponse ce midi mais je ne la vois pas apparaitre ..............
tes deux lignes sont sympas et me donne le total par onglet des chaque onglet.......... mais dans un meme onglet un un client peut avoir plusieurs produits donc je voudrais si cela est possible avoir un sous total par produit ds chaque onglet ; pour etre plus clair voila un petit exemple :
Code:
colonne A           colonne B
Produit 1              1,56 €
produit 1              2,85 €
total produit 1        4,41 €
produit2               3 €
produit2               6 €
produit2               1 €
total produit 2       10 €

............etc

voila j'espere que tu comprendras
@+ et merci
Par Cédric, le 24 Jan 2006, 00:29 Revenir en haut de page Répondre en citant

Citation:
je ne suis pas encore familier du site.......... j'ai posté une reponse ce midi mais je ne la vois pas apparaitre ..............

Tu veux sans doute parler du message privé que tu m'as envoyé ?! Les messages privés n'apparaissent pas sur le forum (c'est juste de membre à membre). Pour répondre à un message, il suffit de cliquer sur Répondre, comme tu viens de le faire Wink

Citation:
tes deux lignes sont sympas et me donne le total par onglet des chaque onglet..........

C'est bien le total par clients que tu voulais au départ, non ?

Citation:
mais dans un meme onglet un un client peut avoir plusieurs produits donc je voudrais si cela est possible avoir un sous total par produit ds chaque onglet

Dans ce cas, le plus simple est d'utiliser la fonction "Sous total" d'Excel (Subtotal sous VBA). Ajoutes ces lignes avant Next (à la place des lignes je t'ai données plus haut).

Code:
ActiveSheet.Range("A1").CurrentRegion.Sort Key1:=ActiveSheet.Range("C1"), _
    Order1:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase:=False, _
    Orientation:=xlTopToBottom, DataOption1:=xlSortNormal
ActiveSheet.Range("C1").Subtotal GroupBy:=3, Function:=xlSum, _
    TotalList:=Array(2), Replace:=True, PageBreaks:=False, _
    SummaryBelowData:=True
Selection.Clear


  • ActiveSheet.Range("A1").CurrentRegion.Sort sert à trier les données par produit. Il faut donc que tu modifie la clé (Key1) en fonction de la colonne des produits (ici en colonne C).

  • ActiveSheet.Range("C1").Subtotal active la fonction "Sous total". Ici, la fonction crée un sous total de la colonne 2 (prix) TotalList:=Array(2) à chaque changement de la colonne 3 (produit) GroupBy:=3.

    A toi de modifier en fonction de ton tableau.
Par Invité, le 24 Jan 2006, 13:13 Revenir en haut de page Répondre en citant

bonjour cedric,
merci pour ta reponse
j'ai copié donc comme tu me l'as indiqué le les lignes
d'écriture que tu m'a adressé...............je lance la macro
et j'ai un message d'erreur " 400 ".
qu'en pense tu je reste a ta disposition.

@+ bye
Par Cédric, le 24 Jan 2006, 14:19 Revenir en haut de page Répondre en citant

Salut,

C'est certainement dû à l'organisation de tes données... il faudrait que je vois en fonction de ton tableau, ça serait plus simple !

Est-ce que tu as déjà utilisé des données personnelles dans ton tableau ? Sinon, envoie m'en une copie par mail et je verrai directement ce qui ne va pas. => cedric AT conseil-creation.com

Forums » Tableurs et logiciels de gestion (Money, Excel, Open Office...) » Macro excel - Sous total de plusieurs feuilles · Envoyer le lien