Un objet avec une case à cocher importé d'1 autre classeur

Bonjour,

Ce bouton "PDF", comme tous les autres, provient d'un autre classeur (qui fonctionne d'ailleurs parfaitement) mais quand je clique dans ce nouveau classeur sur le bouton "PDF", l'objet "Saisie" n'est pas trouvé quand je fais le débogage.

Or l'objet est bien présent.

image

Autre chose. J'ai un peu changé la box "saisie" en renommant les épreuves. Il n'y en a plus 11 mais 8 ce coup-ci.

Mais je ne sais pas comment modifier le ou les modules associés à ce bouton pour que ça donne des sauvegardes en pdf dans le style suivant (voir capture ci-dessous), dans l'ordre décroissant de la colonne "CLT1"

Là il s'agissait de l'épreuve pompe (colonne "E_1") dans l'autre classeur ==>

image

L'ancienne box :

image

LA nouvelle :

image

Sur le bouton "Débloquer ou Quitter", tapez vodoraix pour tt débloquer.

Et mot de passe pour débloquer les feuilles ==> seb

MErci à vous

Bonne soirée

Bonjour,

quand je clique dans ce nouveau classeur sur le bouton "PDF", l'objet "Saisie" n'est pas trouvé quand je fais le débogage.

Bon, si vous déroulez la macro en pas à pas avec F8, vous vous apercevrez que l'erreur vient de la macro " Private Sub CheckboxUnique(N°)"

en effet vous avez oublié de remplacer 11 contrôles par 8 contrôles, comme ci-dessous (après correction):

Private Sub CheckboxUnique(N°)               'N° est le numéro du checkbox qu'on veut cocher !
     'macro commune pour les 11 macros suivantes pour éviter plusieurs "checkboxes cochés"
     For I = 1 To 8                        'boucler les 8 checkboxes
          With Me.Controls("CheckBox" & I)   'ce checkbox
               b = (I = N°)                  'drapeau c'est le checkbox voulu
               If b <> .Value Then .Value = b: DoEvents     'si statut du checkbox n'est pas le statut voulu, change-le
          End With
     Next
End Sub

Il faut penser aussi à modifier les propriétés de la dernière checkbox et remplacer son chiffre de 11 par 8

Le fichier corrigé:

Cdlt

Bonjour Arturo83 et merci beaucoup, une nouvelle fois

Ce que tu m'écris, je l'avais vu et en tentant plusieurs modifs, on arrivait à des bugs du style, toutes les colonnes à droite de "G" sont masquées.

Ca vient peut-être du fait que dans l'autre classeur, j'avais 2 colonnes de plus (en "I"= Poids et "J"=Taille)

Je vais continuer à explorer et à faire des essais car le code est compliqué à déchiffrer pour moi...

image

Et dans propriétés de l'objet, je n'ai pas trouvé le 11 à remplacer par le 8 :

image

En tout cas, merci beaucoup pour ta précieuse aide et tes explications, on avance, on avance

Bonne journée

Et dans propriétés de l'objet, je n'ai pas trouvé le 11 à remplacer par le 8 :

Clic droit sur la checkbox "TotGéné"

image

Désolé je rentre chez moi à peine...

Checkbox8, tu avais déjà fait, merci

Bonne soirée et merci à toi

J'ai trouvé une autre erreur avec la variable r2 sur la colonne "date_" qui n'existe plus sur ce classeur.

Et qui serait à remplacer par "Essai_" sur les 3 premières et la 5ème épreuve et "Pts_" sur la 4ème, 6ème et 7ème épreuves.

 For k = 8 To 1 Step -1            'boucler les checkboxes de 8 à 1
               If Me.Controls("CheckBox" & k).Value = True Then     'il est coché ?
                    Cnt = Cnt + 1            'compteur+1
                    If k <= 7 Then          'checkbox d'une épreuve
                         r1 = Application.IfError(Application.Match("E_" & k, .HeaderRowRange, 0), 0): If r1 = 0 Then MsgBox "problème avec épreuve " & k: Exit Sub     'listcolumn début de cette épreuve
                         r2 = Application.IfError(Application.Match("date_" & k, .HeaderRowRange, 0), 0):: If r2 = 0 Then MsgBox "problème avec date " & k: Exit Sub     'listcolumn fin de cette épreuve
                         r3 = Application.IfError(Application.Match("CLT" & k, .HeaderRowRange, 0), 0):: If r3 = 0 Then MsgBox "problème avec CLT" & k: Exit Sub     'listcolumn du classement de cette épreuve

MAis je ne sais pas comment réécrire ce code

Bonne soirée et merci de me lire

Bonjour,

Pas sûr d'avoir bien répondu, vu que je ne suis pas à l'origine du code, je n'ai pas testé car, pas compris le fonctionnement et le résultat attendu, mais voici quand même ma proposition:

La partie modifiée est entre les 2 lignes d'astérisques.

J'ai réorganisé quelque peu le code pour une meilleure lisibilité, en effet, à l'écriture en ligne des tests avec conditions du genre:

"IF ... THEN .... : ELSE ....."

je préfère l'écriture conventionnelle:

IF .......

...................................

Else

...................................

End If

Certes, ça prend plus de place, mais tout est bien séparé et est beaucoup plus clair à déchiffrer, surtout quand on ne maîtrise pas le VBA.

Si ma proposition ne répond pas exactement à vos attentes, je pense qu'avec ce nouvel affichage, vous serez plus en mesure de vous dépanner tout seul.

Private Sub Masquer()
    Dim k, r1, r2, b, r, r3, cle
    With Range("tabel1").ListObject         'votre tableau
        '.Range.AutoFilter                  'enlever les filtres
        .Range.EntireColumn.Hidden = False     'montrer toutes les colonnes du tableau
        '   .Range.Columns(1).BorderAround LineStyle:=xlContinuous, Weight:=xlThick, ColorIndex:=3

        MFC                                'mettre à jour toutes lesMFCs
        .Range.EntireColumn.Hidden = True  'cacher toutes les colonnes du tableau
        I = .ListColumns("E_1").Index      'numéro de la Listcolumn "E_1", donc première épreuve
        .Range.Resize(, I - 1).EntireColumn.Hidden = False     'montrer les listcolumns à partir de la 2eme jusqu'à la colonne avant "épreuve 1"
        .Range.Cells(1, .Range.Columns.Count).ColumnWidth = 0.1
        Cnt = 0
        For k = 8 To 1 Step -1            'boucler les checkboxes de 8 à 1
            If Me.Controls("CheckBox" & k).Value = True Then     'il est coché ?
                Cnt = Cnt + 1            'compteur+1
                If k <= 7 Then          'checkbox d'une épreuve
                    r1 = Application.IfError(Application.Match("E_" & k, .HeaderRowRange, 0), 0)
                    If r1 = 0 Then
                        MsgBox "problème avec épreuve " & k
                    Else
                        Exit Sub     'listcolumn début de cette épreuve
                    End If

                    '***********************************************************************************
                    If k <= 3 Or k = 5 Then
                        r2 = Application.IfError(Application.Match("Essai_" & k, .HeaderRowRange, 0), 0)
                        If r2 = 0 Then
                            MsgBox "problème avec Essai " & k
                        Else
                            Exit Sub     'listcolumn fin de cette épreuve
                        End If
                    ElseIf k = 4 Or k >= 6 Then
                        r2 = Application.IfError(Application.Match("Pts_" & k, .HeaderRowRange, 0), 0)
                        If r2 = 0 Then
                            MsgBox "problème avec Pts " & k
                        Else
                            Exit Sub     'listcolumn fin de cette épreuve
                        End If
                    End If
                    '***********************************************************************************

                    r3 = Application.IfError(Application.Match("CLT" & k, .HeaderRowRange, 0), 0)
                    If r3 = 0 Then
                        MsgBox "problème avec CLT" & k
                    Else
                        Exit Sub     'listcolumn du classement de cette épreuve                    Else                     'pour classement général
                    End If
                    r2 = .ListColumns.Count - 1     'listcolumn fin = avant-dernière listcolumn du tableau
                    r1 = r2 - 3         'listcolumn du début = 2 vers gauche
                    r3 = r2 - 1         'listcolumn classement est égal à r2-1
                End If

                .HeaderRowRange.Cells(1, r1).Resize(, r2 - r1 + 1).EntireColumn.Hidden = False     'montrer cette épreuve
                If k = 11 Then
                    Nom_Epreuve = "Classement"
                Else
                    Nom_Epreuve = .HeaderRowRange.Cells(0, r1).Value2     'nom de l'épreuve à utiliser dans le nom du PDF
                End If
                '  sp = Split(.HeaderRowRange.Cells(2, r1).FormulaR1C1, ",") 'formule utilisée pour créer le rang
                '    Cle =iif(sp(ubound(sp)) like "1)*",  xlDescending
                '       Case Else: Cle = xlAscending     'les autres ascending
                '  End Select

                If r3 > 0 Then           'listcolumn "classement" est connue
                    With .Range
                        .Sort .Cells(1, r3), xlAscending, Header:=xlYes     'trier colonne classement "ascendant" ou "descendant"
                    End With
                End If
                .Range.AutoFilter r1, "<>"     'cacher toutes les lignes avec une cellule vide dans la première colonne de cette épreuve
            End If
        Next
    End With
End Sub

Cdlt

Bonjour Arturo83.... Et merci beaucoup, vraiment, des explications détaillées, j'ai essayé de comprendre chaque ligne explicative dont cette partie ci-dessous.

J'ai juste corrigé ton k=11 en k=8

image

C'est exactement ça, pour limiter la fin de la plage de sélection

image

Le début de la plage est également bien visée puisqu'on a bien "E_1" pour r1

image

Et pourtant elle est masquée :

image

Il manque cette plage ==>

image

En tout cas des erreurs peuvent provenir de ces 3 lignes :

r2 = .ListColumns.Count - 1 'listcolumn fin = avant-dernière listcolumn du tableau
r1 = r2 - 3 'listcolumn du début = 2 vers gauche
r3 = r2 - 1 'listcolumn classement est égal à r2-1

r1 n'est pas toujours égale à r2 - 3 ==> pas pour épreuves 1, 2, 3 & 5 (c'est r2 - 4). Mais ça n'explique pas les colonnes masquées

Je continue d'essayer de comprendre...

En tout cas merci beaucoup pour tout le temps que tu m'as consacré !!!!

Bon w.e.

Et je n'arrive pas à comprendre comment sont nommés les fichiers pdf :

image

Le "Nom_Epreuve" est récupéré à partir d'un positionnement dans le tableau ?

Merci...

à+

Comme je ne suis pas à l'origine du code, je ne peux pas tout l'étudier et le décortiquer pour savoir comment il fonctionne, je ne peux que répondre à quelques questions que vous vous posez, pour plus de détails, il faut s'adresser directement à celui qui l'a développé, (ce serait plus simple)

Quant à la ligne suivante:

"Nom_Epreuve = .HeaderRowRange.Cells(0, r1).Value2 'nom de l'épreuve à utiliser dans le nom du PDF"

la variable "Nom_Epreuve correspond au titre de la colonne r1 qui est issue de la ligne un peu plus haut dans le code:

r1 = r2 - 3 'listcolumn du début = 2 vers gauche.

Encore merci beaucoup pour tout

Donc c'est bien l'entête du nom de l'épreuve de la colonne dans le tableau. Surement la zone qui est mal pointée...

Bon w.e.

Rechercher des sujets similaires à "objet case cocher importe classeur"