Microsoft 365 Automatisation fichier de compte rendu

Blf57

XLDnaute Junior
Bonjour,

J’ai en projet pour ma société un fichier le plus automatique possible.

J’ai réalisé le fichier de base avec les formules mise en page etc. cependant niveau VBA j’ai du mal.

J’aurais toujours besoin de la page de garde mais suivant la prestation chez :

Client 1 = page de garde + feuille extincteurs + feuille RIA

Client 2=page de garde + feuille SSI T1+ feuille désenfumage mécanique + colonnes sèche …





Le projet est :

1-A l’ouverture du fichier je tombe sur la page de garde.

Quand je mets un X dans la case extincteurs j’ai accès à la page CR extincteur, si je retire la croix plus d’accès et ainsi de suite, j’ai créé une page par case de la page de garde.

(Les pages qui commence par 1-,2-,3-,4- sont pour le fonctionnement du fichier donc pas visible





2-avoir un bouton qui quand on appuie dessus :

-Enregistre dans la feuille onglet les informations nécessaires

-Enregistre mon fichier en format Excel dans un emplacement serveur (avec comme nom le n° de CR ainsi que le nom du client en ;cellule V5 de la page de garde).

-Enregistre mon fichier en PDF dans le même emplacement ( avec comme nom le n° de CR ainsi que le nom du client en ;cellule V5 de la page de garde)

*Le tout uniquement pour la page de garde et les feuille des cases sélectionner

-remet les informations à zéro vider les cases que j’ai remplis



Donc déjà pour commencer est-ce réalisable ?(sachant qu'il faudrait si possible éviter de modifier les feuilles, il y a des calcule, des MFC, etc)



Merci d’avoir pris le temps de me lire et désoler pour les éventuelles fautes d’orthographe c’est en cours de correction.

Le fichier est trop volumineux du coup https://1drv.ms/x/s!AvvviLvflpHogcgHoUZULCyvCK2svg?e=ADvP0h
 
Dernière édition:

vgendron

XLDnaute Barbatruc
Hello

1) ton fichier me semble beaucoup trop gros par rapport à ce qu'il contient...
le nombre de MFC me parait grand... peut etre y a t il possibilité de les rassembler...??

2) code à mettre dans le "Thisworkbook"
alt + F11 pour ouvrir l'éditeur vba
à gauche dans l'explorateur du projet
double cli sur "Thisworkbook"
la feuille d'édition de code apparait à droite: tu y colles le code suivant:

VB:
Private Sub Workbook_Open() 'à l'ouverture du classeur
 Dim Ws As Worksheet
    Application.ScreenUpdating = False 'on désactive le refresh pour éviter l'effet sapin de Noël
  
    Sheets("Page de garde").Visible = True 'on rend la page de garde visible
    Sheets("Page de garde").Activate 'on l'active
    For Each Ws In ActiveWorkbook.Sheets 'pour toutes les autres feuilles: on les masque
        Ws.Visible = Ws.Name = "Page de garde"
    Next Ws
    Application.ScreenUpdating = True 'on réactive le refresh
End Sub

Sub AfficherTout() 'macro pour afficher toutes les feuilles
Application.ScreenUpdating = False
For Each Ws In ActiveWorkbook.Sheets
    Ws.Visible = True
Next Ws
Application.ScreenUpdating = True
End Sub

3) Code à mettre dans la page de garde
==>Double clic sur "Page de garde" dans l'explorateur
idem, sa feuille de code apparait: tu y mets ce code
Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)

If Intersect(Target, Range("B29:C48")) Is Nothing And Intersect(Target, Range("V29:X48")) Is Nothing Then Exit Sub 'si tu cliques en dehors des deux plages contenant les "cases à cocher"=> on sort de la macro
Application.ScreenUpdating = False
Target.Cells(1, 1) = IIf(Target.Cells(1, 1) = "X", "", "X") 'on bascule entre X et rien

If Target.Column = 2 Then 'si on clique dans la colonne B
    off = 0
Else 'on a cliqué sur la colonne V
    off = 7
End If

Select Case Target.Row 'selon la ligne
    Case 29
        Num = 1
    Case 32
        Num = 2
    Case 35
        Num = 3
    Case 38
        Num = 4
    Case 41
        Num = 5
    Case 44
        Num = 6
    Case 47
        Num = 7
End Select

Num = off + Num

Sheets(Num + 1).Visible = Target.Cells(1, 1) = "X"
On Error Resume Next
Sheets(Num + 1).Activate 'on active la feuille correspondante ==> l'ordre des feuilles doit être absolument le même que celui des "cases à cocher"
Application.ScreenUpdating = True
End Sub
 

Blf57

XLDnaute Junior
Bonjour,

Merci pour votre aide et effectivement c'est parfaitement ca pour le 1er point .

Par contre a page photo n'est pas prise en compte et est-il possible de désélectionner la case quand je click dessus . car pour pouvoir retirer la page je suis obliger de clicker ailleurs avant de pouvoir reclicker sur la page.

Peut on faire la même chose mais sur une feuille?
par exemple sur la feuille SSI type 1 il y a plusieurs catégorie : ECS,UGA,CMSI,REPPORT et AES.
est il possible d'ajouter une case et de faire apparaitre les lignes en dessous jusqu'à la prochaine catégorie ?

Autre question:
peut on ajouter 2 case qui quand on appui dessus sur + par exemple copie une ligne et la colle en dessous ou sur - supprime la dernière ?

Encore merci pour le temps passer .:D

(Je vais regarder pour réduire les MFC)
 
Dernière édition:

vgendron

XLDnaute Barbatruc
Hello

Désolé, je pensais t'avoir envoyé la solution pour la dernière case "Photos"
il suffit d'ajouter un cas

VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)

If Intersect(Target, Range("B29:C48")) Is Nothing And Intersect(Target, Range("V29:X48")) Is Nothing And Intersect(Target, Range("K50:L51")) Is Nothing Then Exit Sub 'si tu cliques en dehors des deux plages contenant les "cases à cocher"=> on sort de la macro
Application.ScreenUpdating = False
Target.Cells(1, 1) = IIf(Target.Cells(1, 1) = "X", "", "X") 'on bascule entre X et rien
Range("A1").Select 'pour permettre de recliquer sur la croix sans avoir à cliquer ailleurs
If Target.Column = 2 Then 'si on clique dans la colonne B
    off = 0
Else 'on a cliqué sur la colonne V
    off = 7
End If

Select Case Target.Row 'selon la ligne
    Case 29
        Num = 1
    Case 32
        Num = 2
    Case 35
        Num = 3
    Case 38
        Num = 4
    Case 41
        Num = 5
    Case 44
        Num = 6
    Case 47
        Num = 7
    Case 50
        Num = 8
End Select

Num = off + Num

Sheets(Num + 1).Visible = Target.Cells(1, 1) = "X"
On Error Resume Next
Sheets(Num + 1).Activate 'on active la feuille correspondante ==> l'ordre des feuilles doit être absolument le même que celui des "cases à cocher"

Application.ScreenUpdating = True
End Sub

Pour la taille de ton fichier, en cause aussi, les nombreux rectangles que tu as tracés pour mettre des titres en rouge.. pourquoi ne pas simplement utiliser les cellules excel et la mise en forme..
et sans doute aussi la quantité de plages nommées dans le gestionnaire de nom. mais je ne peux pas vérifier puisque ton fichier est protégé
 

Blf57

XLDnaute Junior
Hello

Désolé, je pensais t'avoir envoyé la solution pour la dernière case "Photos"
il suffit d'ajouter un cas

VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)

If Intersect(Target, Range("B29:C48")) Is Nothing And Intersect(Target, Range("V29:X48")) Is Nothing And Intersect(Target, Range("K50:L51")) Is Nothing Then Exit Sub 'si tu cliques en dehors des deux plages contenant les "cases à cocher"=> on sort de la macro
Application.ScreenUpdating = False
Target.Cells(1, 1) = IIf(Target.Cells(1, 1) = "X", "", "X") 'on bascule entre X et rien
Range("A1").Select 'pour permettre de recliquer sur la croix sans avoir à cliquer ailleurs
If Target.Column = 2 Then 'si on clique dans la colonne B
    off = 0
Else 'on a cliqué sur la colonne V
    off = 7
End If

Select Case Target.Row 'selon la ligne
    Case 29
        Num = 1
    Case 32
        Num = 2
    Case 35
        Num = 3
    Case 38
        Num = 4
    Case 41
        Num = 5
    Case 44
        Num = 6
    Case 47
        Num = 7
    Case 50
        Num = 8
End Select

Num = off + Num

Sheets(Num + 1).Visible = Target.Cells(1, 1) = "X"
On Error Resume Next
Sheets(Num + 1).Activate 'on active la feuille correspondante ==> l'ordre des feuilles doit être absolument le même que celui des "cases à cocher"

Application.ScreenUpdating = True
End Sub

Pour la taille de ton fichier, en cause aussi, les nombreux rectangles que tu as tracés pour mettre des titres en rouge.. pourquoi ne pas simplement utiliser les cellules excel et la mise en forme..
et sans doute aussi la quantité de plages nommées dans le gestionnaire de nom. mais je ne peux pas vérifier puisque ton fichier est protégé
Bonjour,

Merci pour le retour.

Voici le fichier logiquement sans protection.

Merci pour la page manquante. vous auriez une solution pour quand on sélectionne une case on reste sur la page d'accueil ?
 

Pièces jointes

  • CR-2304-1065 test macro.xlsm
    861.6 KB · Affichages: 26

vgendron

XLDnaute Barbatruc
Bonsoir
pour ne pas basculer sur la feuille "cochée", il suffit de ne pas activer la page
ca se passe sur cette ligne de code: soit tu la supprimes, soit tu la commentes..
Sheets(Num + 1).Activate 'on active la feuille correspondante ==> l'ordre des feuilles doit être absolument le même que celui des "cases à cocher"
 

Blf57

XLDnaute Junior
Bonjour, je viens de me rendre compte d'un problème.

Quand je fais un compte rendu et que je l'enregistre RAS

Par contre quand je le réouvre les croix sont toujours la mais les pages ne sont plus visible.

Vous auriez une solution ?
 

vgendron

XLDnaute Barbatruc
bonjour

en cherchant un tout petit peu..
il suffit de décocher les croix à l'ouverture

VB:
Private Sub Workbook_Open() 'à l'ouverture du classeur
 Dim Ws As Worksheet
    Application.ScreenUpdating = False 'on désactive le refresh pour éviter l'effet sapin de Noël
 
    Sheets("Page de garde").Visible = True 'on rend la page de garde visible
    Sheets("Page de garde").Activate 'on l'active
    For Each Ws In ActiveWorkbook.Sheets 'pour toutes les autres feuilles: on les masque
        Ws.Visible = Ws.Name = "Page de garde"
    Next Ws
    'on décoche les croix
    With Sheets("Page de garde")
        .Range("B29") = ""
        .Range("B32") = ""
        .Range("B35") = ""
        .Range("B38") = ""
        .Range("B41") = ""
        .Range("B44") = ""
        .Range("B47") = ""
        
        .Range("V29") = ""
        .Range("V32") = ""
        .Range("V35") = ""
        .Range("V38") = ""
        .Range("V41") = ""
        .Range("V44") = ""
        .Range("V47") = ""
        .Range("V32") = ""
        
        .Range("K50") = ""
    End With
    Application.ScreenUpdating = True 'on réactive le refresh
End Sub
 

Blf57

XLDnaute Junior
Non justement les case ne sont plus cocher mais il faudrait qu'elle le reste et d'ailleurs c'est le cas sans soucis .
Par contre les page ne reste pas visible une fois le fichier fermer.

En gros j'ouvre et je coche Extincteurs que je rempli, j'enregistre et ferme le fichier.
Quand je le réouvre la page extincteurs n'est plus visible.
 

Statistiques des forums

Discussions
315 089
Messages
2 116 098
Membres
112 661
dernier inscrit
ceucri