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 Sub

Bonjour,

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.

Merci beaucoup

Rechercher des sujets similaires à "mise jour vba"