Ouvrir un classeur sous condition [Résolu]

Messages postés
166
Date d'inscription
dimanche 22 janvier 2012
Statut
Membre
Dernière intervention
30 juillet 2015
- - Dernière réponse : cco86260
Messages postés
166
Date d'inscription
dimanche 22 janvier 2012
Statut
Membre
Dernière intervention
30 juillet 2015
- 29 sept. 2014 à 13:47
Bonjour le forum,

Donc je reviens pour une question, j'ai un classeur (sources) se nommant RapHebdo, de ce classeur, existe la possibilité de faire un "Bilan", seul problème, si l'utilisateur clique sur "Faire le bilan" alors qu'il n'existe aucun rapport, je vous laisse deviner la suite :-), ça bug...

Je vous poste le code qui génère le rapport :

Sub bilan(control As IRibbonControl)

'Ici je déclare mes variables
Dim wk1 As Workbook
Dim wk2 As Workbook
Dim sh As Worksheet
Dim Nom_Feuille As String
Dim total As String
Dim hzc As String
Dim trpen As String
Dim nuit As String
Dim rep As String
Dim ClasseurPath As String
Dim sem As String
Dim section As String
Dim l As Integer

rep = Environ("USERPROFILE") & ""
ClasseurPath = rep & "\Documents\POINTAGES\bilanHebdo.xlsm"


Set wk1 = ThisWorkbook
l = 2
'ouverture du classeur
Set wk2 = Workbooks.Open(ClasseurPath)
For Each sh In wk1.Worksheets
If sh.Name <> "MATRICE" And sh.Name <> "VIERGE" Then
'ton code
Nom_Feuille = sh.Name
'Copie des noms des feuilles dans une colonne
wk2.Sheets(1).Cells(l, 1).Value = Nom_Feuille
'Copie de la semaine dans une colonne
sem = sh.Range("AZ8").Value
wk2.Sheets(1).Cells(l, 2).Value = sem
'Copie de la section dans une colonne
section = sh.Range("Z11").Value
wk2.Sheets(1).Cells(l, 3).Value = section
'copie des nombres totales d'heure de chantiers
total = sh.Range("CW18").Value
wk2.Sheets(1).Cells(l, 4).Value = total
'copie des nombres totales d'heures en ZC
hzc = sh.Range("CW21").Value
wk2.Sheets(1).Cells(l, 5).Value = hzc
'copie des nombres totales de travaux pénibles
trpen = sh.Range("CW23").Value
wk2.Sheets(1).Cells(l, 6).Value = trpen
'copie des nombres totales d'heure de nuits
nuit = sh.Range("CW25").Value
wk2.Sheets(1).Cells(l, 7).Value = nuit
l = l + 1
Else

sh.Visible = xlSheetHidden ' ou xlSheetVeryHidden
End If
Next

'Fermeture du second classeur
'wk2.Close

End Sub

Merci à tous pour votre aide

bonne journée,

Christian

--
Afficher la suite 

6 réponses

Messages postés
166
Date d'inscription
dimanche 22 janvier 2012
Statut
Membre
Dernière intervention
30 juillet 2015
2
0
Merci
J'oubliais, la ligne pointée pour l'erreur est celle-ci :

sh.Visible = xlSheetHidden  ' ou xlSheetVeryHidden
End If

Merci
Commenter la réponse de cco86260
Messages postés
6139
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
23 juillet 2019
82
0
Merci
Bonjour,

Pour la question:

seul problème, si l'utilisateur clique sur "Faire le bilan" alors qu'il n'existe aucun rapport, je vous laisse deviner la suite :-), ça bug...


C'est simple mettre:

If  ClasseurPath = "" Then Exit Sub

Commenter la réponse de cs_Le Pivert
Messages postés
25987
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
22 juillet 2019
313
0
Merci
Bonjour,

+1 pour la réponse de pivert.


Par contre :

si l'utilisateur clique sur "Faire le bilan" alors qu'il n'existe aucun rapport, je vous laisse deviner la suite :-), ça bug...
Ca bug... certe... mais tu as un message d'erreur.... et il serait bien de nous le donner !

J'oubliais, la ligne pointée pour l'erreur est celle-ci :
sh.Visible = xlSheetHidden

..Ce qui ne semble pas être en rapport avec la réponse de Pivert....

Ces feuilles sont déjà masquées non ? voir même sont en xlSheetVeryHidden si ça se trouve....
il faudrait commencer par, le temps de tests du moins, ajouter quelques debug.print sur certaines variables afin de comprendre d'où vient exactement le souci....

Et puis... avant de la masquer.. s'assurer qu'elle est visible :
  if sh.Visible = True Then...


    Else
       debug.print "Nom de la feuille : " & sh.Name        
       debug.print "Visibilité de la feuille : " & sh.Visible 
        if sh.Visible = True then   sh.Visible = xlSheetHidden  ' ou xlSheetVeryHidden
    End If


Et bien sûr.. tester ton code en mode pas à pas serait un plus pour comprendre d'où vient le souci....



Commenter la réponse de jordane45
Messages postés
6139
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
23 juillet 2019
82
0
Merci
J'ai répondu un peu vite, si le fichier n'existe pas, mais qu'il y a un chemin il faut faire ceci:

Option Explicit
Dim ClasseurPath As String
Dim verifier As Boolean
Private Sub CommandButton1_Click()
  ClasseurPath = rep & "\Documents\POINTAGES\bilanHebdo.xlsm"
 verifier = ExisteFichier(ClasseurPath)
If verifier = False Then Exit Sub
Workbooks.Open (ClasseurPath)
End Sub
Public Function ExisteFichier(S As String) As Boolean
 Dim fichier As Object
     Set fichier = CreateObject("Scripting.FileSystemObject")
     ExisteFichier = fichier.FileExists(S)
 End Function

Commenter la réponse de cs_Le Pivert
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
211
0
Merci
Bonjour,
ce qui, au bout du compte, semble être ceci :
 Private Sub CommandButton2_Click()
For Each sh In wk1.Worksheets
Select Case sh.Name
Case "MATRICE", "VIERGE"
sh.Visible = True
Case Else
sh.Visible = False
End Select
Next
End Sub

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviend
Commenter la réponse de ucfoutu
Messages postés
166
Date d'inscription
dimanche 22 janvier 2012
Statut
Membre
Dernière intervention
30 juillet 2015
2
0
Merci
Bonjour tout le monde,

J'ai du oublier quelques précision: (comme d'hab)

Donc le fichier bilanHebdo est existant, et se trouve dans le dossier "mes documents" (comme RapHebdo)

RapHebdo et bilanHebdo sont 2 fichiers bien distint

En fait, le but est que si il n'y a pas de rapport fait, alors si l'intervenant clique sur faire le bilan, un message dise "veuillez faire au moins un rapport"...

Désolé pour mon manque de détailles.... encore...lol

MAis déjà, je pense qu'avec ce que vous m'avez fourni je devrais pouvoir me dépatouiller...

Encore merci

--
Commenter la réponse de cco86260