Complémént de macro

  • Initiateur de la discussion Jean Marc
  • Date de début
J

Jean Marc

Guest
Bonsoir le forum,
je pense que certains vont se reconnaitre dans le code suivant
merci encore a eux
Pour certain ce code va paraitre un peu 'bidouille' j'ai adapté tant bien que mal avec ce que j'avais
si y'a moyen de simplifié ne pas hésiter !! :)

mé là je séche complétement
dans la partie qui suit les **** je souhaiterais avoir un message du genre msgbox ('cette feuille n'existe pas ! ') si la feuille n'est pas trouvée par For each
j'ai essayé de maintes façon mé sans résultat

je voue remercie par avance

JM

Sub Pagegarde()
Sheets('Pagegarde').Select
Range('h1').ClearContents

Dim saison As String
Dim WS As Object
Dim edition As String
Dim PlageBaseD1 As Range
Dim PlageBaseF1 As Range


saison = InputBox('Quelle saison voulez vous éditer ?', 'Edition page de garde + Impression')
If saison = '' Then Call Menu

************
For Each WS In Worksheets
If WS.Name = saison Then
Range('H1').Value = saison
edition = MsgBox('Lancer l'impression de la saison ?', vbYesNo + vbQuestion, 'IMPRESSION')
If edition = 7 Then Call Menu
Exit Sub

With Sheets(WS.Name)
Set PlageBaseD1 = .Range('C7:C' & .Range('C65536').End(xlUp).Row)
Set PlageBaseF1 = .Range('Y7:Y' & .Range('Y65536').End(xlUp).Row)
End With

With Sheets('Synt')
.Range('C13') = Application.WorksheetFunction.Sum(PlageBaseD1)
.Range('I13') = Application.WorksheetFunction.Sum(PlageBaseF1)
End With

Sheets('Synt').PrintOut
'Sheets(WS.Name).PrintOut
'Sheets('Pagegarde').PrintOut
Sheets('Menu').Select
Range('A1').Select
Exit Sub
End If
Next WS


End Sub
 

galopin01

XLDnaute Occasionnel
Bonsoir,
Comme ça entre 2 portes le principe qui s'adapte à l'existant :

Dim Y as Boolean
...
ensuite

For Each WS In Worksheets
If WS.Name = saison Then
Y = True
Range('H1').Value = saison
...
Next
If not Y Then MgBox 'la feuille n'existe pas !'

***************************
Autre possibilité :
il vaudrait mieux plutôt tester l'existance avant d'entrer dans la boucle For... en écrivant d'abord la fonction suivante :

Function isWs(S$) As Boolean
On Error Resume Next
isWs = Sheets(S).Index
End Function

Ensuite dans ta macro tu testes directement l'existance de la feuille avec :
If Not isWs(saison) Then
MsgBox 'la feuille n'existe pas !'
Else
Ton traitement.... et dans ce cas pas besoin de boucle For puisque tu es sùr que saison existe tu peux y aller à donf !

Ok?

Message édité par: galopin01, à: 11/04/2005 20:57

Message édité par: galopin01, à: 11/04/2005 21:17
 
J

Jean Marc

Guest
Bonsoir Galopin, re le forum

Je te remercie du code
pour etre franc j'ai pris le 1er car ai pas tout compris le 2ème surtout ou placé ces codes

Le pricipal étant que ça fonctionne comme je souhaitais

merci encore et bonne soirée

JM
 

galopin01

XLDnaute Occasionnel
bonsoir,
isWs est une fonction destinée à tester l'existence d'une feuille.
Tu peux la coller dans n'importe quel module (Module1,Module2...)
Ensuite tu peux l'appeler depuis n'importe quelle macro pour tester la présence d'une feuille...
Dans ton cas tu peux l'appeler directement à la place de la boucle
For each...
If...

Ainsi tu t'assures d'abord que la feuille existe si NON alors message et Exit ; si OUI alors pas besoin de boucle tu peux y aller tranquille...
Tu comprendras peut-être mieux si on fait le contraire :

If isWs(saison) Then
Ton traitement...
Else
message d'erreur
End If
 
J

Jean Marc

Guest
Re Galopin, le forum

Je m'arrache les cheveux !!!!
je m'en sortirai pas je crois
g essayé de suivre tes indics mais plantage

revoilà le code

Sub Pagegarde()
Sheets('Pagegarde').Select
Range('h1').ClearContents

Dim saison As String
Dim WS As Object
Dim edition As String
Dim PlageBaseD1 As Range
Dim PlageBaseF1 As Range
Function isWs() As Boolean


saison = InputBox('Quelle saison voulez vous éditer ?', 'Edition page de garde + Impression')
If saison = '' Then Menu

If isWs(saison) Then

Range('H1').Value = saison

edition = MsgBox('Lancer l'impression de la saison ?', vbYesNo + vbQuestion, 'IMPRESSION')
If edition = 7 Then Call Menu


With Sheets(WS.Name)
Set PlageBaseD1 = .Range('C7:C' & .Range('C65536').End(xlUp).Row)
Set PlageBaseF1 = .Range('Y7:Y' & .Range('Y65536').End(xlUp).Row)
End With

With Sheets('Synt')
.Range('C13') = Application.WorksheetFunction.Sum(PlageBaseD1)
.Range('I13') = Application.WorksheetFunction.Sum(PlageBaseF1)
End With

Sheets('Synt').PrintOut
'Sheets(WS.Name).PrintOut
'Sheets('Pagegarde').PrintOut
Sheets('Menu').Select
Range('A1').Select

End If


Else: MsgBox 'la feuille n'existe pas !'
Call Menu

End Sub

Je te serais reconnaissant d'y faire un peu de ménage sinon je vé faire 'poubelle ' !! :)

mille merci

JC
 
J

Jean Marc

Guest
re Galopin

j'ai suivi tes instruction mais plantage !!

erreur de compilation end sub attendu

avec Sub Pagegarde() surligné en jaune

et le Dim de Dim PlageBaseF1 As Range surligné en bleu

pour moi c de l'hébreu ( mais je progresse)

si tu solutionnes c ok sinon je reste sur ma 1ère version

merci encore

JM
 

galopin01

XLDnaute Occasionnel
Faudra d'abord supprimer le :

Function isWs() As Boolean dans tes déclarations. Ou diable as-tu été pêcher celà ?

Pour le reste tu reprends le final comme précédemment indiqué

Else
...
End If
End Sub
et ça doit pas faire un pli.

Rappel :
Function isWs(S$) As Boolean
On Error Resume Next
isWs = Sheets(S).Index
End Function
doit être collé quelque part ailleurs dans ton module (tout à la fin... ou dans un autre nouveau module) entre deux macros. Mais surtout pas à l'intérieur d'une Sub...
A+

Message édité par: galopin01, à: 11/04/2005 23:35
 
J

Jean Marc

Guest
Bonjour le forum, Galopin

Bon je crois que ce coup ci c bon

j'ai du me planter entre tes deux propos

là je crois que tout est ok

mille merci pour ta patience avec des 'néophytes' comme moi

très bonne journée

JM
 

Discussions similaires

Réponses
7
Affichages
355
Réponses
1
Affichages
194