Mise à jour VBA
Bonjour
Je dois mettre à jour un fichier créer par un bénévole qui a quitté l'association. Ce fichier est rempli de code VBA que je ne maitrise pas. Je vous expose ce que je souhaite si jamais quelqu'un peut aider.
Le fichier comprend un calendrier annuel dans lequel nous indiquons les heures d'ateliers et les heures de réunion (mois par mois jour par jour). Une macro a été intégrer à ce fichier afin d'ajouter les heures d'ateliers de façon plus simple. Ex je clique sur le bouton jour scolaire une fenêtre s'affiche j'indique le nombre d'heures ainsi que le jour concerné et hop tous les Lundis de l'année sont complétés.
Voici les macros déjà paramétrées dans le fichier source :
Sub JourSemaine()
Dim heure As String
Dim jour As String
Dim lettre As String
heure = InputBox(" Saisir le nombre d'heures à affecter au jour en question (attention, utiliser le point pour si nombre décimal): ", " Nombre d'heures")
jour = InputBox(" Saisir le jour pour lequel il faut affecter ce nombre d'heures (L - Ma - Me - J - V - S - D): ", " Jours concernés")
resetconges = InputBox(" Pour ne pas effacer les congés éventuels déjà saisis dans la planning, saisir 456. Sinon, taper entrer. [le traitement peut durer quelques secondes] ", " Sauvergarder les congés saisis")
For j = 0 To 12
For i = 0 To 30
If Cells(20 + i, 4 + 6 * j) <> "V" Then
If Cells(20 + i, 1 + 6 * j) = jour And Cells(20 + i, 4 + 6 * j) <> "F" Then
If resetconges = "456" Then
If Cells(20 + i, 6 + 6 * j) = "C" Or Cells(20 + i, 6 + 6 * j) = "c" Then
Cells(20 + i, 6 + 6 * j) = "C"
Else
Cells(20 + i, 6 + 6 * j) = heure
End If
End If
End If
End If
Next
Next
End Sub
Par le passé nous englobions les heures d'ateliers et les heures de réunion dans la même cellule. Cette année nous souhaitons faire la distinction et le fichier à donc dorénavant deux colonnes pas mois (atelier/réunion). J'aimerai pouvoir créer la macro pour faciliter l’intégration des heures de réunion sous le même modèle que la formule ci-dessous.
Les heures de réunions sont en colonne E K Q W AC AI AO AU BA BG BM BS BY
Les heures d'atelier sont en colonne F L R X AD AJ AP AV BB BH BN BT BZ
J'espère être compréhensible dans l'explication du problème et du besoin.
Merci à ceux qui essaieront de trouver une solution
Bonjour,
Je vais regarder mais si vous pouviez poster le fichier ce serait beaucoup plus facile, merci. Vous pouvez en envoyer un "vide", c'est surtout pour comprendre les "i,j" et additions correspondantes.
Dans l'ideal postez un fichier avec la feuille "originale" et celle que vous souhaitez obtenir.
Bonjour, j'ai mis a jour votre code pour etre un peu plus "robute", mais j'aurai vraiment besoin d'un fichier pour avancer davantage. Ci-après le code en question.
Option Explicit
Sub JourSemaine()
Dim validDays(1 To 7) As String
validDays(1) = "l"
validDays(2) = "ma"
validDays(3) = "me"
validDays(4) = "j"
validDays(5) = "v"
validDays(6) = "s"
validDays(7) = "d"
Dim validInput As Boolean
Do
Dim jour As String
jour = Replace(InputBox("Saisir le jour pour lequel il faut affecter un " & _
"nombre d'heures (L - Ma - Me - J - V - S - D) :", _
"Jours concernés"), _
" ", vbNullString)
Dim vDay As Variant
For Each vDay In validDays
If VBA.LCase$(jour) = vDay Then
validInput = True
Exit For
End If
Next vDay
Loop Until validInput
Do
Dim heure As String
heure = InputBox("Saisir le nombre d'heures à affecter au jour en question (" & StrConv(jour, vbProperCase) & ") :", _
"Nombre d'heures")
' remplacement des "," en "." automatiquement
heure = VBA.Replace(heure, ",", ".")
validInput = False
If heure <> vbNullString Then
validInput = False
On Error Resume Next
validInput = CDbl(heure) > 0
On Error GoTo 0
End If
Loop Until validInput
Dim confirmation As Boolean
confirmation = MsgBox("Insérer " & heure & " h le " & StrConv(jour, vbProperCase) & " ?", _
vbYesNo, "Confirmation de la saisie") = vbYes
If Not confirmation Then Exit Sub
Dim resetConges As Boolean
resetConges = MsgBox("Voulez-vous effacer les congés éventuels déjà saisis dans la planning ?", _
vbYesNo, "Sauvegarder les congés saisis") = vbYes
Dim ligneIndex As Long, colIndex As Long
For ligneIndex = 20 To 50
For colIndex = 0 To 72 Step 6
With ThisWorkbook.Worksheets(1)
If .Cells(ligneIndex, colIndex + 4).Value2 <> "V" Then
If .Cells(ligneIndex, colIndex + 1) = jour _
And .Cells(ligneIndex, colIndex + 4).Value2 <> "F" Then
If resetConges Then
If .Cells(ligneIndex, colIndex + 6) = "C" Then
' deja present
Else
.Cells(ligneIndex, colIndex + 6) = heure
End If
End If
End If
End If
End With
Next colIndex
Next ligneIndex
End SubBonjour,
Merci pour votre retour et votre réactivité. Vous trouverez ci joint le fichier en question.
Merci
L'idée étant que les boutons violet puissent remplir de façon automatique les heures d'atelier (colonne F L R X AD AJ AP AV BB BH BN BT BZ).
Les boutons orange quant a eux remplissent de façon automatique les heures de réunions (colonne E K Q W AC AI AO AU BA BG BM BS BY)
Je vois dans le code qu'il vérifiait la colonne (reunion ou atelier) par la présence de "V" ou "F". Ce test doit-il toujours etre fait ? Que signifient ces valeurs ?
Il regardait egalement 2 colonnes plus loin pour une valeur "C", pour des congés j'imagine. Que devient cette colonne dans votre feuille, je ne la vois pas ?
Voici les infos, le fichier gère les vacances scolaires (V) et jours fériés (F), afin de colorer les jours en fonction du type orange pour vacances et rouge pour jours fériés. Ce test doit toujours être fait car il permet en fonction du bouton utiliser (période
J'ai trouvé cette version avec des feuilles qui étaient masquées, je pense que ça va simplifier la lecture.
Rebonjour,
Ci-joint votre premier fichier, avec 2 nouveaux boutons temporaires sur lesquels j'ai lié les macros mises a jour. Pouvez-vous le tester et me dire si cela convient à vos attentes ?
Je vous remercie pour vos réponses mais vous n'avez pas expliqué le "C" pour les congés, qui se trouve dans le code et est assez important puisque si l'option "remplacer les congés" n'est pas sélectionnée alors le code n'écrit rien. J'ai repris la meme structure logique mais ca me semble étrange.
Bonjour,
Je vous remercie pour le temps accordé.
J'ai testé les 2 boutons temporaires ils fonctionnent bien.
J'ai besoin que les boutons permettent de faire la distinction entre les colonnes Réunion et les colonnes Atelier.
La macro liée au bouton violet est opérationnel, ces boutons permettent de remplir de façon automatique les colonnes atelier en choisissant d'affecter des heures sur des jours scolaires ou des heures sur les vacances ou de réinitialiser le planning complètement ou partiellement.
J'aimerai que les boutons orange (saisir un nombre d'heures sur un jour;saisir un nombre d'heures les jours de vacances scolaires, réinitialiser le planning complet, réinitialiser le planning hors période du cycle) fonctionnent de la même façon que la colonne Atelier mais cette fois pour la colonne réunion.
Le C correspond à congés, dès lors qu'un C est indiqué dans la cellule si on ajoute des heures via les boutons le fichier propose d'écraser les C déjà indiqué ou de les garder.
Merci beaucoup
Re,
Ci-joint une proposition. J'ai corrigé les macros pour les 3 premiers boutons (tous sauf celle liée aux jours de début/fin) que je ne comprends pas/n'ai pas le temps de traiter.
J'ai revu absolument tout le code qui était beaucoup trop complexe et imbriqué pour la tache en réalité simple a effectuer. De meme d'ailleurs, la feuille est anormalement complexe mais bon vu qu'elle fonctionne je suppose que vous pouvez la garder comme cela.
L'ensemble des macros ajoutées se trouve dans le module "Ajouts", j'ai laissé les anciennes dans les modules déjà existants.
Afin de simplifier la tache je vous ai créé une fonction de parcours du calendrier "globale", qui prend des arguments adaptés en fonction de la tache a effectuer. Ca evite de réécrire le meme code plusieurs fois et c'est plus simple a relire. Si quelqu'un d'autre veut vous aider il devrait y voir plus clair.
N'hésitez pas a présider DES LE DEBUT votre demande avec des exemples concrets, des explications. Ca aide vraiment. J'ai passé plus de temps a essayer de comprendre ce que vous/le code vouliez faire qu'à le corriger… De meme le second classeur était nécessaire car le premier était truffé de #REF sur les feuilles que vous aviez supprimées.
Bon courage pour la suite, je m'arrete ici.