Action sur bouton

totor2027

XLDnaute Nouveau
Bonjour le forum,


j'ai un problème pour lancer un script depuis un bouton ...

Je m'explique : sur la feuille 3 d'un classeur, j'ai mis un bouton qui doit lancer un script placé sur la feuille 4.

Pour info il ait impossible de déplacer ce script sur une autre feuille ou dans un module (c’est certainement possible mais pas évident).

Si quelqu'un à une soluce je suis preneur.

merci beaucoup

guillaume
 

Robert

XLDnaute Barbatruc
Repose en paix
Bonjour Guillaume, bonjour le forum,

Pas sûr d'avoir bien compris ton problème... Mais pourquoi ne copies-tu pas le script de la Feuil4 et tu le colles dans la Feuil3... ou mieux dans un module comme ça tu pourras y acceder de n'importe où avec Call.
 

Robert

XLDnaute Barbatruc
Repose en paix
Bonjour le fil, bonjour le forum,

Alors je te propose un truc d'enfer... Fait un petit effort, evoie-nous quelquechose. Le fichier zippé, le code de ta macro, la photo de ta belle-mère, le collier anti-puce de ton chien... Mais aide-nous un peu toi aussi!!!!
 
G

guillaume

Guest
ok voila le code problématique.

je présise qu'il fonctionne très bien depuis un appel fait de la feuille 4

Sub Voir_Stat()



'************ sup ligne ********************
For lin = Worksheets('CALCUL').UsedRange.Rows.Count + Worksheets('CALCUL').UsedRange.Row To 6 Step -1
'MsgBox lin
If Cells(lin, 1) = '' Then Rows(lin).Delete Shift:=xlUp
Application.ScreenUpdating = False
Next lin
'*******************************************

'**********duplique la mise en forme et formule de la derniere ligne************

'*********** compte NB ligne chrono **************
For Compte = Worksheets('CHRONO').UsedRange.Rows.Count + Worksheets('CHRONO').UsedRange.Row To 7 Step -1
'*************************************************
test2 = Worksheets('CALCUL').UsedRange.Rows.Count
Cells(test2, 2).Select
'MsgBox Compte
ActiveCell.Range('A2').EntireRow.Insert

Range(Cells(test2, 1), Cells(test2, 6)).Copy _
Range(Cells(test2 + 1, 1), Cells(test2 + 1, 6)) 'copie les cellules A à F
Application.ScreenUpdating = False

Next Compte

test3 = test2 + 1
'************** écrase les formules *************
Worksheets('CALCUL').Range('A6:F' & test3).Value = Worksheets('CALCUL').Range('A6:F' & test3).Value
'***********
Cells.Range('A6:F' & test3).Select


'****************** vire les cellules vides *****************
For toto = Worksheets('CALCUL').UsedRange.Rows.Count + Worksheets('CALCUL').UsedRange.Row To 6 Step -1
If Cells(toto, 2) = '' Then Cells(toto, 2).Delete Shift:=xlUp
If Cells(toto, 3) = '' Then Cells(toto, 3).Delete Shift:=xlUp
If Cells(toto, 4) = '' Then Cells(toto, 4).Delete Shift:=xlUp
If Cells(toto, 5) = '' Then Cells(toto, 5).Delete Shift:=xlUp
If Cells(toto, 6) = '' Then Cells(toto, 6).Delete Shift:=xlUp

Application.ScreenUpdating = False
Next toto

Cells(test2, 2).Select

'******************* cacule les moyennes ************
'MsgBox test3
Range('B2').Value = Application.WorksheetFunction.Average(Range('B6:B' & test3))
Range('C2').Value = Application.WorksheetFunction.Average(Range('C6:C' & test3))
Range('D2').Value = Application.WorksheetFunction.Average(Range('D6:D' & test3))
Range('E2').Value = Application.WorksheetFunction.Average(Range('E6:E' & test3))
Range('F2').Value = Application.WorksheetFunction.Average(Range('F6:F' & test3))


End Sub
 
G

guillaume

Guest
pour info c'est la derniere partie du code qui pose problème pour le cacule de la moyenne


Range('B2').Value = Application.WorksheetFunction.Average(Range('B6:B' & test3))

notament pour le WorksheetFunction, je n'arrive pas a passer un truc du genre ....Worksheets('CALCUL').Function....

si tu as une idée :)
 
G

guillaume

Guest
Pour compléter

il y a aussi une petouille avant dans l'instruction

Cells.Range('A6:F' & test3).Select

qui fait réference à ActiveSheet enfin je pence quqnd je lance le script depuis la feuille 3, ca écrase les lignes de cette feuille et non de la 4.

bref je pence qu'il est plus simple de pouvoir activer le code depuis une autre feuille, enfin si c'est possible.

a +

guillaume
 

Robert

XLDnaute Barbatruc
Repose en paix
Bonjour Guillaume, bonjour le forum,

Bon, on est bien d'accord... la macro agit sur l'onglet CALCUL (même si elle utilise une donnée de l'onglet CHRONO). Donc normalement, que tu la lances de n'importe qu'elle feuille que n'agira QUE sur l'onglet CALCUL.

Il faudrait que tu me dises les noms des feuille 3 et 4 mais je penses que tu n'identifies pas l'onglet. Si tu la lances d'un onglet différent il faudrait peut-être à un moment donné dire : Sheets('CALCUL').Activate.
 
G

guillaume

Guest
Robert écrit:
Bonjour Guillaume, bonjour le forum,

Bon, on est bien d'accord... la macro agit sur l'onglet CALCUL (même si elle utilise une donnée de l'onglet CHRONO). Donc normalement, que tu la lances de n'importe qu'elle feuille que n'agira QUE sur l'onglet CALCUL.

Il faudrait que tu me dises les noms des feuille 3 et 4 mais je penses que tu n'identifies pas l'onglet. Si tu la lances d'un onglet différent il faudrait peut-être à un moment donné dire : Sheets('CALCUL').Activate.

Bon j'ai trouver une solution grace à toi mais elle me satisfait moyen mais ça marche :p

sur ma feuille 3 je lance :
Sub Actu_stat_Click()
Sheets('CALCUL').Activate 'feuille 4

Sheets('STAT').Activate 'feuille 3
End Sub

et je met le code de la feuille 4 dans une fonction
Private Sub Worksheet_Activate() ...

Comme ça mon bouton sur la feuille 3 active la feuille 4 qui lance automatiquement le code, puis revient à la feuille 3.


le seul PB c'est que pendant le calcul on voix la feuille 4, c'est pas tiptop mais ça marche (j'aurai bien voulu à terme masquer complétement cette onglet).

donc, merci Robert B)
 

Discussions similaires

Statistiques des forums

Discussions
312 472
Messages
2 088 713
Membres
103 932
dernier inscrit
clotilde26