VBA_EXCEL 2003 somme nb colonne variable
Résolu
Tusp
-
Tusp -
Tusp -
Bonjour,
je débute en VBA, et pour mon stage je dois réaliser une macro.
Mon classeur est composé d'un nombre variable de feuilles identiques de recueil de données (nommées "recueil_" et un numéro) et possède une colonne bilan.
Le but de la macro est de récupérer les différentes colonnes bilan et de faire la somme de chaque ligne.
Je réussis à obtenir un résultat pour un nombre de feuille connu mais pas pour une nombre de feuille variable avec le code suivant (macro enregistrée)
j'arrive aussi à copier les colonnes bilan avec un nombre variable de feuille mais là impossible de trouver comment faire la somme.
Si vous avez des idées pour m'aider pour cette macro et à rendre mes codes plus propres...
merci
Tusp
je débute en VBA, et pour mon stage je dois réaliser une macro.
Mon classeur est composé d'un nombre variable de feuilles identiques de recueil de données (nommées "recueil_" et un numéro) et possède une colonne bilan.
Le but de la macro est de récupérer les différentes colonnes bilan et de faire la somme de chaque ligne.
Je réussis à obtenir un résultat pour un nombre de feuille connu mais pas pour une nombre de feuille variable avec le code suivant (macro enregistrée)
Public Sub Bilan() Sheets("recueil_bilan").Select 'je sélectionne la feuille bilan Range("C4").Select 'je choisis ma case ActiveCell.FormulaR1C1 = "0" 'je remplis avec 0 Selection.AutoFill Destination:=Range("C4:C11"), Type:=xlFillDefault Range("C4:C11").Select 'j'étire le contenu aux autres cellules Range("C14").Select ActiveCell.FormulaR1C1 = "0" Selection.AutoFill Destination:=Range("C14:C28"), Type:=xlFillDefault Range("C14:C28").Select Columns("C:C").Select 'je sélectionne une colonne Selection.Insert Shift:=xlToRight ' j'insère une colonne à gauche Sheets("recueil_1").Select ' je choisis ma feuille Range("H45:H69").Select 'je sélectionne mes cellules Selection.Copy 'je copie Sheets("recueil_bilan").Select 'je sélectionne ma feuille d'accueil Range("D4:D28").Select ' je sélectionne mes cellules d'accueil Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False 'je copie les valeurs Range("C4").Select Application.CutCopyMode = False ActiveCell.FormulaR1C1 = "0" Selection.AutoFill Destination:=Range("C4:C11"), Type:=xlFillDefault Range("C4:C11").Select Range("C14").Select ActiveCell.FormulaR1C1 = "0" Selection.AutoFill Destination:=Range("C14:C28"), Type:=xlFillDefault Range("C14:C28").Select Range("E4").Select ActiveCell.FormulaR1C1 = "=SUM(RC[-2]:RC[-1])" Selection.AutoFill Destination:=Range("E4:E11"), Type:=xlFillDefault Range("E4:E11").Select Range("E14").Select ActiveCell.FormulaR1C1 = "=SUM(RC[-2]:RC[-1])" Selection.AutoFill Destination:=Range("E14:E28"), Type:=xlFillDefault Range("E14:E28").Select Columns("C:C").Select Selection.Insert Shift:=xlToRight Range("C4").Select ActiveCell.FormulaR1C1 = "0" Selection.AutoFill Destination:=Range("C4:C11"), Type:=xlFillDefault Range("C4:C11").Select Range("C14").Select ActiveCell.FormulaR1C1 = "0" Selection.AutoFill Destination:=Range("C14:C28"), Type:=xlFillDefault Range("C14:C28").Select Sheets("recueil_2").Select Range("H45:H69").Select Selection.Copy Sheets("recueil_bilan").Select Range("D4:D28").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False End Sub
j'arrive aussi à copier les colonnes bilan avec un nombre variable de feuille mais là impossible de trouver comment faire la somme.
Sheets("recueil_bilan").Select n = Sheets.Count For I = 1 To n - 3 'j'ai 3 feuilles sans bilan Range("C14:C28").Select Columns("C:C").Select 'je sélectionne une colonne Selection.Insert Shift:=xlToRight ' j'insère une colonne à gauche Sheets("recueil_" & I).Select ' je choisis ma feuille Range("H45:H69").Select 'je sélectionne mes cellules Selection.Copy 'je copie Sheets("recueil_bilan").Select 'je sélectionne ma feuille d'accueil Range("D4:D28").Select ' je sélectionne mes cellules d'accueil Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False 'je copie les valeurs Range("C4").Select Application.CutCopyMode = False Next End Sub
Si vous avez des idées pour m'aider pour cette macro et à rendre mes codes plus propres...
merci
Tusp
A voir également:
- VBA_EXCEL 2003 somme nb colonne variable
- Formule somme excel colonne - Guide
- Déplacer colonne excel - Guide
- Trier colonne excel - Guide
- Colonne word - Guide
- Somme si couleur - Guide
16 réponses
bonjour
ton code me parait assez confus et on doit pouvoir le simplifier pas mal
te serait il possible d'envoyer une partie de ton classeur (sans données confidentielles) sur cjoint.com ou cijoint.fr avec quelques feuilles recueil_xx et un début de la feuille bilan avec ce que tu veux exactement et ou tu veux faire ces bilans (tu copies le lien obtenu dans ton prochain post)
bonne suite
ton code me parait assez confus et on doit pouvoir le simplifier pas mal
te serait il possible d'envoyer une partie de ton classeur (sans données confidentielles) sur cjoint.com ou cijoint.fr avec quelques feuilles recueil_xx et un début de la feuille bilan avec ce que tu veux exactement et ou tu veux faire ces bilans (tu copies le lien obtenu dans ton prochain post)
bonne suite
Hum... J'ai une question. TU mes dans les somme que la longueur des colonnes ne verira jamais... Mais si tu rajoute une valeur en bas, ta macro ne marche plus non?
Personnellement, j'aurais fait ca :
Il y a de forte chance que cela ne marche pas, mais je pense qu'il y a de l'idée pour réduire tout ton code. Inspire toi en
Dim ligne as integer Dim colonne as integer colonne = Cells(1 , column.Count).End(xltoleft).column For i = 1 to colonne ligne = Range(i).end(xlUp). Row Range("E" & i).Select ActiveCell.FormulaR1C1 = "=SUBTOTAL(5," & colonne & ":"& ligne & ")" Next
Il y a de forte chance que cela ne marche pas, mais je pense qu'il y a de l'idée pour réduire tout ton code. Inspire toi en
Bonjour,
j'ai mis un fichier "anonymisé" sur cijoint.fr: http://www.cijoint.fr/cjlink.php?file=cj201106/cijbnCWlNi.xls
pour ce qui est de la confusion de code c'est le moins que l'on puisse dire je ne connaissait même pas VBA (et à peine excel) avant ce stage :/ et la programmation ce n'est pas vraiment mon fort.
Dans le fichier la macro bilan fonctionne mais pas pour un nombre de feuille variable et la fonction TestBilan est un échec je n'arrive pas à écrire la fonction de somme :/
merci
j'ai mis un fichier "anonymisé" sur cijoint.fr: http://www.cijoint.fr/cjlink.php?file=cj201106/cijbnCWlNi.xls
pour ce qui est de la confusion de code c'est le moins que l'on puisse dire je ne connaissait même pas VBA (et à peine excel) avant ce stage :/ et la programmation ce n'est pas vraiment mon fort.
Dans le fichier la macro bilan fonctionne mais pas pour un nombre de feuille variable et la fonction TestBilan est un échec je n'arrive pas à écrire la fonction de somme :/
merci
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Sachant que tes feuilles ont tjrs le meme nom, etr que y'a juste un changement de numéro, rien de plus simple:
Puis:
pour parcourir toutes les feuilles
Dim feuille as integer feuille = Sheets.count 'compte le nombre de feuilles
Puis:
For i = 1 to feuille Sheets("recueuil_"& i).activate next
pour parcourir toutes les feuilles
J'ai vu que ton code etait fait par une macro enregistrée.
Les macro enregistrée sont bien pour découvrir certaines choses, le problèmes, c'est qu'elles compliqueront énormement ton code, qui pourrait se rendre 4 à 5 fois plus court avec des boucles ;)
Les macro enregistrée sont bien pour découvrir certaines choses, le problèmes, c'est qu'elles compliqueront énormement ton code, qui pourrait se rendre 4 à 5 fois plus court avec des boucles ;)
Au départ j'ai essayé de le faire manuellement et ça dépasse mes compétences donc j'ai essayé l'enregistrement de macro pour m'aider mais je n'y arrive toujours pas pour un nombre de feuille variable.
Effectivement je pense que ce que je fais pourrait-être beaucoup plus simple et propre mais avec mes maigres connaissances j'ai du mal
Effectivement je pense que ce que je fais pourrait-être beaucoup plus simple et propre mais avec mes maigres connaissances j'ai du mal
Le probleme, c'est que je pense que tu ne te plonge pas assez dans le VBA, et qu'une bonne dose de tuto te serait favorable =)
Pas qu'une bonne dose :), seulement mon stage étant court et très dense (ce n'est pas un stage d'informatique donc mon apprentissage VBA n'est pas la priorité de mes tuteurs...) j'ai beau essayé de m'améliorer en 1 mois c'est durdur.
Non non, rien de plus simple. VA deja sur le site du zero pour lire le tutuo une ou deux fois, ensuite, tu le laisse ouvert en fond, et voila :p. Tu fais qq recherches si besoin et zbim! t'as fini ;).
re
un début de réponse (le code est en module 4)
http://www.cijoint.fr/cjlink.php?file=cj201106/cijqAQ2jEG.xls
bonne suite
un début de réponse (le code est en module 4)
http://www.cijoint.fr/cjlink.php?file=cj201106/cijqAQ2jEG.xls
bonne suite
merci beaucoup ccm81,
je vais me plonger dans ce code afin de le comprendre (heureusement qu'il y a un module d'aide dans Microsoft visual basic)
je vais me plonger dans ce code afin de le comprendre (heureusement qu'il y a un module d'aide dans Microsoft visual basic)
re
j'ai essayé de commenter, mais il est possible que ça ne suffise pas
les noms en R (à la fin) se rapportent aux feuille recueil
les noms en B à la feuille bilan
si tu as besoin de plus d'explications, n'hésites pas
bonne suite
j'ai essayé de commenter, mais il est possible que ça ne suffise pas
les noms en R (à la fin) se rapportent aux feuille recueil
les noms en B à la feuille bilan
si tu as besoin de plus d'explications, n'hésites pas
bonne suite