Problème résolue: checkbox qui prennent valeurs 0 ou 1

Bonjour,

C'est toujours difficile avec une tranche de saucisson de code de déterminer ce qui cloche.

ça va toujours nettement mieux avec l'ensemble du code qui va avec (donc un extrait du fichier)

PS : Avec Option Explicit et des déclarations de variables ça va encore mieux

C'est quoi :

For i = 0 to DimAstreinte ?

A+

Voici les codes :

Private ListFiche() As String 'déclaration variable de l'onglet liste fiche
Private PermR2(11, 54) As Variant 'dimenssionement du tableau du  Permanence R2 dans l'onglet synthèse
Private ListAstreinte() As Variant ' initialisation tableau de l'onglet Astreinte
Private DimAstreinte As Integer ' initialisation tableau de l'onglet Astreinte
Private IndexHorsPerm As Integer
Private ImpTotal(11, 54) As Variant

' Fonction qui permet de selection les fiches pertinente de l'onglet "listefiche"

Function FichePertinente(Num) As Boolean
    FichePertinente = False
    For i = 0 To 20
        If Num = ListFiche(i) Then FichePertinente = True
    Next i
End Function

Function TestStructure(Struc) As Integer
    TestStructure = 0
    Select Case Struc
    Case "RIRI/RES/DOR/OCR/SN1/Accès"
        TestStructure = 1
    Case "RIRI/RES/DOR/OCR/SN1/Transport"
        TestStructure = 2
    Case "RIRI/RES/DOR/OCR/SN1/Coeur"
        TestStructure = 3
    Case "RIRI/RES/DOR/OCR/SN1/PFs"
        TestStructure = 4
    Case "RIRI/RES/DOR/OSD/PDC", "RIRI/RES/DOR/OSD/SDC"
        TestStructure = 9
    Case "RIRI/RES/DOR/OSD/PCI", "RIRI/RES/DOR/OSD/SIP", "RIRI/RES/DOR/OSD/PMI"
        TestStructure = 10
    End Select

    StrucShort = Left(Struc, 16)
    Select Case StrucShort
    Case "RIRI/RES/DOR/OPR"
        TestStructure = 5
    Case "RIRI/RES/DOR/OPT"
        TestStructure = 6
    Case "RIRI/RES/DOR/OPC"
        TestStructure = 7
    Case "RIRI/RES/DOR/SPS"
        TestStructure = 8
    End Select

End Function

Function ValeurAstreinte(Login, Semaine) As Boolean

    ValeurAstreinte = 0

        For i = 0 To DimAstreinte

         If Login = ListAstreinte(i, 0) Then ValeurAstreinte = ListAstreinte(i, Semaine)

    Next i

End Function

Sub HorsPermR2(Structure, Login, Nom, Prénom, Semaine, NbHeure, Fiche)

    Cells(IndexHorsPerm, 1) = Structure
    Cells(IndexHorsPerm, 2) = Login
    Cells(IndexHorsPerm, 3) = Nom
    Cells(IndexHorsPerm, 4) = Prénom
    Cells(IndexHorsPerm, 5) = Semaine
    Cells(IndexHorsPerm, 6) = NbHeure
    Cells(IndexHorsPerm, 7) = Fiche

    IndexHorsPerm = IndexHorsPerm + 1

    Worksheets("HorsPermR2").Activate

    Sheets("HorsPermR2").Range("A1:G1") = Array("Struture", "Login", "Nom", "Prénom", "Semaine", "Nb Heure", "Fiche")

End Sub
Sub EditSynthèse()

    Worksheets("Synthèse").Activate
    Worksheets("Synthèse").Cells.Clear
    i = 0
    J = 0
    For i = 0 To 10
        For J = 0 To 53
            Cells(i + 1, J + 1) = PermR2(i, J)

        Next J
    Next i

    For i = 0 To 10
        For J = 0 To 53
            Cells(i + 15, J + 1) = ImpTotal(i, J)

        Next J
    Next i

End Sub

Sub ChargesIncidents()

 Worksheets("HorsPermR2").Activate
  Worksheets("HorsPermR2").Cells.Clear
IndexHorsPerm = 2

'Initialise le tableau de Permanence

    J = 1
    For J = 1 To 53
        PermR2(0, J) = "S" & J
        For i = 1 To 11
            PermR2(i, J) = 0
        Next i
    Next J
    PermR2(0, 0) = "Permanence R2"
    PermR2(1, 0) = "SN1 Accès"
    PermR2(2, 0) = "SN1 Transport"
    PermR2(3, 0) = "SN1 Coeur"
    PermR2(4, 0) = "SN1 PFS"
    PermR2(5, 0) = "SN2 OPR"
    PermR2(6, 0) = "SN2 OPT"
    PermR2(7, 0) = "SN2 OPC"
    PermR2(8, 0) = "SN2 SPS"
    PermR2(9, 0) = "SN2 OSD - Coeur Data"
    PermR2(10, 0) = "SN2 OSD - Coeur IP"

    J = 1
    For J = 1 To 53
        ImpTotal(0, J) = "S" & J
        For i = 1 To 11
            ImpTotal(i, J) = 0
        Next i
    Next J

    ImpTotal(0, 0) = "Imputation Totale à chaud"
    ImpTotal(1, 0) = "SN1 Accès"
    ImpTotal(2, 0) = "SN1 Transport"
    ImpTotal(3, 0) = "SN1 Coeur"
    ImpTotal(4, 0) = "SN1 PFS"
    ImpTotal(5, 0) = "SN2 OPR"
    ImpTotal(6, 0) = "SN2 OPT"
    ImpTotal(7, 0) = "SN2 OPC"
    ImpTotal(8, 0) = "SN2 SPS"
    ImpTotal(9, 0) = "SN2 OSD - Coeur Data"
    ImpTotal(10, 0) = "SN2 OSD - Coeur IP"

'Initilise la liste des fiches pertinentes

    Worksheets("ListeFiche").Activate
    i = 2
    While Cells(i, 1).Value <> ""
        i = i + 1
    Wend
    ReDim ListFiche(i - 2)

    i = 0
    While Cells(i + 2, 1).Value <> ""
        ListFiche(i) = Cells(i + 2, 1).Value
        i = i + 1
    Wend

'Initilise le tableau des personnes en astreinte

    Worksheets("Astreinte").Activate
    i = 2
    While Cells(i, 1).Value <> ""
        i = i + 1
    Wend
    ReDim ListAstreinte(i - 2, 57)
    DimAstreinte = i - 2

    i = 0
    J = 0
    While Cells(i + 2, 1).Value <> ""
        For J = 0 To 56
            ListAstreinte(i, J) = Cells(i + 2, J + 4).Value
        Next J
        i = i + 1
    Wend

'Boucle principale

    Worksheets("Export").Activate
    i = 2

    Affiche = 0
    While Cells(i, 1).Value <> ""
        NumFiche = Range("T" & i).Value
        Struc_Util = Range("I" & i).Value
        Nom = Range("K" & i).Value
        NbHeure = Range("P" & i).Value
        Semaine = Range("G" & i).Value
        Login = Range("J" & i).Value
        Prénom = Range("L" & i).Value

        If FichePertinente(NumFiche) Then
            Numligne = TestStructure(Struc_Util)
            Select Case Numligne
            Case 1, 2, 3, 4
                PermR2(Numligne, Semaine) = PermR2(Numligne, Semaine) + NbHeure
                ImpTotal(Numligne, Semaine) = ImpTotal(Numligne, Semaine) + NbHeure
            Case 5, 6, 7, 8, 9, 10
                ImpTotal(Numligne, Semaine) = ImpTotal(Numligne, Semaine) + NbHeure

                R2 = ValeurAstreinte(Login, Semaine)
                If R2 = 1 Then
                    PermR2(Numligne, Semaine) = PermR2(Numligne, Semaine) + NbHeure
                    Else
                        If NbHeure > 8 Then

                            Ajustifier = "Oui"
                            Else
                            Ajustifier = "Non"

                        End If
                        Worksheets("HorsPermR2").Activate
                        Call HorsPermR2(Struc_Util, Login, Nom, Prénom, Semaine, NbHeure, NumFiche)
                        Worksheets("Export").Activate

                End If
            End Select
        End If
        i = i + 1

    Wend
    EditSynthèse

End Sub
Option Explicit
Private Sub Worksheet_BeforeDoubleClick(ByVal target As Range, Cancel As Boolean)

        Dim ok As Boolean

    If Intersect(target, [E2:BD1000]) Is Nothing Then Exit Sub
    If target <> "" Then
        If Asc(target) = 253 Or target = 1 Then ok = True
    End If
    If ok Then
        target = Chr(254)
        target.Font.ColorIndex = 4
    Else
        target = Chr(253)
        target.Font.ColorIndex = 3
    End If
    Cancel = True

End Sub

    Sub initPlage()
        With Selection.Font
            .Name = "Wingdings"
            .Size = 11
        End With
        Selection = Chr(253)
        Selection.Font.ColorIndex = 3
    End Sub

Les fichier sont trop lourds. Avant d’exécuter le deuxième code, les résultats attendu était affiché et juste.

Bonjour,

Essaie :

Function ValeurAstreinte(Login, Semaine)
x = 0
    For i = 0 To DimAstreinte
         If Login = ListAstreinte(i, 0) Then x = ListAstreinte(i, Semaine)
    Next i
ValeurAstreinte = x
End Function

Booléen ou pas. Je ne peux pas deviner je serais tenté de l'enlever.

A+

avec mon fichier ca serait plus simple. Mais l'export contient 30000 ligne et si je les supprime, on voit pas les résultats dans le tableaux

Le fichier fait environt 3mo.

Mais je vois pas de différence entre le code que tu me propose

Function ValeurAstreinte(Login, Semaine)
    x = 0
        For i = 0 To DimAstreinte
             If Login = ListAstreinte(i, 0) Then x = ListAstreinte(i, Semaine)
        Next i

    ValeurAstreinte = x

    End Function

et le code d'origine

Function ValeurAstreinte(Login, Semaine)

  ValeurAstreinte=0

        For i = 0 To DimAstreinte
             If Login = ListAstreinte(i, 0) Then x = ListAstreinte(i, Semaine)

          Next i

    End Function

Bonjour,

Tu ne vois pas de différence ET tu as essayé

ou...

Tu ne vois pas de différence MAIS tu n'as pas essayé ?

Dans le premier cas Uploader ton fichier ici :

http://cjoint.com/index.php

et fournir le lien (éventuellement en MP) pour le récupérer.

A+

[url]h

pendant que vous ecriviez, j'étais entrain de vous répondre.

J'ai bien essayé votre code mais ca n'a pas marché mais j'ai essayé de comprendre c'est pour celà que je voyais pas la différence.

Bonsoir,

Désolé j'ai passé l'après midi sur ton code, mais pour moi c'est imbuvable.

Je jette l'éponge et je passe le gant à qui arrivera à te suivre...

La grosse colère étant passée j'ai quand même continué un peu et débogué le bouzin pour me rendre compte que ta fonction "TestStructure" n'examine pas tous les cas de figure :

RIRI/RES/DOR/OCR/GDI par exemple devrait renvoyer quelque chose puisque la fiche 2882 existe...

(Cellule I2 de Export)

Donc le débogueur s'arrête bien avant d'aller sur ValeurAstreinte...

A+

Bonjour,

ta question de départ était :

Quelqu'un peut me dire comment je peux remplacer toutes mes valeurs 1 ou 0 par des checkbox.

Reste là-dessus stp et si c'est résolu merci de le cocher sur le post l'ayant résolu.

Pour le reste tu balances un code imbuvable avec plein d'erreurs dispersées qui fait que ça plante avant même d'arriver au problème que tu signales.

Je te l'ai déjà dit dans un autre post : un code se débogue au fur et à mesure. Tant qu'une erreur n'est pas levée on cherche, on ne continue pas à en semer partout ailleurs.

Faute de cette rigueur tu vas bientôt (si ce n'est pas déjà fait) te retrouver dans la situation où c'est plus simple de tout jeter et de reprendre à zéro.

Et si tu ne trouves pas, tu crées un fichier réduit au nécessaire et avec les explications pour nous permettre de reproduire le problème.

En balançant des bouts de codes sortis de leur contexte et sans fichier adapté que veux-tu que l'on trouve ?

Personnellement il n'y a qu'à cette condition que je regarde...

eric

bonjour Eriic,

Hum... je t'accorde que ce code est quasiment incompréhensible... Cependant si on décide de remplacer les checkbox par des "þ" ou des "ý", il faut bien en tirer les conséquences.

Or cette fonction étant en quelques sorte "l'interpréteur des checkbox", il convient de la modifier pour en exploiter le résultat.

On peut donc penser que la question est très corrélative du sujet...

J'en déduit que ça devrait donner :

Function ValeurAstreinte(Login, Semaine) As Boolean
For i = 0 To DimAstreinte
   If Login = ListAstreinte(i, 0) Then x = IIf(ListAstreinte(i, Semaine) = "þ", True, False)
Next i
ValeurAstreinte = x
End Function

étant entendu qu'ensuite dans le code d'appel, il faut modifier également :

     R2 = ValeurAstreinte(Login, Semaine)
     If R2 = True Then '(ou false)
     ...

Ceci clôt donc normalement complètement le sujet.

A+

Salut galopin,

Entièrement d'accord.

A la place de 1 compter le caractère le remplaçant. Mais j'ai l'impression que son problème va bien au-delà de ça

eric

Merci beaucoup pour votre aide.

Le problème est résolu . Si on à réussi à surmonter ce problème, on peut surmonter la crise

En faite si je comprends bien, vue que pour la suite de mon code, j’avais besoin de booléen et qu’on à remplacé les checkbox par des caractères par des "þ" ou des "ý", il fallait indiquer/déclarer que ces valeurs était égales à vrai ou Faux.

C’est pour cela que le code bloquait à « ListeAstreinte (i, semaine) = "ý" ».

Sinon, dans vos messages précédents, j’ai bien compris que vous aviez du mal à comprendre le code. Mais à quoi c’est dû ?

Les commentaires, l’architecture du code qui est surement pas conventionnel, ou il y’a surement plus adapté ?

Je souhaite juste améliorer ce premier code, car je dois aussi apporter quelques modifications d’ordre pratique à apporter et que ça sera surement plus facile pour les intervenants de s’y retrouver.

Dans tous les cas, merci Messieurs.

Bonsoir,

Voir en MP

A+

Rechercher des sujets similaires à "probleme resolue checkbox qui prennent valeurs"