Aide sur condition si + where a=x
Bonjour,
j'ai un gros probleme avec un script que je cherche a faire
je souhaite que quand je clique sur le bouton act1 (plus tard j'ajouterai les autres boutons) que le script cherche la personne qui a le compteur le plus bas mais avec la qualification act1
ensuite un popup s'ouvre et la 3 choix:
1 ok => j'incremente le compteur // ça j'y arrive
2 refus => j'incremente le compteur de refus, c'est bon, mais je ne sais pas lancer une recherche sur le suivant jusqu'au bon
3 impossible, je n'incremente pas le compteur c'est bon mais je n'arrive pas a passer au suivant jusqu'au bon
j'ai essayer de bidouiller en passant par des tableau ... et j'ai essayé des If and mais je n'arrive pas
quelque chose cloche, et je tourne en rond depuis des jours
Merci
ps: j'ai cherché dans le forum, mais je n'ai pas trouvé une aide qui ressemble a mon probleme
Bonjour,
Une piste. Utiliser un tableau à deux dimensions, dans la 1 le nom et prénom et dans la 2 la valeur du compteur. Boucler sur la plage "Act1" à la recherche des "Oui" (attention, tu as des espaces parasites) puis chercher ensuite la valeur minimale. Mini est défini par défaut à une valeur assez haute mais si tu connais la valeur maxi possible tu peux l'affecter à la variable au lieu des "100" :
Sub Act1()
Dim Tbl()
Dim Plage As Range
Dim Cel As Range
Dim I As Long
Dim J As Long
Dim Mini As Long
'défini la plage sur la colonne Act1
With Worksheets("Jour")
Set Plage = .Range(.Cells(3, 3), .Cells(.Rows.Count, 3).End(xlUp))
End With
'parcour la plage à la recherche des "Oui" (attention, il y a des espaces parasites...!)
'd'où la raison de Trim, à corriger !
For Each Cel In Plage
If Trim(Cel.Value) = "Oui" Then
'redimensionne le tableau
I = I + 1
ReDim Preserve Tbl(1 To 2, 1 To I)
'nom et prénom
Tbl(1, I) = Cel.Offset(, -2).Value & " " & Cel.Offset(, -1).Value
'compteur
Tbl(2, I) = Cel.Offset(, 4).Value
End If
Next Cel
'défini au hasard une valeur assez grande pour Mini
Mini = 100
'recherche la valeur la plus basse en mémorisant dans J la position
For I = 1 To UBound(Tbl, 2)
If Tbl(2, I) < Mini Then
Mini = Tbl(2, I)
J = I
End If
Next I
'résultat
MsgBox "C'est '" & Tbl(1, J) & "' qui a le compteur le plus bas : " & Tbl(2, J)
End SubHervé.
Merci Hervé pour ce tas de code, je me rend compte que je suis super nul en vba :s
Je vais tout decortiquer apprendre les nouvelles fonction utilisées tout en essayant d'avancer dans mon projet
je posterai ma macro si je bloque de nouveau quelque part
A tres bientot
Rebonjour,
me revoila deja, avec deux petites questions, car j'y arrive pas moi meme
1 - j'ai bien compris qu'on fait un tableau dynamique avec les oui, par contre je ne sais pas comment augmenter la valeur de la cellule compteur de +1 correspondant au nom et prenom de l'act1
2- j'ai tenté de faire une boucle que si le premier nom et prenom ne peut pas faire ce jour, que la boucle cherche celui qui est egale ou juste au dessus et me demande oui ou non, et que cette boucle soit active tant que je dis non
j'espere avoir été clair, je n'ai pas la meme logique que les programmeurs, j'ai du mal a m'imaginer comment faire des que je fait des tests j'ai toujours des erreurs ....
sinon ton aide m'a été précieuse
Merci pour votre aide
Voici a quoi ressemble ma boucle, elle est simpliste, je sais pas faire mieux
K = 1
While Tbl(3, K) < Tbl(3, J)
K = K + 1
Wend
MsgBox Tbl(1, K)
le probleme c'est que ça me donne prochaine valeur plus grande, alors qu'il y a des valeurs entre les deux
exemple dans mon cas
le compteur 90 ne peux pas, je veux passer au compteur suivant, au lieu de prendre celui qui correspond a 100, il prend celui qui correspond a 120 car
Tbl(1, 1) = 90
Tbl(1, 2) = 120
Tbl(1, 3) = 100
Comment faire ?
Merci
voila le fichier, je bloque sur les cases 1 et le 3 (sachant que le 1 et le 2 sont le meme probleme)
Merci
Bonjour,
J'ai modifié le code en ajoutant une procédure de tri afin d'avoir les valeurs compteur en ordre croissant, il te suffit d'incrémenter J pour avoir le prochain. Si ils doivent être, le cas échéant, tous passés en revu, regarde du coté d'une boucle Do Loop (pour le cas 3) :
Sub Act1()
Dim Tbl()
Dim Plage As Range
Dim Cel As Range
Dim I As Long
Dim J As Long
Dim K As Long
Dim L As Long
'défini la plage sur la colonne Act1
With Worksheets("Jour")
Set Plage = .Range(.Cells(3, 3), .Cells(.Rows.Count, 3).End(xlUp))
End With
'parcour la plage à la recherche des "Oui" (attention, il y a des espaces parasites...!)
'd'où la raison de Trim, à corriger !
For Each Cel In Plage
If Trim(Cel.Value) = "Oui" Then
'redimensionne le tableau
I = I + 1
ReDim Preserve Tbl(1 To 4, 1 To I)
' nom
Tbl(1, I) = Cel.Offset(, -2).Value
' prenom
Tbl(2, I) = Cel.Offset(, -1).Value
'compteur
Tbl(3, I) = Cel.Offset(, 4).Value
'stocke l'adresse de la cellule
Tbl(4, I) = Cel.Offset(, 4).Address
End If
Next Cel
'effectue un tri croissant du tableau
Tri Tbl()
'pour afficher la première valeur
J = 1
'La variable reçoit la valeur entrée dans l'InputBox
resultat = InputBox("Le prochain sur la liste: " & _
Chr(10) & Chr(10) & Chr(10) & Chr(10) & Chr(9) & _
Tbl(1, J) & Tbl(2, J) & Chr(10) & Chr(10) & _
"1 : OK" & Chr(10) & _
"2 : Refus" & Chr(10) & _
"3 : Impossible (on passe au suivant)", "Liste d'intershift")
Select Case resultat
Case 1
'a accepté
MsgBox "Compteur incrémenté, et action logué", vbOKOnly + vbInformation, " Il a accepté !"
'######### Comment incrementer le compteur de +1 ?
Range(Tbl(4, J)).Value = Range(Tbl(4, J)).Value + 1
Case 2
'Le technicien refusé le remplacement
MsgBox "Compteur de refus + compteur incrémentés, et action logué", vbOKOnly + vbInformation, " Re cliquez sur le bouton VIP"
MsgBox "Re-cliquez sur le bouton VIP", vbOKOnly + vbInformation, ""
'######### Augmenter le compteur de refus + le compteur de remplacement pour le penaliser.
'######### Comment incrementer le compteur de +1 ?
'compteur de remplacement
Range(Tbl(4, J)).Value = Range(Tbl(4, J)).Value + 1
'compteur de refus
Range(Tbl(4, J)).Offset(, 1).Value = Range(Tbl(4, J)).Offset(, 1).Value + 1
Case 3
' Le planning ne permet pas ce remplacement
' MsgBox "Le prochain est : ", vbOKOnly + vbInformation, " le suivant ..."
' MsgBox Tbl(3, J) '90
'######### Comment fair en sorte que le prochain soit le nom7 et non pas le le nom1 ( je veux le compteur le plus bas) et qu'il y ai une boulce que tant que la repone est un refus ou une impossibilité, que ça donne toujours la compteur juste apres
' merci de votre aide
'passe au suivant
J = J + 1
MsgBox Tbl(1, J)
'ici copier coller
Case Is <> "", 1, 2, 3 ' si la réponse est differente des choix
MsgBox "Je n'ai pas compris le choix, Veuillez recommencer !", vbOKOnly + vbExclamation, "Erreur !"
Case Else
End Select
End Sub
Sub Tri(Tbl())
Dim Tempo1, Tempo2, Tempo3, Tempo4
Dim I As Integer
Dim J As Integer
'tri décroissant "<"
'tri croissant ">"
For I = 1 To UBound(Tbl, 2) - 1
For J = I + 1 To UBound(Tbl, 2)
If Tbl(3, I) > Tbl(3, J) Then
Tempo1 = Tbl(1, J)
Tempo2 = Tbl(2, J)
Tempo3 = Tbl(3, J)
Tempo4 = Tbl(4, J)
Tbl(1, J) = Tbl(1, I)
Tbl(2, J) = Tbl(2, I)
Tbl(3, J) = Tbl(3, I)
Tbl(4, J) = Tbl(4, I)
Tbl(1, I) = Tempo1
Tbl(2, I) = Tempo2
Tbl(3, I) = Tempo3
Tbl(4, I) = Tempo4
End If
Next J
Next I
End SubHervé.
Re,
Je viens d'intégrer une boucle Do Loop pour prendre en compte un choix différent de la liste que tu propose (1, 2 et 3). Je te re-poste le tout :
Sub Act1()
Dim Tbl()
Dim Plage As Range
Dim Cel As Range
Dim I As Long
Dim J As Long
Dim K As Long
Dim L As Long
'défini la plage sur la colonne Act1
With Worksheets("Jour")
Set Plage = .Range(.Cells(3, 3), .Cells(.Rows.Count, 3).End(xlUp))
End With
'parcour la plage à la recherche des "Oui" (attention, il y a des espaces parasites...!)
'd'où la raison de Trim, à corriger !
For Each Cel In Plage
If Trim(Cel.Value) = "Oui" Then
'redimensionne le tableau
I = I + 1
ReDim Preserve Tbl(1 To 4, 1 To I)
' nom
Tbl(1, I) = Cel.Offset(, -2).Value
' prenom
Tbl(2, I) = Cel.Offset(, -1).Value
'compteur
Tbl(3, I) = Cel.Offset(, 4).Value
'stocke l'adresse de la cellule
Tbl(4, I) = Cel.Offset(, 4).Address
End If
Next Cel
'effectue un tri croissant du tableau
Tri Tbl()
'pour afficher la première valeur
J = 1
'reprise ici si choix non prévu dans la liste
Reprise:
'boucle
Do
'La variable reçoit la valeur entrée dans l'InputBox
resultat = InputBox("Le prochain sur la liste: " & _
Chr(10) & Chr(10) & Chr(10) & Chr(10) & Chr(9) & _
Tbl(1, J) & Tbl(2, J) & Chr(10) & Chr(10) & _
"1 : OK" & Chr(10) & _
"2 : Refus" & Chr(10) & _
"3 : Impossible (on passe au suivant)", "Liste d'intershift")
Select Case resultat
Case 1
'a accepté
MsgBox "Compteur incrémenté, et action logué", vbOKOnly + vbInformation, " Il a accepté !"
'######### Comment incrementer le compteur de +1 ?
Range(Tbl(4, J)).Value = Range(Tbl(4, J)).Value + 1
Case 2
'Le technicien refusé le remplacement
MsgBox "Compteur de refus + compteur incrémentés, et action logué", vbOKOnly + vbInformation, " Re cliquez sur le bouton VIP"
MsgBox "Re-cliquez sur le bouton VIP", vbOKOnly + vbInformation, ""
'######### Augmenter le compteur de refus + le compteur de remplacement pour le penaliser.
'######### Comment incrementer le compteur de +1 ?
'compteur de remplacement
Range(Tbl(4, J)).Value = Range(Tbl(4, J)).Value + 1
'compteur de refus
Range(Tbl(4, J)).Offset(, 1).Value = Range(Tbl(4, J)).Offset(, 1).Value + 1
Case 3
' Le planning ne permet pas ce remplacement
' MsgBox "Le prochain est : ", vbOKOnly + vbInformation, " le suivant ..."
' MsgBox Tbl(3, J) '90
'######### Comment fair en sorte que le prochain soit le nom7 et non pas le le nom1 ( je veux le compteur le plus bas) et qu'il y ai une boulce que tant que la repone est un refus ou une impossibilité, que ça donne toujours la compteur juste apres
' merci de votre aide
'passe au suivant
J = J + 1
MsgBox Tbl(1, J)
'ici copier coller
Case Is <> "", 1, 2, 3 ' si la réponse est differente des choix
MsgBox "Je n'ai pas compris le choix, Veuillez recommencer !", vbOKOnly + vbExclamation, "Erreur !"
'recommence jusqu'à la bonne réponse
GoTo Reprise
Case Else
'...
End Select
Loop Until resultat <> 3 Or J = UBound(Tbl, 2)
End Sub
Sub Tri(Tbl())
Dim Tempo1, Tempo2, Tempo3, Tempo4
Dim I As Integer
Dim J As Integer
'tri décroissant "<"
'tri croissant ">"
For I = 1 To UBound(Tbl, 2) - 1
For J = I + 1 To UBound(Tbl, 2)
If Tbl(3, I) > Tbl(3, J) Then
Tempo1 = Tbl(1, J)
Tempo2 = Tbl(2, J)
Tempo3 = Tbl(3, J)
Tempo4 = Tbl(4, J)
Tbl(1, J) = Tbl(1, I)
Tbl(2, J) = Tbl(2, I)
Tbl(3, J) = Tbl(3, I)
Tbl(4, J) = Tbl(4, I)
Tbl(1, I) = Tempo1
Tbl(2, I) = Tempo2
Tbl(3, I) = Tempo3
Tbl(4, I) = Tempo4
End If
Next J
Next I
End SubHervé.
Salut Hervé,
ça marche du tonnerre
je vais l'adapter et essayer de l'ameliorer, je suis desolé de ne pas avoir poster le fichier du premier coup
Merci merci et encore Merci
bonjour,
j'ai voulu changer la maniere de repondre au choix 1,2,3 par une form sur lequel j'ai mis trois bouton, mais je ne vois pas comment faire en sorte que le clique sur le bouton acceptation ça corresponde au case 1, ...
merci
Bonjour,
Il te suffit de passer le résultat en argument à la proc. Je te poste le tout :
Private Sub btnok_Click()
'1 est passé en argument
Act1 1
End Sub
Private Sub btnnok_Click()
'2 est passé en argument
Act1 2
End Sub
Private Sub btnnext_Click()
'3 est passé en argument
Act1 3
End Sub
Private Sub btnquitter_Click()
Unload Me
End Sub
Sub Act1(Resultat As Integer) 'Resultat est demandé en argument
Dim Tbl()
Dim Plage As Range
Dim Cel As Range
Dim I As Long
Dim J As Long
Dim K As Long
Dim L As Long
'défini la plage sur la colonne Act1
With Worksheets("Jour")
Set Plage = .Range(.Cells(3, 3), .Cells(.Rows.Count, 3).End(xlUp))
End With
'parcour la plage à la recherche des "Oui" (attention, il y a des espaces parasites...!)
'd'où la raison de Trim, à corriger !
For Each Cel In Plage
If Trim(Cel.Value) = "Oui" Then
'redimensionne le tableau
I = I + 1
ReDim Preserve Tbl(1 To 4, 1 To I)
' nom
Tbl(1, I) = Cel.Offset(, -2).Value
' prenom
Tbl(2, I) = Cel.Offset(, -1).Value
'compteur
Tbl(3, I) = Cel.Offset(, 4).Value
'stocke l'adresse de la cellule
Tbl(4, I) = Cel.Offset(, 4).Address
End If
Next Cel
'effectue un tri croissant du tableau
Tri Tbl()
'pour afficher la première valeur
J = 1
'reprise ici si choix non prévu dans la liste
Reprise:
'boucle
Do
Select Case Resultat
Case 1
'a accepté
MsgBox "Compteur incrémenté, et action logué", vbOKOnly + vbInformation, " Il a accepté !"
'######### Comment incrementer le compteur de +1 ?
Range(Tbl(4, J)).Value = Range(Tbl(4, J)).Value + 1
Case 2
'Le technicien refusé le remplacement
MsgBox "Compteur de refus + compteur incrémentés, et action logué", vbOKOnly + vbInformation, " Re cliquez sur le bouton VIP"
MsgBox "Re-cliquez sur le bouton VIP", vbOKOnly + vbInformation, ""
'######### Augmenter le compteur de refus + le compteur de remplacement pour le penaliser.
'######### Comment incrementer le compteur de +1 ?
'compteur de remplacement
Range(Tbl(4, J)).Value = Range(Tbl(4, J)).Value + 1
'compteur de refus
Range(Tbl(4, J)).Offset(, 1).Value = Range(Tbl(4, J)).Offset(, 1).Value + 1
Case 3
' Le planning ne permet pas ce remplacement
' MsgBox "Le prochain est : ", vbOKOnly + vbInformation, " le suivant ..."
' MsgBox Tbl(3, J) '90
'######### Comment fair en sorte que le prochain soit le nom7 et non pas le le nom1 ( je veux le compteur le plus bas) et qu'il y ai une boulce que tant que la repone est un refus ou une impossibilité, que ça donne toujours la compteur juste apres
' merci de votre aide
'passe au suivant
J = J + 1
MsgBox Tbl(1, J)
'ici copier coller
Case Is <> "", 1, 2, 3 ' si la réponse est differente des choix
MsgBox "Je n'ai pas compris le choix, Veuillez recommencer !", vbOKOnly + vbExclamation, "Erreur !"
'recommence jusqu'à la bonne réponse
GoTo Reprise
Case Else
'...
End Select
Loop Until Resultat <> 3 Or J = UBound(Tbl, 2)
End Sub
Sub Tri(Tbl())
Dim Tempo1, Tempo2, Tempo3, Tempo4
Dim I As Integer
Dim J As Integer
'tri décroissant "<"
'tri croissant ">"
For I = 1 To UBound(Tbl, 2) - 1
For J = I + 1 To UBound(Tbl, 2)
If Tbl(3, I) > Tbl(3, J) Then
Tempo1 = Tbl(1, J)
Tempo2 = Tbl(2, J)
Tempo3 = Tbl(3, J)
Tempo4 = Tbl(4, J)
Tbl(1, J) = Tbl(1, I)
Tbl(2, J) = Tbl(2, I)
Tbl(3, J) = Tbl(3, I)
Tbl(4, J) = Tbl(4, I)
Tbl(1, I) = Tempo1
Tbl(2, I) = Tempo2
Tbl(3, I) = Tempo3
Tbl(4, I) = Tempo4
End If
Next J
Next I
End SubHervé.
Bonjour,
Il te suffit de passer le résultat en argument à la proc. Je te poste le tout :
Private Sub btnok_Click()
'1 est passé en argument
Act1 1
End Sub
Private Sub btnnok_Click()
'2 est passé en argument
Act1 2
End Sub
Private Sub btnnext_Click()
'3 est passé en argument
Act1 3
End Sub
Private Sub btnquitter_Click()
Unload Me
End Sub
Sub Act1(Resultat As Integer) 'Resultat est demandé en argument
Dim Tbl()
Dim Plage As Range
Dim Cel As Range
Dim I As Long
Dim J As Long
Dim K As Long
Dim L As Long
'défini la plage sur la colonne Act1
With Worksheets("Jour")
Set Plage = .Range(.Cells(3, 3), .Cells(.Rows.Count, 3).End(xlUp))
End With
'parcour la plage à la recherche des "Oui" (attention, il y a des espaces parasites...!)
'd'où la raison de Trim, à corriger !
For Each Cel In Plage
If Trim(Cel.Value) = "Oui" Then
'redimensionne le tableau
I = I + 1
ReDim Preserve Tbl(1 To 4, 1 To I)
' nom
Tbl(1, I) = Cel.Offset(, -2).Value
' prenom
Tbl(2, I) = Cel.Offset(, -1).Value
'compteur
Tbl(3, I) = Cel.Offset(, 4).Value
'stocke l'adresse de la cellule
Tbl(4, I) = Cel.Offset(, 4).Address
End If
Next Cel
'effectue un tri croissant du tableau
Tri Tbl()
'pour afficher la première valeur
J = 1
'reprise ici si choix non prévu dans la liste
Reprise:
'boucle
Do
Select Case Resultat
Case 1
'a accepté
MsgBox "Compteur incrémenté, et action logué", vbOKOnly + vbInformation, " Il a accepté !"
'######### Comment incrementer le compteur de +1 ?
Range(Tbl(4, J)).Value = Range(Tbl(4, J)).Value + 1
Case 2
'Le technicien refusé le remplacement
MsgBox "Compteur de refus + compteur incrémentés, et action logué", vbOKOnly + vbInformation, " Re cliquez sur le bouton VIP"
MsgBox "Re-cliquez sur le bouton VIP", vbOKOnly + vbInformation, ""
'######### Augmenter le compteur de refus + le compteur de remplacement pour le penaliser.
'######### Comment incrementer le compteur de +1 ?
'compteur de remplacement
Range(Tbl(4, J)).Value = Range(Tbl(4, J)).Value + 1
'compteur de refus
Range(Tbl(4, J)).Offset(, 1).Value = Range(Tbl(4, J)).Offset(, 1).Value + 1
Case 3
' Le planning ne permet pas ce remplacement
' MsgBox "Le prochain est : ", vbOKOnly + vbInformation, " le suivant ..."
' MsgBox Tbl(3, J) '90
'######### Comment fair en sorte que le prochain soit le nom7 et non pas le le nom1 ( je veux le compteur le plus bas) et qu'il y ai une boulce que tant que la repone est un refus ou une impossibilité, que ça donne toujours la compteur juste apres
' merci de votre aide
'passe au suivant
J = J + 1
MsgBox Tbl(1, J)
'ici copier coller
Case Is <> "", 1, 2, 3 ' si la réponse est differente des choix
MsgBox "Je n'ai pas compris le choix, Veuillez recommencer !", vbOKOnly + vbExclamation, "Erreur !"
'recommence jusqu'à la bonne réponse
GoTo Reprise
Case Else
'...
End Select
Loop Until Resultat <> 3 Or J = UBound(Tbl, 2)
End Sub
Sub Tri(Tbl())
Dim Tempo1, Tempo2, Tempo3, Tempo4
Dim I As Integer
Dim J As Integer
'tri décroissant "<"
'tri croissant ">"
For I = 1 To UBound(Tbl, 2) - 1
For J = I + 1 To UBound(Tbl, 2)
If Tbl(3, I) > Tbl(3, J) Then
Tempo1 = Tbl(1, J)
Tempo2 = Tbl(2, J)
Tempo3 = Tbl(3, J)
Tempo4 = Tbl(4, J)
Tbl(1, J) = Tbl(1, I)
Tbl(2, J) = Tbl(2, I)
Tbl(3, J) = Tbl(3, I)
Tbl(4, J) = Tbl(4, I)
Tbl(1, I) = Tempo1
Tbl(2, I) = Tempo2
Tbl(3, I) = Tempo3
Tbl(4, I) = Tempo4
End If
Next J
Next I
End SubHervé.
Oups désolé, je l'ai posté deux fois
Houston, j'ai un probleme
avant tout merci !
j'ai un truc bizzare, des lors que je met en argument resultat, ça Act1 disparait en tant que macro
je sais pas pourquoi, je crois que je me suis aventuré en terrain inconnu,
de plus, si je veux faire un deuxieme bouton Act2, comment lui passer l'argument ?
je peux faire dans Private Sub btnok_Click()
Act1 1
Act2 1
Act3 1
..... ?
sinon j'ai une erreur au lancement, peux tu me dire d'ou ça vient ?
Merci encore
+++++++++++++++++++++++++++++++++++++
Private Sub btnok_Click()
'1 est passé en argument
Act1 1
End Sub
Private Sub btnnok_Click()
'2 est passé en argument
Act1 2
End Sub
Private Sub btnnext_Click()
'3 est passé en argument
Act1 3
End Sub
Private Sub btnquitter_Click()
Unload Me
End Sub
Sub Act1(Resultat As Integer) 'Resultat est demandé en argument
Dim Tbl()
Dim Plage As Range
Dim Cel As Range
Dim I As Long
Dim J As Long
Dim K As Long
Dim L As Long
'défini la plage sur la colonne Act1
With Worksheets("Jour")
Set Plage = .Range(.Cells(3, 3), .Cells(.Rows.Count, 3).End(xlUp))
End With
'parcour la plage à la recherche des "Oui" (attention, il y a des espaces parasites...!)
'd'où la raison de Trim, à corriger !
For Each Cel In Plage
If Trim(Cel.Value) = "Oui" Then
'redimensionne le tableau
I = I + 1
ReDim Preserve Tbl(1 To 4, 1 To I)
' nom
Tbl(1, I) = Cel.Offset(, -2).Value
' prenom
Tbl(2, I) = Cel.Offset(, -1).Value
'compteur
Tbl(3, I) = Cel.Offset(, 4).Value
'stocke l'adresse de la cellule
Tbl(4, I) = Cel.Offset(, 4).Address
End If
Next Cel
'effectue un tri croissant du tableau
Tri Tbl()
'pour afficher la première valeur
J = 1
'reprise ici si choix non prévu dans la liste
Reprise:
'boucle
Do
'La variable reçoit la valeur entrée dans l'InputBox
'Resultat = InputBox("Le prochain sur la liste: " & _
Chr(10) & Chr(10) & Chr(10) & Chr(10) & Chr(9) & _
Tbl(1, J) & Tbl(2, J) & Chr(10) & Chr(10) & _
"1 : OK" & Chr(10) & _
"2 : Refus" & Chr(10) & _
"3 : Impossible (on passe au suivant)", "Liste d'intershift")
reponse.Show
Select Case Resultat
Case 1
'a accepté
MsgBox "Compteur incrémenté, et action logué", vbOKOnly + vbInformation, " Il a accepté !"
'######### Comment incrementer le compteur de +1 ?
Range(Tbl(4, J)).Value = Range(Tbl(4, J)).Value + 1
Case 2
'Le technicien refusé le remplacement
MsgBox "Compteur de refus + compteur incrémentés, et action logué", vbOKOnly + vbInformation, " Re cliquez sur le bouton VIP"
MsgBox "Re-cliquez sur le bouton VIP", vbOKOnly + vbInformation, ""
'######### Augmenter le compteur de refus + le compteur de remplacement pour le penaliser.
'######### Comment incrementer le compteur de +1 ?
'compteur de remplacement
Range(Tbl(4, J)).Value = Range(Tbl(4, J)).Value + 1
'compteur de refus
Range(Tbl(4, J)).Offset(, 1).Value = Range(Tbl(4, J)).Offset(, 1).Value + 1
Case 3
' Le planning ne permet pas ce remplacement
' MsgBox "Le prochain est : ", vbOKOnly + vbInformation, " le suivant ..."
' MsgBox Tbl(3, J) '90
'######### Comment fair en sorte que le prochain soit le nom7 et non pas le le nom1 ( je veux le compteur le plus bas) et qu'il y ai une boulce que tant que la repone est un refus ou une impossibilité, que ça donne toujours la compteur juste apres
' merci de votre aide
'passe au suivant
J = J + 1
MsgBox Tbl(1, J)
'ici copier coller
Case Is <> "", 1, 2, 3 ' si la réponse est differente des choix
MsgBox "Je n'ai pas compris le choix, Veuillez recommencer !", vbOKOnly + vbExclamation, "Erreur !"
'recommence jusqu'à la bonne réponse
GoTo Reprise
Case Else
'...
End Select
Loop Until Resultat <> 3 Or J = UBound(Tbl, 2)
End Sub
Sub Tri(Tbl())
Dim Tempo1, Tempo2, Tempo3, Tempo4
Dim I As Integer
Dim J As Integer
'tri décroissant "<"
'tri croissant ">"
For I = 1 To UBound(Tbl, 2) - 1
For J = I + 1 To UBound(Tbl, 2)
If Tbl(3, I) > Tbl(3, J) Then
Tempo1 = Tbl(1, J)
Tempo2 = Tbl(2, J)
Tempo3 = Tbl(3, J)
Tempo4 = Tbl(4, J)
Tbl(1, J) = Tbl(1, I)
Tbl(2, J) = Tbl(2, I)
Tbl(3, J) = Tbl(3, I)
Tbl(4, J) = Tbl(4, I)
Tbl(1, I) = Tempo1
Tbl(2, I) = Tempo2
Tbl(3, I) = Tempo3
Tbl(4, I) = Tempo4
End If
Next J
Next I
End Sub
Sub Act2(Resultat As Integer) 'Resultat est demandé en argument
Dim Tbl()
Dim Plage As Range
Dim Cel As Range
Dim I As Long
Dim J As Long
Dim K As Long
Dim L As Long
'défini la plage sur la colonne Act1
With Worksheets("Jour")
Set Plage = .Range(.Cells(3, 4), .Cells(.Rows.Count, 4).End(xlUp))
End With
'parcour la plage à la recherche des "Oui" (attention, il y a des espaces parasites...!)
'd'où la raison de Trim, à corriger !
For Each Cel In Plage
If Trim(Cel.Value) = "Oui" Then
'redimensionne le tableau
I = I + 1
ReDim Preserve Tbl(1 To 4, 1 To I)
' nom
Tbl(1, I) = Cel.Offset(, -2).Value
' prenom
Tbl(2, I) = Cel.Offset(, -1).Value
'compteur
Tbl(3, I) = Cel.Offset(, 4).Value
'stocke l'adresse de la cellule
Tbl(4, I) = Cel.Offset(, 4).Address
End If
Next Cel
'effectue un tri croissant du tableau
Tri Tbl()
'pour afficher la première valeur
J = 1
'reprise ici si choix non prévu dans la liste
Reprise:
'boucle
Do
'La variable reçoit la valeur entrée dans l'InputBox
'Resultat = InputBox("Le prochain sur la liste: " & _
Chr(10) & Chr(10) & Chr(10) & Chr(10) & Chr(9) & _
Tbl(1, J) & Tbl(2, J) & Chr(10) & Chr(10) & _
"1 : OK" & Chr(10) & _
"2 : Refus" & Chr(10) & _
"3 : Impossible (on passe au suivant)", "Liste d'intershift")
reponse.Show
Select Case Resultat
Case 1
'a accepté
MsgBox "Compteur incrémenté, et action logué", vbOKOnly + vbInformation, " Il a accepté !"
'######### Comment incrementer le compteur de +1 ?
Range(Tbl(4, J)).Value = Range(Tbl(4, J)).Value + 1
Case 2
'Le technicien refusé le remplacement
MsgBox "Compteur de refus + compteur incrémentés, et action logué", vbOKOnly + vbInformation, " Re cliquez sur le bouton VIP"
MsgBox "Re-cliquez sur le bouton VIP", vbOKOnly + vbInformation, ""
'######### Augmenter le compteur de refus + le compteur de remplacement pour le penaliser.
'######### Comment incrementer le compteur de +1 ?
'compteur de remplacement
Range(Tbl(4, J)).Value = Range(Tbl(4, J)).Value + 1
'compteur de refus
Range(Tbl(4, J)).Offset(, 1).Value = Range(Tbl(4, J)).Offset(, 1).Value + 1
Case 3
' Le planning ne permet pas ce remplacement
' MsgBox "Le prochain est : ", vbOKOnly + vbInformation, " le suivant ..."
' MsgBox Tbl(3, J) '90
'######### Comment fair en sorte que le prochain soit le nom7 et non pas le le nom1 ( je veux le compteur le plus bas) et qu'il y ai une boulce que tant que la repone est un refus ou une impossibilité, que ça donne toujours la compteur juste apres
' merci de votre aide
'passe au suivant
J = J + 1
MsgBox Tbl(1, J)
'ici copier coller
Case Is <> "", 1, 2, 3 ' si la réponse est differente des choix
MsgBox "Je n'ai pas compris le choix, Veuillez recommencer !", vbOKOnly + vbExclamation, "Erreur !"
'recommence jusqu'à la bonne réponse
GoTo Reprise
Case Else
'...
End Select
Loop Until Resultat <> 3 Or J = UBound(Tbl, 2)
End Sub
Bonjour Hervé, c'est exactement cela !!! Un grand merci
une question, je n'arrive pas a avoir le nom et prenom dans la zone texte du dessus, si je lui donne la variable au format Tbl(1, I) il me jette
en tout cas merci, parce que tu m'as évité pas mal de nuits blanches
Bonjour,
désolé du retard, j'étais en vacance
Ce que tu m'as poster a complétement chambouler ma vision des choses, je ne savais qu'excel pouvait faire de telles choses !
c'est formidable, une dernière chose que je n'arrive pas a faire, quand le programme se lance, je voudrais que quand je clique sur acceptation il passe l'argument "resultat=1" , impossible"resultat=3" et reaffiche le nom suivant, refus "resultat=2) incrémente de 1 et reafiche le nom compteur suivant.
comme tu peux le voir j'essaie désespérément de le faire de toute les manières mais je n'ai pas les compétences pour, une aide serai la bienvenue
Merci