Code VBA qui ne s’exécute pas

Bonjour,

J'ai créé un planning que je dois remplir en cliquant sur un bouton de commande.

J'ai créé un code VBA, mais celui-ci ne s'exécute pas.

Etant novice en la matière, pourriez-vous me donner une aide?

Je vous joint mon tableau pour bien comprendre.

En vous remerciant

34planning-c.xlsm (87.87 Ko)

Bonjour,

Il se peut que les événements soient désactivés,

pour y remédier, exécuter une fois cette macro,

Sub reset()
Application.EnableEvents = True
End Sub

Bonjour i20100,

Désolé, mais ça marche toujours pas

re,

For Each cellule_type In Range("D5:AO5")
Select Case cellule_type.Value

le test sur S1 devrait s'appliquer à la cellule de la colonne D

For Each cellule_type In Range("D5:AO5")
Select Case Range("D" & cellule_type.row).Value

Toujours pas de réaction.

re,

voici un exemple pour la macro Etape1,

Sub Etape1()
Sheets("Planning").Activate
Dim x As Integer, y As Integer, i As Long
x = 0
Infirmière1 = Array("R", "R", 1, 2, 3, 4, 5, "R", "R", 6, 7, 8, 9, 10, "R", "R", 1, 2, 3, 4, 5, R, R, 6, 7, 8, 9, 10, "R", "R", 1, 2, 3, 4, 5, "R", "R")
For i = 6 To 22 Step 2
    Select Case Range("D" & i).Value
        Case "S1"
        For y = 5 To 41
            Cells(i, y) = Infirmière1(x)
            x = x + 1
        Next y
    End Select
Next i
End Sub

re,

j'ai ajouté les case S2 et S3,

Sub Etape1()
Sheets("Planning").Activate
Dim x As Integer, y As Integer, i As Long

S1infirmière1 = Array("R", "R", 1, 2, 3, 4, 5, "R", "R", 6, 7, 8, 9, 10, "R", "R", 1, 2, 3, 4, 5, R, R, 6, 7, 8, 9, 10, "R", "R", 1, 2, 3, 4, 5, "R", "R")
S2infirmière1 = Array("R", "R", 1, 2, 3, 4, 5, "R", "R", 6, 7, 8, 9, 10, "R", "R", 1, 2, 3, 4, 5, R, R, 6, 7, 8, 9, 10, "R", "R", 1, 2, 3, 4, 5, "R", "R")
S3infirmière1 = Array("R", "R", 1, 2, 3, 4, 5, "R", "R", 6, 7, 8, 9, 10, "R", "R", 1, 2, 3, 4, 5, R, R, 6, 7, 8, 9, 10, "R", "R", 1, 2, 3, 4, 5, "R", "R")

For i = 6 To 22 Step 2
    Select Case Range("D" & i).Value
        Case "S1"
                x = 0
                For y = 5 To 41
                    Cells(i, y) = S1infirmière1(x)
                    x = x + 1
                Next y

        Case "S2"
                x = 0
                For y = 5 To 41
                    Cells(i, y) = S2infirmière1(x)
                    x = x + 1
                Next y

        Case "S3"
                x = 0
                For y = 5 To 41
                    Cells(i, y) = S3infirmière1(x)
                    x = x + 1
                Next y
    End Select
Next i
End Sub

Bonjour,

Merci pour l'aide, ça fonctionne très bien avec votre dernière proposition.

Mais, chaque infirmière ont 4 semaines de roulement différentes

S1 = Semaine 1

S2 = Semaine 2

S3 = Semaine 3

S4 = Semaine 4

ex:

infirmière 1:

S1 = 1, 1, R, 2, 1 (les chiffres correspondent à une plage horaire, R = Repos)

S2 = 2, 5, 3, 1, 1

S3 = 2, 5, 2, 4, R

S4 = 4, 1, R, 2, 8

infirmière 2 :

S1 = 4, 3, 1, 1, 1

S2 = 2, R, 2, 1, 1

S3 = 2, 5, 2, 4, R

S4 = 4, 3, 1, 2, 8

etc... il y' a 25 infirmières à planifier

Les weekend sont toujours en R

Le but est de remplir le planning en fonction de la semaine de référence, que je place au début du planning, pour chaque infirmière.

ex:

infirmière 1:

Si référence = S1 alors R, R, 1, 1, R, 2, 1, R, R, 2, 5, 3, 1, 1, R, R, 2, 5, 2, 4, R, R, R, 4, 1, R, 2, 8, R, R, 1, 1, R, 2, 1, R, R

Si référence = S2 alors R, R, 2, 5, 3, 1, 1, R, R, 2, 5, 2, 4, R, R, R, 4, 1, R, 2, 8, R, R, 1, 1, R, 2, 1, R, R, 2, 5, 3, 1, 1, R, R

Si référence = S3 alors R, R, 2, 5, 2, 4, R, R, R, 4, 1, R, 2, 8, R, R, 1, 1, R, 2, 1, R, R, 1, 1, R, 2, 1, R, R, 2, 5, 2, 4, R, R, R

Si référence = S4 alors R, R, 4, 1, R, 2, 8, R, R, 1, 1, R, 2, 1, R, R, 1, 1, R, 2, 1, R, R, 2, 5, 2, 4, R, R, R, 4, 1, R, 2, 8, R, R

et ainsi de suite pour chaque infirmière.

re,

je vais modifier la macro, mais j'aimerais savoir auparavant si les chiffres ne dépasserons jamais 9 ?

Oui. Il y aura uniquement les chiffres 1, 2, 3, 4, 6, 8 et les lettres S, R, 3B.

re,

une autre question avant de terminer,

est ce que les données de S1, S2, S3 et S4 sont appelées à changer ?

si c'est le cas il vaudrait peut être mieux utiliser des plages de cellules nommées, au lieu d'utiliser des variables Array

car les données sur une feuille sont plus facilement modifiable.

Les données des semaines ne changeront pas.

re,

à tester,

Sub Etape1()
Sheets("Planning").Activate
Dim x As Integer, s As Integer, y As Integer, z As Integer, i As Long
Dim s, iS1, iS2, iS3, iS4

iS1 = Array("R", "R", 1, 1, "R", 2, 1, "R", "R", 2, 5, 3, 1, 1, "R", "R", 2, 5, 2, 4, "R", "R", "R", 4, 1, "R", 2, 8, "R", "R", 1, 1, "R", 2, 1, "R", "R")
iS2 = Array("R", "R", 2, 5, 3, 1, 1, "R", "R", 2, 5, 2, 4, "R", "R", "R", 4, 1, "R", 2, 8, "R", "R", 1, 1, "R", 2, 1, "R", "R", 2, 5, 3, 1, 1, "R", "R")
iS3 = Array("R", "R", 2, 5, 2, 4, "R", "R", "R", 4, 1, "R", 2, 8, "R", "R", 1, 1, "R", 2, 1, "R", "R", 1, 1, "R", 2, 1, "R", "R", 2, 5, 2, 4, "R", "R", "R")
iS4 = Array("R", "R", 4, 1, "R", 2, 8, "R", "R", 1, 1, "R", 2, 1, "R", "R", 1, 1, "R", 2, 1, "R", "R", 2, 5, 2, 4, "R", "R", "R", 4, 1, "R", 2, 8, "R", "R")
s = Array(iS1, iS2, iS3, iS4)

For i = 6 To 22 Step 2
    Select Case Range("D" & i).Value
        Case "S1": y = 0
        Case "S2": y = 1
        Case "S3": y = 2
        Case "S4": y = 3
    End Select

    x = 0
    For z = 6 To Sheets("Planning").Cells(Rows.Count, "A").End(xlUp).Row
        Cells(i, z) = s(y)(x)
        x = x + 1
    Next z
Next i
End Sub

Bonjour,

Vba me renvoie une erreur de compilation.

Concernant "Dim s" (Déclaration existante dans la portée en cours)

re,

voici la modification,

Sub Etape1()
Sheets("Planning").Activate
Dim x As Integer, y As Integer, z As Integer, i As Long
Dim s, iS1, iS2, iS3, iS4

iS1 = Array("R", "R", 1, 1, "R", 2, 1, "R", "R", 2, 5, 3, 1, 1, "R", "R", 2, 5, 2, 4, "R", "R", "R", 4, 1, "R", 2, 8, "R", "R", 1, 1, "R", 2, 1, "R", "R")
iS2 = Array("R", "R", 2, 5, 3, 1, 1, "R", "R", 2, 5, 2, 4, "R", "R", "R", 4, 1, "R", 2, 8, "R", "R", 1, 1, "R", 2, 1, "R", "R", 2, 5, 3, 1, 1, "R", "R")
iS3 = Array("R", "R", 2, 5, 2, 4, "R", "R", "R", 4, 1, "R", 2, 8, "R", "R", 1, 1, "R", 2, 1, "R", "R", 1, 1, "R", 2, 1, "R", "R", 2, 5, 2, 4, "R", "R", "R")
iS4 = Array("R", "R", 4, 1, "R", 2, 8, "R", "R", 1, 1, "R", 2, 1, "R", "R", 1, 1, "R", 2, 1, "R", "R", 2, 5, 2, 4, "R", "R", "R", 4, 1, "R", 2, 8, "R", "R")
s = Array(iS1, iS2, iS3, iS4)

For i = 6 To 22 Step 2
    Select Case Range("D" & i).Value
        Case "S1": y = 0
        Case "S2": y = 1
        Case "S3": y = 2
        Case "S4": y = 3
    End Select

    x = 0
    For z = 6 To Sheets("Planning").Cells(Rows.Count, "A").End(xlUp).Row
        Cells(i, z) = s(y)(x)
        x = x + 1
    Next z
Next i
End Sub
Rechercher des sujets similaires à "code vba qui execute pas"