Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Autres Demande d'aide VBA

  • Initiateur de la discussion Initiateur de la discussion Mana81
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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

Bonjour Mana81,

Le titre de la discussion est trop général et ne permet pas une recherche.

Conformément à la Charte du forum mettez un titre qui résume le problème posé, merci.

A+
 
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

Dernière édition:
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

Dernière édition:
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,
 


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

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
 
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.
 
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 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+
 


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.
 


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
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
11
Affichages
724
Réponses
16
Affichages
1 K
Réponses
12
Affichages
1 K
Réponses
9
Affichages
1 K
Réponses
1
Affichages
908
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…