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 SubOption 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 SubLes 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 FunctionBoolé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 Functionet 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 FunctionBonjour,
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 :
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
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+