VBA procédure a finaliser

J

Jean

Guest
Bonjour à tous les gens du forum

Cent fois sur le métier recommencer votre ouvrage ...

Le problèmes sont fait pour être solutionnés ...

J'avais règlé mon problème (grâce aux gens du forum) mais voilà que je décide d'augmenter le niveau de diffuculté !!!

Situation: j'effectue le calcul de toutes les cellules B10 de toutes les feuilles du fichier sources.xls et reporte le total dans la feuille 1 du fichier cible.xls. Et ainsi de suite pour les différentes cellules jusqu'à B150.

Le résultat est transféré dans la feuille ("Feuil1") du fichier cible.xls
Le bouton qui lance la macro se trouve aussi dans la feuille 1 du fichier cible.xls.

Problème: je voudrais placer le bouton qui lance la macro sur la feuille ("Feuil2") du fichier cilbe.xls sans rien changer dans le reste.

Hypothèse de solution: j'ai changé dans le code les références à la feuille ("Feuil1") par ("Feuil2") mais j'ai un message d'erreur ?
Est-ce que quelqu'un à une solution.

Je vous remercie pour vos conseils

Procédure:
Private Sub CommandButton1_Click()
Dim WBSource As Workbook, WBCible As Workbook
Dim Feuille As Byte, i As Byte
Dim Somme As Double
Dim c As Byte
Set WBSource = Workbooks("source.xls")
Set WBCible = Workbooks("cible.xls")

' Code pour trouver la dernière colonne vide
Sheets("Feuil1").Range("S10").Select
ActiveCell.End(xlToLeft).Select
c = ActiveCell.Column

For i = 10 To 150
For Feuille = 1 To WBSource.Sheets.Count
Somme = Somme + WBSource.Sheets(Feuille).Cells(i, 2)
Next Feuille
WBCible.Sheets("Feuil1").Cells(i, c + 1) = Somme
Somme = 0
Next i
End Sub


Merci et bonne journée

Jean
 
F

Fabrice LEVASSEUR

Guest
Bonjour,

dans ton cas, tu peux déplacer le bouton dans n'importe quelle page sans modifier la macro car celle-ci fait bien référence à Feuil1
=> rechange Feuil2 en Feuil1 et reéssaie

Plus généralement, la position du bouton n'a pas d'importance si la macro commence par sélectionner la bonne feuille :
Sheets("Feuil1").Select

Fabrice Levasseur
 
J

Jean

Guest
Bonjour Fabrice

Je te remercie mais malheureusement cela ne fonctionne pas.

La procédure fonctionne à merveille quand le bouton est sur la feuille 1 et que les données sont copiées sur la feuille 1 mais dès que je place le bouton sur la feuille 2 et que je veux copiées les données sur la feuille 1 j'ai le message d'erreur suivant: la méthose Select de la classe Range a échoué

Je ne comprend pas pourquoi. Car effectivement, je devrais pouvoir placer le bouton sur n'importe quelle feuille de mon fichier cible.

As-tu une autre solution à me proposer ?

Moi je ne sais plus quoi faire.

Merci de ton aide.


Jean
 
M

Michel_M

Guest
Bonsoir Jean, fabrice

Ton bouton est un événement de la feuill1 et ne concerne que l'objet feuille 1 (PRIVATE sub...)

Donc si tu transporte le code en feuill2, tu as le droit au message d'erreur avec une ligne comme: Sheets("Feuil1").Range("S10").Select

Le mieux serait d'insérer un module de donner un nom de macro comme par exemple

sub actualiser()
...
end sub
et d'y copier l'intérieur de ta macro;

dans:
Private Sub CommandButton1_Click()
actualiser
end sub


A+
Michel
 
@

@+Thierry

Guest
Re-Bonjour Michel, Bonjour Jean, Fabrice, le Forum

Ce code avec des WBSource et WBCible, c'est signé par bibi çà !

En fait j'ai trouvé le Fil d'origine avec Jean Lien supprimé

Pour ce cas présent, il y a eu un peu massacre du code on dirait... Je propose ceci (qui comme le dit très bien Michel peut aller dans un Module Standard)

Sub WBSourceSumming()
Dim WBSource As Workbook, WBCible As Workbook
Dim WS1 As Worksheet
Dim Feuille As Byte, i As Byte
Dim Somme As Double
Dim C As Byte

Set WBSource = Workbooks("source.xls")
Set WBCible = Workbooks("cible.xls")

Set WS1 = WBCible.Sheets("Feuil1")

For Feuille = 1 To WBSource.Sheets.Count
For i = 10 To 150
Somme = Somme + WBSource.Sheets(Feuille).Cells(i, 2)
Next i
C = WS1.Range("S10").End(xlToLeft).Column
WS1.Cells(10, C + 1) = Somme
Somme = 0
Next Feuille
End Sub

Pour autant que j'ai compris quelque chose à ce que voulait faire Jean.

Par contre j'ai vu que Jean avait un dernier souci dans l'autre Fil alors je lui donne rendez-vous là bas Lien supprimé

Bonne Soirée
@+Thierry
 
J

Jean

Guest
Bonjour Thierry, Michel, Fabrice et tous les autres gens du forum

Je vous remercie tous pour votre aide.

Effectivement Thierry, il s'agit bien de ton code que j'ai adapté (il faut partir de ce que font les meilleurs si l'on veut apprendre et surtout essayer de comprendre).

J'ai adpaté un peu ton code car je n'obtenais pas tout a fait le résultat que je voulais.

voic donc le résultat final:
Sub WBSourceSumming()
Dim WBSource As Workbook
Dim WBCible As Workbook
Dim WS1 As Worksheet
Dim Feuille As Byte
Dim i As Byte
Dim Somme As Double
Dim C As Byte
Set WBSource = Workbooks("source.xls")
Set WBCible = Workbooks("cible.xls")
Set WS1 = WBCible.Sheets("Feuil1")

C = WS1.Range("S10").End(xlToLeft).Column
For i = 10 To 15
For Feuille = 1 To WBSource.Sheets.Count
Somme = Somme + WBSource.Sheets(Feuille).Cells(i, 2)
Next Feuille
WBCible.Sheets("Feuil1").Cells(i, C + 1) = Somme
Somme = 0
Next i

End Sub


Encore une fois merci et bravo a tous pour vos conseils qui me permettent de lentement mais surement comprendre un peu plus chaque jour.

En passant j'ai suivi le conseil de Michel et j'ai copié le code dans un module standard.


Merci et bonne journée

Jean
 

Discussions similaires