Faire un planning évolutif Code VBA et plusieurs conditions
Bonjour,
Je suis sur Excel 2016 FR pour Mac et je dois faire un planning qui évolue constamment. Afin d'éviter de faire tout manuellement à chaque fois, j'aurais besoin d'un petit coup de pouce pour insérer un code VBA.
J'ai dois faire un planning avec des plages de 15 minutes mais parfois regroupée en 45 minutes et d'autres de 60 minutes et sur trois jours différents (1 colonne par jour B=mardi, C=mercredi, D= vendredi). J'ai trouver sur le forum un poste avec une question similaire qui a reçu ce code :
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 2 Then
If Not Target.MergeCells And Target.Cells(1, 1).Value <> "" _
And Target.Count = 1 Then
With Target.Resize(3)
.Merge
.VerticalAlignment = xlCenter
End With
ElseIf Target.Cells(1, 1).Value = "" Then
Target.UnMerge
End If
End If
End SubJe l'ai testé, il fonctionne parfaitement. J'ai compris comment faire fonctionner le code pour trois colonnes différentes ou encore le nombre de cellule à faire fusionner, en revanche je ne trouve pas comment ajouter une condition pour fusionner les plages en 45 minutes OU 60 minutes dans la même colonne (selon la condition qu'il s'agit d'un cours enfant ou adulte. Pouvez-vous m'aider à compléter ce code?
Je vous joins un petit fichier représentant un exemple de résultat que je souhaiterais obtenir.
Merci beaucoup pour votre aide!
Leana
A tester :
Tu entres juste le prénom dans une case et ça t'ouvre un UserForm de choix Enfant ou Adulte.
Bonjour,
Essaie ainsi : ToggleButton pour prédéfinir Enfant/Adulte...
Dim AE As Boolean
Private Sub tgbAE_Click()
With tgbAE
AE = .Value
If AE Then .Caption = "Adulte" Else .Caption = "Enfant"
End With
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
Dim i%
If Not Intersect(Target, Me.Range("B3:D43")) Is Nothing Then
If Not Target.MergeCells And Target.Cells(1, 1).Value <> "" _
And Target.Count = 1 Then
For i = 2 To 3 - AE
If Target.Cells(i, 1) <> "" Then Target.ClearContents: Exit Sub
Next i
With Target.Resize(3 - AE)
.Merge
.VerticalAlignment = xlCenter
End With
ElseIf Target.Cells(1, 1).Value = "" Then
Target.UnMerge
End If
End If
End SubCordialement.
Edit : + dans ThisWorkbook
Private Sub Workbook_Open()
Feuille1.tgbAE.Value = False
End Sub(intégré dans fichier)
Bonjour,
Merci pour votre réponse!
Comment faire un toggle button, je dois faire un bouton avec l'option adulte?J'ai vraiment des connaissances très basiques
Merci pour votre aide
Regarde dans le fichier...
Un ToggleButton (bouton-bascule) est un contrôle ActiveX [onglet Dévbeloppeur > Insérer...], bouton qui peut prendre 2 positions (et 2 valeurs) : enfoncé (=True), relevé (=False).
L'utilisation qui en faite ici est simple : à chaque clic sur le bouton, sa valeur est affectée à une variable booléenne niveau module et le libellé du bouton est modifié pour afficher soit "Adulte" si sa valeur est True, soit "Enfant" si sa valeur est False [information à l'usage de l'utilisateur].
La procédure Workbook_Open sert pour le cas où le classeur ait été sauvegardé avec le bouton enfoncé (True) : à l'ouverture le bouton serait toujours à True mais la variable elle sera à False, donc en forçant la valeur du bouton à False à l'ouverture, on réaligne valeur du bouton et valeur de la variable...
La procédure Change reste similaire à ce qu'elle était au départ, la seule modification réside dans le dimensionnement pour la fusion :
With Target.Resize(3 - AE)Une variable booléenne prend la valeur numérique 0 si False lorsque intégrée dans un calcul et (en VBA) -1 si True. On aura donc un dimensionnement à 3 cellules si False et 4 si True...
Un autre petite modification réside dans la boucle qui précède, et qui sert à tester si les cellules que l'on va fusionner sont vides (si ce n'est pas le cas, il y aurait déjà une fusion qui provoquerait soit un message d'alerte, soit une erreur (soit les deux !). On ne réalise donc pas l'opération si on ne peut fusionner des cellules qui ne le sont pas à ce moment...
(Pour bien faire, il faudrait aussi borner la fin, soit réduire la zone d'application de la macro à la ligne 41 (si False) ou 40 (si True)...)
[Sinon à l'utilisateur de voir s'il déborde 20:00...]
Cordialement.
Bonjour à tous,
Une proposition alternative ...
A la saisie d'un simple prénom, le mot enfant s'ajoute automatiquement ...
Lorsqu'il s'agit d'une personne adulte, il faut continuer à saisir le mot adulte ...
J'espère que cela conviendra ...
Bonjour!
Génial, merci à vous deux! L'un dans l'autre, j'ai tout ce qu'il me faut
C'est vraiment top ce forum, on trouve toujours ce dont on a besoin et dans un temps record!
Bonne suite,
Leana
Bonjour,
Merci ... pour tes remerciements ...