Autres Demande d'aide VBA

Mana81

XLDnaute Nouveau
Bonjour,
1. Puis-je vous demander votre aide pour du VBA svp?
vous trouverez, en pièce jointe, un fichier excel établi jusque fin d'année.
Pour chaque jour, AM et PM, vous avez des missions à accomplir.
les LUNDI MERCREDI VENDREDI : les missions sont identiques (mais pas forcément dans le même ordre)
les MARDI ET JEUDI : les missions sont identiques également

Mon planning est modifié régulièrement.

Il faudrait que dans la routine, on lui dise de vérifier tous les lundi mercredi vendredi et qu'on retrouve bien les mêmes missions et pareil pour les mardis et jeudi? et qu'il prévienne lorsqu'il en manque une.

J'aimerais pouvoir avoir un messageBox qui me dirait : Attention, vous avez oublié une mission. La mission manquante est ......

Cela est-il possible?

dans la colonne A, ce sont les noms des collaborateurs que j'ai bien évidemment modifié.

d'avance, un tout grand merci pour votre aide.

2. Autre question :
dans un fichier Excel partagé, plusieurs collaborateurs le complètent.
j'aimerais que à partir du mercredi 16h30, le fichier ne soit plus modifiable jusqu'au vendredi 17h
et de nouveau modifiable à partir du lundi matin 7h
est-ce possible en VBA plutôt que de faire moi même les manipulations via excel?

bien à vous.
 

Pièces jointes

  • COPIE Planning Service Courrier-Projet.xlsx
    63.8 KB · Affichages: 11

job75

XLDnaute Barbatruc
Le titre a de l'importance, mettez par exemple Vérification des données des jours de la semaine - Verrouillage fichier.

Pour la question 2 il suffit de rouvrir le fichier en lecture seule dans les périodes adéquates, fichier joint avec dans ThisWorkbook :
VB:
Private Sub Workbook_Open()
Dim wd%, h, ro As Boolean
wd = Weekday(Date, 2)
h = Time
ro = wd = 1 And h < "07:00" Or wd = 3 And h > "16:30" Or wd = 4 Or wd = 5 And h < "17:00" Or wd = 6 Or wd = 7
If Not Me.ReadOnly And ro Then Application.DisplayAlerts = False: Workbooks.Open Me.FullName, ReadOnly:=True
End Sub
 

Pièces jointes

  • COPIE Planning Service Courrier-Projet(1).xlsm
    77.2 KB · Affichages: 7
Dernière édition:

job75

XLDnaute Barbatruc
Fichier (2) avec cette macro qui permet de sélectionner le jour dont les codes ne correspondent pas au lundi ou au mardi :
VB:
Sub Verification()
Dim plage As Range, nlig&, ncol%, tablo, col%, a(), n%, i&, j%, x$, b()
Set plage = ActiveSheet.Range("A1", ActiveSheet.UsedRange)
nlig = plage.Rows.Count
ncol = plage.Columns.Count
If ncol = 1 Then ncol = 2
tablo = plage.Resize(, ncol) 'matrice, plus rapide
For col = 2 To ncol Step 2
    Select Case Weekday(tablo(2, col), 2)
        Case 1
            ReDim a(1 To 2 * nlig, 1 To 1)
            n = 0
            For i = 4 To nlig
                For j = 0 To 1
                    If tablo(i, col + j) <> "" Then
                        n = n + 1
                        a(n, 1) = tablo(i, col + j)
                    End If
            Next j, i
        Case 3, 5
            ReDim Preserve a(1 To 2 * nlig, 1 To 1)
            ReDim Preserve a(1 To 2 * nlig, 1 To 2)
            For i = 4 To nlig
                For j = 0 To 1
                    x = tablo(i, col + j)
                    If x <> "" Then
                        For n = 1 To 2 * nlig
                            If a(n, 1) = x And a(n, 2) = "" Then a(n, 2) = 1: GoTo 2
                        Next n
1                       plage(4, col).Resize(nlig - 3, 2).Select
                        MsgBox "Codes à revoir dans la plage sélectionnée...": Exit Sub
2                   End If
            Next j, i
            For n = 1 To nlig
                If a(n, 1) <> "" Then If a(n, 2) = "" Then GoTo 1
            Next n
        Case 2
            ReDim b(1 To 2 * nlig, 1 To 2)
            n = 0
            For i = 4 To nlig
                For j = 0 To 1
                    If tablo(i, col + j) <> "" Then
                        n = n + 1
                        b(n, 1) = tablo(i, col + j)
                    End If
            Next j, i
        Case 4
            For i = 4 To nlig
                For j = 0 To 1
                    x = tablo(i, col + j)
                    If x <> "" Then
                        For n = 1 To 2 * nlig
                            If b(n, 1) = x And b(n, 2) = "" Then b(n, 2) = 1: GoTo 3
                        Next n
                        GoTo 1
3                   End If
            Next j, i
            For n = 1 To 2 * nlig
                If b(n, 1) <> "" Then If b(n, 2) = "" Then GoTo 1
            Next n
    End Select
Next col
End Sub
Edit : pour tester j'ai mis un code unique sur toute la plage B4:LI39 (161 jours), la macro s'exécute chez moi en 0,11 seconde.

A+
 

Pièces jointes

  • COPIE Planning Service Courrier-Projet(2).xlsm
    79.1 KB · Affichages: 8
Dernière édition:

Mana81

XLDnaute Nouveau
Bonjour Job75,
Un grand merci pour votre rapidité.
Lorsque je demande de l'aide en VBA, j'aimerais également que l'on m'explique la routine. Faire du "copier-coller" ne me correspond pas. Je souhaite vraiment comprendre. Pourriez-vous m'expliquer votre routine?

Je prends bonne note pour la précision dans les titres (merci de votre conseil).

Je vais donc lire attentivement vos deux routines et essayer de les faire fonctionner.

Merci pour vos explications complémentaire et bien à vous,
 

Mana81

XLDnaute Nouveau
Le titre a de l'importance, mettez par exemple Vérification des données des jours de la semaine - Verrouillage fichier.

Pour la question 2 il suffit de rouvrir le fichier en lecture seule dans les périodes adéquates, fichier joint avec dans ThisWorkbook :
VB:
Private Sub Workbook_Open()
Dim wd%, h, ro As Boolean
wd = Weekday(Date, 2)
h = Time
ro = wd = 1 And h < "07:00" Or wd = 3 And h > "16:30" Or wd = 4 Or wd = 5 And h < "17:00" Or wd = 6 Or wd = 7
If Not Me.ReadOnly And ro Then Application.DisplayAlerts = False: Workbooks.Open Me.FullName, ReadOnly:=True
End Sub


Génial !
un grand merci!
Est-ce que je peux pousser plus loin...
je vous joins le fichier en question.
le collaborateur peut, sur base d'une liste déroulante, mentionner s'il souhaite un VA, une récupération, ou un départ anticipé.
ex. : le collaborateur A encode sa demande sur la ligne 4 (sur base de la liste déroulante)
la ligne 5, quant à elle, servira à mentionner l'heure pour un départ anticipé. celle ci doit donc rester vide

Le responsable valide la cellule en couleur verte et refuse en couleur rouge.
J'aimerais qu'une fois la cellule modifée en couleur, celle-ci ne puisse plus être changée par le collaborateur.
Seule le responsable peut changer de couleur.

comment faire?
Merci à vous,
 

Pièces jointes

  • planning - demande de congés test.xlsx
    32.7 KB · Affichages: 3

Mana81

XLDnaute Nouveau
Pour la question 1 ce n'est pas vraiment clair.

S'agit-il de comparer d'un jour à l'autre les missions d'une même personne ou les missions de toutes les personnes ?


Il s'agit de comparer uniquement les missions. Peu importe qu'elles soient attribuées à qqn en particulier.
les missions des LUNDI MERCREDI ET VENDREDI SONT TOUJOURS IDENTIQUES
LES MISSIONS DE MARDI ET JEUDI SONT DIFFERENTES DES AUTRES JOURS MAIS SONT IDENTIQUES EGALEMENT ENTRE ELLES
je souhaite donc qu'il me dise :
attention, vous avez oublié la mission "nom de la mission".

encore merci de votre aide.
bien à vous
 

job75

XLDnaute Barbatruc
Bonjour Mana81, le forum,

Alors vous le changez ce titre, oui ou non ???

Une amélioration dans ce fichier (3), le message d'alerte est complété par le libellé d'un code excédentaire ou manquant.

A+
 

Pièces jointes

  • COPIE Planning Service Courrier-Projet(3).xlsm
    79.7 KB · Affichages: 13

Mana81

XLDnaute Nouveau
Bonjour job75,
Merci pour votre macro.
Ce n'est pas exactement ce que je recherche.
Je souhaiterais qu'il me dise que le code est manquant et non pas "excédentaire". mais surtout Quel est le code manquant.

Concernant la charte du Forum, veuillez m'excuser mais je ne suis pas habituée sur ce site. Lorsque je regarde des discussions similaires, créées en 2008-2012-2013, etc, le titre est le même que moi.
Le principal est que je puisse trouver solution à ma demande -:) Preuve en est, vous avez décidé de m'aider... et je vous en remercie.
 

Hasco

XLDnaute Barbatruc
Repose en paix
Bonjour

Concernant la charte du Forum, veuillez m'excuser mais je ne suis pas habituée sur ce site. Lorsque je regarde des discussions similaires, créées en 2008-2012-2013, etc, le titre est le même que moi.
Le principal est que je puisse trouver solution à ma demande -:) Preuve en est, vous avez décidé de m'aider... et je vous en remercie.

Le principal en l’occurrence est que de futurs chercheurs de solutions puissent trouver le plus aisément ce qu'ils recherchent à l'aide de mots clefs dans les titres.
Hors votre titre ne permet pas de savoir de quoi il s'agit. La multiplication de 'demande d'aide VBA' est dans ce sens très contre-productif.

Cordialement
 

job75

XLDnaute Barbatruc
Bonjour Mana81, Roblochon,
Ce n'est pas exactement ce que je recherche.
Je souhaiterais qu'il me dise que le code est manquant et non pas "excédentaire". mais surtout Quel est le code manquant.
Vous n'avez pas compris comment ça marche.

La macro cherche d'abord les codes excédentaires et les traite un par un : il faut les corriger à chaque fois après le message.

Ensuite elle passe aux codes manquants, là aussi il faut les compléter après le message.

PS : si vous ne corrigez pas le titre de la discussion comme je l'ai indiqué je ne vous aiderai plus.

A+
 

Mana81

XLDnaute Nouveau
Bonjour



Le principal en l’occurrence est que de futurs chercheurs de solutions puissent trouver le plus aisément ce qu'ils recherchent à l'aide de mots clefs dans les titres.
Hors votre titre ne permet pas de savoir de quoi il s'agit. La multiplication de 'demande d'aide VBA' est dans ce sens très contre-productif.

Cordialement


Bonjour Roblochon,
Merci pour votre explication complète.
J'ai bien compris maintenant. J'ai créé deux nouvelles discussions avec un titre bien spécifique.
Cordialement.
 

Mana81

XLDnaute Nouveau
Bonjour Mana81, Roblochon,

Vous n'avez pas compris comment ça marche.

La macro cherche d'abord les codes excédentaires et les traite un par un : il faut les corriger à chaque fois après le message.

Ensuite elle passe aux codes manquants, là aussi il faut les compléter après le message.

PS : si vous ne corrigez pas le titre de la discussion comme je l'ai indiqué je ne vous aiderai plus.

A+


Bonjour,
il me met le message : code excédentaire. et rien d'autre.
je ne souhaite pas qu'il affiche cela. simplement qu'il me mette votre code manquant est : ......
mais comme vous dites, je n'ai pas compris... logique, faire un copier coller d'une macro sans la comprendre....

ps: j'ai crée deux nouvelles discussions avec un titre bien spécifique.

bonne journée
 

Discussions similaires

Réponses
3
Affichages
416

Statistiques des forums

Discussions
312 294
Messages
2 086 896
Membres
103 404
dernier inscrit
sultan87