IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Excel vba formulaire


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Décembre 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Décembre 2013
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Excel vba formulaire
    Bonjour,

    je suis en train de configurer un formulaire en VBA Excel pour générer un horaire de mécanos.


    Tableau Excel : (voir fichier attaché SVP pour comprendre la configuration)

    ressources en X
    journée en Y



    Paramètres :
    • Nom de la ressource
    • Journée
    • nombre d'heure
    • description du travail




    J'aimerai simplifier mon code avec une boucle pour ne pas avoir à coder chaque possibilité de ressource pour chaque journée , pour chaque heures de travail (1 à 8)

    Pouvez vous m'aider SVP

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    Private Sub UserForm_Initialize() 
     
     
    With ComboBox1 
    .AddItem "CONRAD" 
    .AddItem "MATHIEU" 
    .AddItem "MARTIN" 
    .AddItem "MICHAEL" 
    .AddItem "RICHARD" 
    .AddItem "WILLIAM" 
    .AddItem "WILLIAM" 
     
     
    End With 
     
    With ComboBox2 
    .AddItem "1" 
    .AddItem "2" 
    .AddItem "3" 
    .AddItem "4" 
    .AddItem "5" 
    .AddItem "6" 
    .AddItem "7" 
    .AddItem "8" 
    .AddItem "8" 
    End With 
     
     
    With ComboBox3 
    .AddItem "Lundi" 
    .AddItem "Mardi" 
    .AddItem "Mercredi" 
    .AddItem "Jeudi" 
    .AddItem "Vendredi" 
    .AddItem "Samedi" 
    .AddItem "Dimanche" 
    End With 
     
     
    With ComboBox4 
    .AddItem "Client" 
    .AddItem "Location" 
    .AddItem "Vente" 
    .AddItem "Service" 
    .AddItem "Abscent" 
     
    End With 
     
     
    End Sub 
     
     
    Sub CommandButton1_Click() 
     
     
    'CONRAD : LUNDI 8 heures 
     
    If Me.ComboBox1.Value = "CONRAD" And Me.ComboBox3.Value = "Lundi" And Me.ComboBox2.Value = 8 Then 
    Range("B4:B11").UnMerge 
    Range("B4:B11").Merge 
    Range("B4:B11").Value = ComboBox4.Value 
    'Range("B4:B11").Borders.LineStyle = xlContinuous 
    Range("C4:C11").UnMerge 
    Range("C4:C11").Merge 
    Range("C4:C11").Value = ComboBox2.Value 
    'Range("B4:B11").Borders.LineStyle = xlContinuous 
    Range("D4:D11").UnMerge 
    Range("D4:D11").Merge 
    Range("D4:D11").Value = TextBox1.Value 
    'Range("B4:B11").Borders.LineStyle = xlContinuous 
     
     
    'Color codes by catégorie of activity 
     
    If ComboBox4.Value = "Client" Then 
     
    Range("B4:B11").Interior.Color = RGB(153, 204, 255) 
     
    ElseIf ComboBox4.Value = "Location" Then 
     
    Range("B4:B11").Interior.Color = RGB(255, 255, 0) 
     
    ElseIf ComboBox4.Value = "Vente" Then 
     
    Range("B4:B11").Interior.Color = RGB(153, 204, 0) 
     
    ElseIf ComboBox4.Value = "Service" Then 
     
    Range("B4:B11").Interior.Color = RGB(255, 204, 0) 
     
    ElseIf ComboBox4.Value = "Abscent" Then 
     
    Range("B4:B11").Interior.Color = RGB(192, 192, 192) 
     
    End If
    'CONRAD : LUNDI 7 heures

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    ElseIf Me.ComboBox1.Value = "CONRAD" And Me.ComboBox3.Value = "Lundi" And Me.ComboBox2.Value = "7" Then 
    Range("B4:B10").UnMerge 
    Range("B4:B10").Merge 
    Range("B4:B10").Value = ComboBox4.Value 
    Range("B4:B10").Borders.LineStyle = xlContinuous 
    Range("C4:C10").UnMerge 
    Range("C4:C10").Merge 
    Range("C4:C10").Value = ComboBox2.Value 
    Range("C4:C10").Borders.LineStyle = xlContinuous 
    Range("D4:D10").UnMerge 
    Range("D4:D10").Merge 
    Range("D4:D10").Value = TextBox1.Value 
    Range("D4:D10").Borders.LineStyle = xlContinuous 
     
     
    'Color codes by catégorie of activity 
     
    If ComboBox4.Value = "Client" Then 
     
    Range("B4:B10").Interior.Color = RGB(153, 204, 255) 
     
    ElseIf ComboBox4.Value = "Location" Then 
     
    Range("B4:B10").Interior.Color = RGB(255, 255, 0) 
     
    ElseIf ComboBox4.Value = "Vente" Then 
     
    Range("B4:B10").Interior.Color = RGB(153, 204, 0) 
     
    ElseIf ComboBox4.Value = "Service" Then 
     
    Range("B4:B10").Interior.Color = RGB(255, 204, 0) 
     
    ElseIf ComboBox4.Value = "Abscent" Then 
     
    Range("B4:B10").Interior.Color = RGB(192, 192, 192) 
     
    End If 
     
    'CONRAD : LUNDI 6 heures 
     
    ElseIf Me.ComboBox1.Value = "CONRAD" And Me.ComboBox3.Value = "Lundi" And Me.ComboBox2.Value = "6" Then 
    Range("B4:B9").UnMerge 
    Range("B4:B9").Merge 
    Range("B4:B9").Value = ComboBox4.Value 
    Range("B4:B9").Borders.LineStyle = xlContinuous 
    Range("C4:C9").UnMerge 
    Range("C4:C9").Merge 
    Range("C4:C9").Value = ComboBox2.Value 
    Range("C4:C9").Borders.LineStyle = xlContinuous 
    Range("D4:D9").UnMerge 
    Range("D4:D9").Merge 
    Range("D4:D9").Value = TextBox1.Value 
    Range("D4:D9").Borders.LineStyle = xlContinuous 
     
     
    'Color codes by catégorie of activity 
     
    If ComboBox4.Value = "Client" Then 
     
    Range("B4:B9").Interior.Color = RGB(153, 204, 255) 
     
    ElseIf ComboBox4.Value = "Location" Then 
     
    Range("B4:B9").Interior.Color = RGB(255, 255, 0) 
     
    ElseIf ComboBox4.Value = "Vente" Then 
     
    Range("B4:B9").Interior.Color = RGB(153, 204, 0) 
     
    ElseIf ComboBox4.Value = "Service" Then 
     
    Range("B4:B9").Interior.Color = RGB(255, 204, 0) 
     
    ElseIf ComboBox4.Value = "Abscent" Then 
     
    Range("B4:B9").Interior.Color = RGB(192, 192, 192) 
     
    End If 
     
     
    ElseIf Me.ComboBox1.Value = "CONRAD" And Me.ComboBox3.Value = "Lundi" And Me.ComboBox2.Value = "5" Then 
    Range("B4:B8").UnMerge 
    Range("B4:B8").Merge 
    Range("B4:B8").Value = ComboBox4.Value 
     
    ElseIf Me.ComboBox1.Value = "CONRAD" And Me.ComboBox3.Value = "Lundi" And Me.ComboBox2.Value = "4" Then 
    Range("B4:B7").UnMerge 
    Range("B4:B7").Merge 
    Range("B4:B7").Value = ComboBox4.Value 
     
    ElseIf Me.ComboBox1.Value = "CONRAD" And Me.ComboBox3.Value = "Lundi" And Me.ComboBox2.Value = "3" Then 
    Range("B4:B6").UnMerge 
    Range("B4:B6").Merge 
    Range("B4:B6").Value = ComboBox4.Value 
     
    ElseIf Me.ComboBox1.Value = "CONRAD" And Me.ComboBox3.Value = "Lundi" And Me.ComboBox2.Value = "2" Then 
    Range("B4:B5").UnMerge 
    Range("B4:B5").Merge 
    Range("B4:B5").Value = ComboBox4.Value 
     
    End If 
     
    End Sub 
     
    Private Sub CommandButton2_Click() 
    Unload Me 
    End Sub
    Bon désolé je me suis peut-être mal expliqué,

    Mais bon tu peux voir mon code en pièce jointe, sinon ma problématique est que pour chaque ressources (mécanos) que je possède et pour chaque journée de la semaine, il faudrait que je copie le code actuel et que je modifie mes coordonnées de Range définis dans mon code, Ce que je trouve un peu nul, car je suis persuadé qu'il y a une forme de boucle que je pourrai faire pour couvrir le tout.

    Car le principe est simple , je sélectionne le mécano, ensuite la journée, ensuite le nombre d'heures à bosser, la catégorie et le détail du travail.
    Par la suite je viens fusionner et colorier le nombre de cellule en fonction du nombre d'heures (chaque cellule vaut une heure dans tableau) et je viens finalement transposer l'information de la catégorie et du détail du travail.

    J'espère que c'est plus clair.

    Merci d'avance les amis
    Fichiers attachés Fichiers attachés

  2. #2
    Expert éminent
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Points : 6 871
    Points
    6 871
    Par défaut
    Bonjour,

    Je viens de modifier un peu ton code mais pas testé car je n'est pas chargé ton classeur il est possible de le simplifié encore mais c'est déjà un début :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
     
    Private Sub UserForm_Initialize()
     
        Dim T
        Dim I As Integer
     
        T = Array("Client", "Location", "Vente", "Service", "Abscent")
     
        'ici il est possible d'utiliser une plage dans le classeur...
        'et dans ce cas, utiliser la propriété "RowSource"
        With ComboBox1
     
            .AddItem "CONRAD"
            .AddItem "MATHIEU"
            .AddItem "MARTIN"
            .AddItem "MICHAEL"
            .AddItem "RICHARD"
            .AddItem "WILLIAM"
            .AddItem "WILLIAM"
     
        End With
     
        For I = 1 To 8
     
            ComboBox2.AddItem I
     
        Next I
     
        For I = 1 To 7
     
            ComboBox3.AddItem MonthName(I)
     
        Next I
     
        For I = 0 To UBound(T) - 1
     
            ComboBox4.AddItem (T)
     
        Next I
     
    End Sub
     
     
    Sub CommandButton1_Click()
     
     
        'CONRAD : LUNDI 8 heures
        If ComboBox1.Value = "CONRAD" And ComboBox3.Value = "Lundi" Then
     
            Select Case ComboBox2.Value
     
                Case "8"
                    With Range("B4:B11")
     
                        .UnMerge
                        .Merge
                        .Value = ComboBox4.Value
                        .Offset(, 1).UnMerge
                        .Offset(, 1).Merge
                        .Offset(, 1).Value = ComboBox2.Value
                        .Offset(, 2).UnMerge
                        .Offset(, 2).Merge
                        .Offset(, 2).Value = TextBox1.Value
     
                        'Color codes by catégorie of activity
                        Select Case ComboBox4.Value
     
                            Case "Client": .Interior.Color = RGB(153, 204, 255)
                            Case "Location": .Interior.Color = RGB(255, 255, 0)
                            Case "Vente": .Interior.Color = RGB(153, 204, 0)
                            Case "Service": .Interior.Color = RGB(255, 204, 0)
                            Case "Abscent": .Interior.Color = RGB(192, 192, 192)
     
                        End Select
     
                    End With
     
                Case "5"
                    Range("B4:B8").UnMerge
                    Range("B4:B8").Merge
                    Range("B4:B8").Value = ComboBox4.Value
     
                Case "4"
                    Range("B4:B7").UnMerge
                    Range("B4:B7").Merge
                    Range("B4:B7").Value = ComboBox4.Value
     
                Case "3"
                    Range("B4:B6").UnMerge
                    Range("B4:B6").Merge
                    Range("B4:B6").Value = ComboBox4.Value
     
                Case "2"
                    Range("B4:B5").UnMerge
                    Range("B4:B5").Merge
                    Range("B4:B5").Value = ComboBox4.Value
     
            End Select
     
        End If
     
    End Sub
    Hervé.

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Décembre 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Décembre 2013
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Bonjour

    Merci beaucoup pour ton aide, ça commence à se rapprocher du type de code où je pourrai avoir une boucle qui couvre toutes mes alternatives de choix de ressources et de journées tout en couvrant toutes les plages sans que ce soit un code roman, mais bon lorsque j'exécute ton code j'ai une erreur de compilation bizarre.

    erreur d’exécution , le type ne correspond pas ..... ??????????????????

    Merci beaucoup, plus qu'apprécié
    Images attachées Images attachées  

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    pourquoi utiliser la variable t=array? Alors qu'il est possible d'ffecter a la propriété liste directement le array!

    J'magine que la boucle de 1 à 7 sont les jours de la semaine!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    me.combobox2.liste=application.transpose(array("Lundi","Mardi","Mercredi","Jeudi","Vendredi"))
    et on récupère le listidex + 1 pour le numéro du jour!
    Dernière modification par Invité ; 12/12/2014 à 17h40.

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Décembre 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Décembre 2013
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Salut bon je me suis beaucoup avancé, grâce à votre aide que j'apprécie beaucoup, mais J'ai quelques petits soucis avec une boucle que j'ai instauré pour pouvoir mettre plusieurs activités à l'horaire pour la même ressource et la même journée et le tout pour un maximum de 8hrs bien sûre.

    Du moindrement que j'essaye de booker plus de 3 activités il y a des bug au niveau du formatage. Ou même booker 3 activité de la même catégorie mais avec un détail différent

    Exemple: 2h client, 2h location, 4h vente

    Exemple : 2h client (Détails 1234), 2h client (Détail 4321), client 2h (Détail 54342)

    Si quelqu'un peut jeter un coup d'oeil sur les boucles de vérification de cellule et m'aider à l'optimiser car je bloque.

    Merci l'ami


    Dernier update de mon fichier : http://cjoint.com/?DLmwuWaXfXF http://cjoint.com/?DLmwuWaXfXF



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    'Fonction de vérification si la cellule es fusionné (Fonction test)
     
    Function IsMerged(rCell As Range) As Boolean
    ' Returns true if referenced cell is Merged
        IsMerged = rCell.MergeCells
    End Function
     
     
     
    Sub CommandButton1_Click()
     
    Dim i As Integer
    Dim y As Integer
    Dim iMax As Integer
     
     
    'CONRAD : LUNDI 8 heures
        Dim lig As Long, col As Long
        lig = [A:A].Find(ComboBox1, LookIn:=xlValues, lookat:=xlWhole).Row
        col = [1:1].Find(ComboBox3, LookIn:=xlValues, lookat:=xlWhole).Column
     
        ' mettre valeur
        Cells(lig, col).Offset(, 1) = ComboBox2
        Cells(lig, col).Offset(, 2) = TextBox1
     
    'Vérification de cellules vide pour remplir le reste de la plage libre de la journée avec un Maximum de 8h à céduler
     
    iMax = lig + 7
    For y = lig To (lig + ComboBox2.Value) And (y <= iMax)
     
        If IsMerged(Cells(lig, col)) Then
     
            lig = lig + 1
     
        Else:
     
            Exit For
     
        End If
     
    Next
     
    'Boucle pour remplir la colonne Job et détail en fonction du nombre d'heures sélectionnés
     
    For i = 1 To ComboBox2.Value And (lig + ComboBox2.Value - 1) <= iMax
     
     
        With Cells(lig, col).Resize(i)
            ' fusionner
            .Merge
            .Value = ComboBox4.Value
            ' couleur
            Select Case ComboBox4
     
            Case "Client"
                .Interior.Color = RGB(153, 204, 255)
            Case "Location"
                .Interior.Color = RGB(255, 255, 0)
            Case "Vente"
                .Interior.Color = RGB(153, 204, 0)
            Case "Service"
                .Interior.Color = RGB(255, 204, 0)
            Case "Abscent"
               .Interior.Color = RGB(192, 192, 192)
     
            End Select
        End With
     
         With Cells(lig, col + 1).Resize(i)
             ' fusionner
             .Merge
             .Value = ComboBox4.Value
             ' couleur
             End With
     
              With Cells(lig, col + 2).Resize(i)
             ' fusionner
             .Merge
             .Value = TextBox1.Value
             ' couleur
     
        End With
    Next

Discussions similaires

  1. [XL-2013] Projet excel VBA Formulaire combobox
    Par clemence987 dans le forum Excel
    Réponses: 3
    Dernier message: 25/03/2015, 15h58
  2. Réponses: 12
    Dernier message: 26/01/2011, 12h26
  3. [XL-2007] VBA Formulaire Excel majuscules dans txtBox
    Par Cassivellaunos dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 26/09/2010, 18h13
  4. [XL-2007] Formulaire sous excel/VBA
    Par columbus033 dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 22/04/2009, 11h14
  5. [VBA-E] besoin d'aide excel et formulaire
    Par lolo_the_fripouille dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 01/04/2006, 07h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo