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 :

inscrire un "g" dans les cellules situées entre 2 dates provenant d'un UserForm


Sujet :

Macros et VBA Excel

  1. #1
    Membre habitué Avatar de goninph
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2013
    Messages : 725
    Points : 184
    Points
    184
    Par défaut inscrire un "g" dans les cellules situées entre 2 dates provenant d'un UserForm
    Bonjour,

    J'ai un planning, lorsque je clique dans une cellule située en-dessous de la ligne 49 le Userform USF_Planification s'affiche (voir image).

    Si la cellule active n'a pas de "g" le label date de début est complété avec la valeur de la date de la ligne 49.

    Lorsque je clique sur OK, j'aimerai que toutes les cellules comprises entre les dates de début et de fin soient complétées par "g", sauf les weekend et les jours fériés.

    J'ai réussi à placer le premier "g", mais j'ai besoin de votre aide pour placer les autres "g"

    Merci pour votre précieuse collaboration
    Philippe

    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
    Option Explicit
    Dim LigneCelluleActive As Variant
    Dim ColonneCelluleActive As Variant
    Dim Ligne_49 As Variant
    Dim Colonne_A As Variant
    Dim Colonne_C As Variant
    Dim Colonne_E As Variant
    Private Sub Btn_Calculer_Date_de_fin_Click()
    Dim Start_Date As Date, DateFin As Date, Days As Long, Week As String, Holydays As Range
        If LabelDateDebut = "" Then
            MsgBox "La date début doit être complétée.", vbInformation, "! Oups ! Action interrompue"
        Else
            If MsgBox("Remplacer la date de fin ?", vbYesNo + vbQuestion, "Calculer la date de fin") = vbYes Then
                Start_Date = LabelDateDebut
                    If TextBoxDuree = "" Then
                        LabelDateFin = LabelDateDebut
                        LabelJourSemDebut = Format(LabelDateDebut, "ddd") 'Afficher le jour de la semaine devant la date
                        LabelJourSemFin = Format(LabelDateFin, "ddd") 'Afficher le jour de la semaine devant la date
                    Else
                        Days = TextBoxDuree 'nombre de jour
                        Week = "0000011"
    On Error GoTo Description_erreur 'Si problème avec jours fériés
                        Set Holydays = Sheets("DATA Jours Fériés").Range("Jours_Feries_Ponts") 'Vérifier les dates dans le tableau de la feuille DATA
                        DateFin = CDate(Application.WorkDay_Intl(Start_Date, Days, Week, Holydays))
                        LabelDateFin = DateFin
                        LabelJourSemDebut = Format(LabelDateDebut, "ddd") 'Afficher le jour de la semaine devant la date
                        LabelJourSemFin = Format(LabelDateFin, "ddd") 'Afficher le jour de la semaine devant la date
                End If 'Fin du calcul de la date de fin si la date de début existe
            End If
        End If
    Exit Sub
    Description_erreur:
                    MsgBox _
                    vbCrLf & vbCrLf & _
                    "- Il y a un problème avec le tableau des jours fériés." & vbCrLf & vbCrLf & _
                    "- Erreur VBA : " & vbCrLf & "  " & Err.Description & vbCrLf & vbCrLf & _
                    "", vbExclamation, "! Oups ! Action interrompue"
    End Sub
    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
    Private Sub Label_Ecart_Date_en_jrs_Click()
    Dim Start_Date As Date, DateFin As Date, Days As Long, Week As String, Holydays As Range, Duree As Variant
        If LabelDateDebut = "" Or LabelDateFin = "" Then
            MsgBox "Les dates de début et de fin doivent être complétées.", vbInformation, "! Oups ! Action interrompue"
        Else
            Start_Date = LabelDateDebut
            DateFin = LabelDateFin
            Week = "0000011"
     On Error GoTo Description_erreur 'Si problème avec jours fériés
            Set Holydays = Sheets("DATA Jours Fériés").Range("Jours_Feries_Ponts") 'Vérifier les dates dans le tableau de la feuille DATA
            Duree = WorksheetFunction.NetworkDays_Intl(Start_Date, DateFin, Week, Holydays) - 1
            Label_Ecart_Date_en_jrs.Caption = Duree
        End If
    Exit Sub
    Description_erreur:
                    MsgBox _
                    vbCrLf & vbCrLf & _
                    "- Il y a un problème avec le tableau des jours fériés." & vbCrLf & vbCrLf & _
                    "- Erreur VBA : " & vbCrLf & "  " & Err.Description & vbCrLf & vbCrLf & _
                    "", vbExclamation, "! Oups ! Action interrompue"
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub Btn_Feries_Click()
        Unload Me
            Sheets("DATA Jours Fériés").Select
        Range("A1").Select
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub LabelDateDebut_Click()
        USF_Calendar_Planif_Debut.Show
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub LabelDateFin_Click()
        USF_Calendar_Planif_Fin.Show
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub LabelJourSemDebut_Click()
        USF_Calendar_Planif_Debut.Show
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub LabelJourSemFin_Click()
        USF_Calendar_Planif_Fin.Show
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub TextBoxDuree_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger) 'Autorise la saisie de certains caractères
    Select Case KeyAscii
                    Case 48 To 57        'Accepte de 0 à 9
        Case Else
            KeyAscii = 0
    End Select
    End Sub
    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
    Private Sub UserForm_Initialize()
    Dim PlageDeRecherche As Variant
    Dim Trouve As Variant
    Dim AdresseTrouvee As Variant
    Dim ID_et_indice_du_CFC As String
    Dim ID_du_CFC As String
        Ligne_49 = 49
        Colonne_A = 1
        Colonne_C = 3
        LigneCelluleActive = ActiveCell.Row
            ID_et_indice_du_CFC = Cells(LigneCelluleActive, Colonne_A).Value
            ID_du_CFC = Left(ID_et_indice_du_CFC, InStr(ID_et_indice_du_CFC, "-") - 1) 'Extraire ID du CFC
            ID_et_indice_du_CFC = ID_du_CFC & "-10001"
    'Rechercher et sélectionner la cellule contenant ID
            Set PlageDeRecherche = ActiveSheet.Columns(1)
            Set Trouve = PlageDeRecherche.Cells.Find(what:=ID_et_indice_du_CFC, LookAt:=xlWhole) 'Ne pas masquer la plage de recherche sinon ne trouve pas
    'traitement de l'erreur possible : Si on ne trouve rien :
                    If Trouve Is Nothing Then
                    'ici, traitement pour le cas où la valeur n'est pas trouvée
                        MsgBox ID_du_CFC & " La recherche demandée n'éxiste pas.", vbExclamation, "! Oups ! Action interrompue"
                    Else
                        'ici, traitement pour le cas où la valeur est trouvée
                        AdresseTrouvee = Trouve.Address
                LabelCFC.Caption = Range(AdresseTrouvee).Offset(rowOffset:=0, columnOffset:=12)
            End If
            FrameDate.Caption = "Nous sommes le " & Format(Now, "dddd dd.mm.yyyy")
        If ActiveCell = "" Then
            ColonneCelluleActive = ActiveCell.Column
            LabelDateDebut = Cells(Ligne_49, ColonneCelluleActive).Value
            LabelJourSemDebut = Format(LabelDateDebut, "ddd") 'Afficher le jour de la semaine devant la date
            LabelDateFin = Cells(Ligne_49, ColonneCelluleActive).Value
            LabelJourSemFin = Format(LabelDateFin, "ddd") 'Afficher le jour de la semaine devant la date
        End If
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub BT_Annuler_Click()
        Unload Me
    End Sub
    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
     
    Private Sub BT_OK_Click()
    Dim Trouve As Range
    Dim PlageDeRecherche As Range
    Dim Cellule_debut As Range
    Dim Valeur_Cherchee As Variant
    Dim AdresseTrouvee As String
    Dim ColonneTrouvee As Variant
    Dim Adresse_du_texte As Variant
        Colonne_E = 5
            Valeur_Cherchee = CDate(LabelDateDebut)
                Set PlageDeRecherche = ActiveSheet.Range("BE49:AKD49") 'Important!!! pour les dates ou les nombres = Format de cellule ajuster au texte
                Set Trouve = PlageDeRecherche.Find(what:=Valeur_Cherchee, LookIn:=xlValues, LookAt:=xlWhole)
                'traitement de l'erreur possible : Si on ne trouve rien :
                If Trouve Is Nothing Then
                    'ici, traitement pour le cas où la valeur n'est pas trouvée
                    MsgBox "La date recherchée n'éxiste pas dans le planning.", vbExclamation, "! Oups ! Action interrompue"
                Else
                    'ici, traitement pour le cas où la valeur est trouvée
                    Range("BE" & ActiveCell.Row & ":AKD" & ActiveCell.Row).ClearContents  'Effacer l'ancienne planification
                    ColonneTrouvee = Trouve.Column
                    LigneCelluleActive = ActiveCell.Row
                    Adresse_du_texte = Cells(LigneCelluleActive, Colonne_E).Address
                    Cells(LigneCelluleActive, ColonneTrouvee) = "g"
                    Cells(LigneCelluleActive, ColonneTrouvee - 1).Formula = "=" & Adresse_du_texte
                    Cells(LigneCelluleActive, ColonneTrouvee - 1).Font.Name = "Calibri"
     
     
     
     
                End If
        Unload Me
    End Sub
    Nom : 2019-09-09_18-03-57.png
Affichages : 202
Taille : 61,3 Ko

  2. #2
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Bonjour.

    Je ne sais pas comment tu fais la correspondance entre les date et les colonnes mais le code pourrait être :

    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
    dim iCol as long:iCol=TaPremierColone
     
    dim iDate as date
     
    for iDate = TaDateDebut to TaDateFin
     
        if weekday(iDate, vbMonday)<>6 or weekday(iDate, ,vbMonday)<>7 then
     
             'Ici vérifier si c'est un jour ferié
             if not EstJourFerie(iDate) then
                  'Ici le code pour mettre le g.
             end if
     
        end if
     
        iCol=ICol+1
    next iDate
    Pour les jours féries, il faut faire une fonction ou utiliser l'option de Excel qui se base sur une liste des jours fériés dans une feuille.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  3. #3
    Membre habitué Avatar de goninph
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2013
    Messages : 725
    Points : 184
    Points
    184
    Par défaut
    Bonsoir,

    Je ne sais pas comment tu fais la correspondance entre les date et les colonnes : Toutes les dates sont dans la ligne 49

    Merci, alors pour les jour fériés, j'utilise déjà
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Set Holydays = Sheets("DATA Jours Fériés").Range("Jours_Feries_Ponts") 'Vérifier les dates dans le tableau de la feuille DATA
    CDate(Application.WorkDay_Intl(Start_Date, Days, Week, Holydays))
    Question :
    pour le 'Ici le code pour mettre le g. je dois coder quoi ? Cells.value = "g"

  4. #4
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Bonjour.

    Question :
    pour le 'Ici le code pour mettre le g. je dois coder quoi ? Cells.value = "g"
    Oui, pour la partie Jour Férié je ne comprends pas ce que ta fonction retourne (et je n'ai pas le temps de chercher) mais il faut que tu trouves un moyen que cela te donne Vrai/Faux pour ensuite pouvoir décider si tu dois ou non mettre le "g".

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  5. #5
    Membre expérimenté Avatar de Transitoire
    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Décembre 2017
    Messages
    724
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Auditeur informatique

    Informations forums :
    Inscription : Décembre 2017
    Messages : 724
    Points : 1 454
    Points
    1 454
    Par défaut
    Bonjour, "Cells.value = "g""ne renseigne pas l'adresse de la cellule, je vous propose soit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ActiveCell.value = "g" ' dans le cas ou vous avez sélectionné la cellule à renseigner
    Cells(1, 2).value = "g" si vous n'avez pas sélectionné la dite cellule. En sachant que les valeurs(1, 2) doivent être remplacés par les vôtres
    Cordialement
    On a deux vies, la deuxième commence quand on se rend compte qu'on n'en a qu'une.
    Confucius

  6. #6
    Membre habitué Avatar de goninph
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2013
    Messages : 725
    Points : 184
    Points
    184
    Par défaut
    Bonjour,

    J'ai réussi grâce à tous vos conseils, je vous remercie.

    Maintenant je dois encore intégrer les weekend et jours fériés, j'ai déja un tableau runissant les jours fériés, mais là je sèche help me please

    En résumé, le début de la boucle est donné par LabelDateDebut et la fin par LabelDateFin.
    L'initialisation de l'userform se provoque au clic sur une cellule en dessous de la ligne 49.
    Lors du clic sur le bouton ok, faut chercher les dates ouvrées dans la ligne 49, ce qui donnera la colonne et si la dates est ouvrée écrire un "g" dans la même collone de la ligne active.
    Dans la colonne située devant la série de "g", une formule est déposée pour répéter le texte des travaux écrit dans la colonne "E"

    Merci pour votre aide
    Meilleures salutations
    Philippe

    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
    Private Sub BT_OK_Click()
    Dim Trouve As Range
    Dim PlageDeRecherche As Range
    Dim Cellule_debut As Range
    Dim Valeur_Cherchee As Variant
    Dim AdresseTrouvee As String
    Dim ColonneTrouvee As Variant
    Dim Adresse_du_texte As Variant
    Colonne_E = 5
        If LabelDateDebut <> "" Then
            Range("BE" & ActiveCell.Row & ":AKD" & ActiveCell.Row).ClearContents  'Effacer l'ancienne planification
    'Placement du texte des travaux devant la planification, cellule avant le premier "g"
            Valeur_Cherchee = CDate(LabelDateDebut)
        'Recherche depuis la colonne BF pour ne pas écrire le texte des travaux dans la colonne BD "Durée"
                Set PlageDeRecherche = ActiveSheet.Range("BF49:AKD49") 'Important!!! pour les dates ou les nombres = Format de cellule ajuster au texte
                Set Trouve = PlageDeRecherche.Find(what:=Valeur_Cherchee, LookIn:=xlValues, LookAt:=xlWhole)
                    If Trouve Is Nothing Then
                        'ici, traitement pour le cas où la valeur n'est pas trouvée
                        MsgBox "La date recherchée n'éxiste pas dans le planning.", vbExclamation, "! Oups ! Action interrompue"
                    Else
                        'ici, traitement pour le cas où la valeur est trouvée
                    ColonneTrouvee = Trouve.Column
                    LigneCelluleActive = ActiveCell.Row
                    Adresse_du_texte = Cells(LigneCelluleActive, Colonne_E).Address
                    Cells(LigneCelluleActive, ColonneTrouvee) = "g"
                    Cells(LigneCelluleActive, ColonneTrouvee - 1).Formula = "=" & Adresse_du_texte
                    Cells(LigneCelluleActive, ColonneTrouvee - 1).Font.Name = "Calibri"
                End If 'de trouve la colonne pour le texte des travaux
    'Placement des "g"
                For Valeur_Cherchee = CDate(LabelDateDebut) To CDate(LabelDateFin)  'définir le début et la fin de la boucle
                    'Recherche depuis la colonne BF pour ne pas écrire le texte des travaux dans la colonne BD "Durée"
                    Set PlageDeRecherche = ActiveSheet.Range("BF49:AKD49") 'Important!!! pour les dates ou les nombres = Format de cellule ajuster au texte
                    Set Trouve = PlageDeRecherche.Find(what:=Valeur_Cherchee, LookIn:=xlValues, LookAt:=xlWhole)
                        If Trouve Is Nothing Then
                            'ici, traitement pour le cas où la valeur n'est pas trouvée
                            MsgBox "La date recherchée n'éxiste pas dans le planning.", vbExclamation, "! Oups ! Action interrompue"
                        Else
                            'ici, traitement pour le cas où la valeur est trouvée
                            ColonneTrouvee = Trouve.Column
                            LigneCelluleActive = ActiveCell.Row
                            Adresse_du_texte = Cells(LigneCelluleActive, Colonne_E).Address
                            Cells(LigneCelluleActive, ColonneTrouvee) = "g"
                            Cells(LigneCelluleActive, ColonneTrouvee).Font.Name = "Webdings"
                        End If 'de trouve
                Next Valeur_Cherchee    'relance la boucle
            Else 'de If LabelDateDebut <> "" Then
                Range("BE" & ActiveCell.Row & ":AKD" & ActiveCell.Row).ClearContents  'Effacer l'ancienne planification
        End If
    Unload Me
    End Sub

  7. #7
    Membre habitué Avatar de goninph
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2013
    Messages : 725
    Points : 184
    Points
    184
    Par défaut
    J'ai réussi avec les weekend à la ligne 42

    Manque plus que les fériés listés dans mon tableau



    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
    Private Sub BT_OK_Click()
    Dim Trouve As Range
    Dim PlageDeRecherche As Range
    Dim Cellule_debut As Range
    'Dim Holydays As Range
    'Dim Week As String
    'Dim Days As Long
    Dim Valeur_Cherchee As Variant
    Dim AdresseTrouvee As String
    Dim ColonneTrouvee As Variant
    Dim Adresse_du_texte As Variant
    Colonne_E = 5
        If LabelDateDebut <> "" Then
            Range("BE" & ActiveCell.Row & ":AKD" & ActiveCell.Row).ClearContents  'Effacer l'ancienne planification
    'Placement du texte des travaux devant la planification, cellule avant le premier "g"
            Valeur_Cherchee = CDate(LabelDateDebut)
        'Recherche depuis la colonne BF pour ne pas écrire le texte des travaux dans la colonne BD "Durée"
                Set PlageDeRecherche = ActiveSheet.Range("BF49:AKD49") 'Important!!! pour les dates ou les nombres = Format de cellule ajuster au texte
                Set Trouve = PlageDeRecherche.Find(what:=Valeur_Cherchee, LookIn:=xlValues, LookAt:=xlWhole)
                    If Trouve Is Nothing Then
                        'ici, traitement pour le cas où la valeur n'est pas trouvée
                        MsgBox "La date recherchée n'éxiste pas dans le planning.", vbExclamation, "! Oups ! Action interrompue"
                    Else
                        'ici, traitement pour le cas où la valeur est trouvée
                        ColonneTrouvee = Trouve.Column
                        LigneCelluleActive = ActiveCell.Row
                        Adresse_du_texte = Cells(LigneCelluleActive, Colonne_E).Address
                        Cells(LigneCelluleActive, ColonneTrouvee) = "g"
                        Cells(LigneCelluleActive, ColonneTrouvee - 1).Formula = "=" & Adresse_du_texte
                        Cells(LigneCelluleActive, ColonneTrouvee - 1).Font.Name = "Calibri"
                    End If 'de trouve la colonne pour le texte des travaux
    'Placement des "g"
                For Valeur_Cherchee = CDate(LabelDateDebut) To CDate(LabelDateFin)  'définir le début et la fin de la boucle
                    'Recherche depuis la colonne BF pour ne pas écrire le texte des travaux dans la colonne BD "Durée"
                    Set PlageDeRecherche = ActiveSheet.Range("BF49:AKD49") 'Important!!! pour les dates ou les nombres = Format de cellule ajuster au texte
                    Set Trouve = PlageDeRecherche.Find(what:=Valeur_Cherchee, LookIn:=xlValues, LookAt:=xlWhole)
                        If Trouve Is Nothing Then
                            'ici, traitement pour le cas où la valeur n'est pas trouvée
                            MsgBox "La date recherchée n'éxiste pas dans le planning.", vbExclamation, "! Oups ! Action interrompue"
                        Else
                            'ici, traitement pour le cas où la valeur est trouvée
                            If Weekday(Valeur_Cherchee, vbMonday) > 5 Then  'vérifier si c'est un week-end
                                'ne rien faire si c'est un weekend
                            Else
                                ColonneTrouvee = Trouve.Column
                                LigneCelluleActive = ActiveCell.Row
                                Adresse_du_texte = Cells(LigneCelluleActive, Colonne_E).Address
                                Cells(LigneCelluleActive, ColonneTrouvee) = "g"
                                Cells(LigneCelluleActive, ColonneTrouvee).Font.Name = "Webdings"
                            End If 'si weekend
                        End If 'de trouve pour le placement des "g"
                Next Valeur_Cherchee    'relance la boucle
            Else 'de If LabelDateDebut <> "" Then
                Range("BE" & ActiveCell.Row & ":AKD" & ActiveCell.Row).ClearContents  'Effacer l'ancienne planification
        End If
    Unload Me
    End Sub

  8. #8
    Membre habitué Avatar de goninph
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2013
    Messages : 725
    Points : 184
    Points
    184
    Par défaut
    Bonjour et merci à tous, tout fonctionne, une merveille ...

    Meilleures salutations
    Philippe

    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
    Private Sub BT_OK_Click()
    Dim Trouve As Range
    Dim PlageDeRecherche As Range
    Dim Holydays As Variant
    Dim Cellule_debut As Range
    Dim TrouveHolydays As Range
    Dim Valeur_Cherchee As Variant
    Dim AdresseTrouvee As String
    Dim ColonneTrouvee As Variant
    Dim Adresse_du_texte As Variant
    Colonne_E = 5
        If LabelDateDebut <> "" Then
            Range("BE" & ActiveCell.Row & ":AKD" & ActiveCell.Row).ClearContents  'Effacer l'ancienne planification
    'Placement du texte des travaux devant la planification, cellule avant le premier "g"
            Valeur_Cherchee = CDate(LabelDateDebut)
                'Recherche depuis la colonne BF pour ne pas écrire le texte des travaux dans la colonne BD "Durée"
                Set PlageDeRecherche = ActiveSheet.Range("BF49:AKD49") 'Important!!! pour les dates ou les nombres = Format de cellule ajuster au texte
                Set Trouve = PlageDeRecherche.Find(what:=Valeur_Cherchee, LookIn:=xlValues, LookAt:=xlWhole)
                    If Trouve Is Nothing Then
                        'si la date n'est pas trouvée
                        MsgBox "La date recherchée n'éxiste pas dans le planning.", vbExclamation, "! Oups ! Action interrompue"
                    Else
                        'ici, traitement pour le cas où la valeur est trouvée
                        ColonneTrouvee = Trouve.Column
                        LigneCelluleActive = ActiveCell.Row
                        Adresse_du_texte = Cells(LigneCelluleActive, Colonne_E).Address(RowAbsolute:=False, ColumnAbsolute:=True)  'pour supprimer les $
                        Cells(LigneCelluleActive, ColonneTrouvee) = "g"
                        Cells(LigneCelluleActive, ColonneTrouvee - 1).Formula = "=" & Adresse_du_texte
                        Cells(LigneCelluleActive, ColonneTrouvee - 1).Font.Name = "Calibri"
                    End If 'de trouve la colonne pour le texte des travaux
    'Placement des "g" que dans les jours ouvrés
                For Valeur_Cherchee = CDate(LabelDateDebut) To CDate(LabelDateFin) 'définir le début et la fin de la boucle
                    'Recherche depuis la colonne BF pour ne pas écrire le texte des travaux dans la colonne BD "Durée"
                    Set PlageDeRecherche = ActiveSheet.Range("BF49:AKD49") 'Important!!! pour les dates ou les nombres = Format de cellule ajuster au texte
                    Set Trouve = PlageDeRecherche.Find(what:=Valeur_Cherchee, LookIn:=xlValues, LookAt:=xlWhole)
                        If Trouve Is Nothing Then
                            'si la date n'est pas trouvée
                            MsgBox "La date recherchée n'éxiste pas dans le planning.", vbExclamation, "! Oups ! Action interrompue"
                        Else 'si la date est trouvée
                            'vérifier si c'est un week-end
                                If Weekday(Valeur_Cherchee, vbMonday) > 5 Then
                                    'ne rien faire si c'est un weekend
                                Else
                                'vérifier si c'est un jour férié
                                    Set Holydays = Sheets("DATA Jours Fériés").Range("Jours_Feries_Ponts")
                                    Set TrouveHolydays = Holydays.Find(what:=Format(Valeur_Cherchee, "dddd dd mmmm yyyy"), LookIn:=xlValues, LookAt:=xlWhole)
                                        If TrouveHolydays Is Nothing Then
                                        'si la date n'est ni un weekend ni un jour férié
                                            ColonneTrouvee = Trouve.Column
                                            LigneCelluleActive = ActiveCell.Row
                                            Adresse_du_texte = Cells(LigneCelluleActive, Colonne_E).Address
                                            Cells(LigneCelluleActive, ColonneTrouvee) = "g"
                                            Cells(LigneCelluleActive, ColonneTrouvee).Font.Name = "Webdings"
                                End If 'si jour férié
                            End If 'si weekend
                        End If 'de trouve pour le placement des "g"
                Next Valeur_Cherchee 'relance la boucle
            Else 'de If LabelDateDebut <> "" Then
                Range("BE" & ActiveCell.Row & ":AKD" & ActiveCell.Row).ClearContents  'Effacer l'ancienne planification
        End If
    Unload Me
    End Sub

  9. #9
    Membre habitué Avatar de goninph
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2013
    Messages : 725
    Points : 184
    Points
    184
    Par défaut
    Encore une question :

    Je n'arrive pas à trouver la code correct pour remplacer la ligne 49 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Cells(LigneCelluleActive, ColonneTrouvee - 1).Formula = "=" & Adresse_du_texte
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Cells(LigneCelluleActive, ColonneTrouvee - 1).Formula = "= SUBSTITUE(" & Adresse_du_texte & "; CAR(10); " - ")"
    Merci et meilleures salutations
    Philippe

  10. #10
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Bonjour.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "= SUBSTITUE(" & Adresse_du_texte & "; CAR(10); "" - """)"
    Pour mettre un guillemet dans du texte, il faut le doubler.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  11. #11
    Membre habitué Avatar de goninph
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2013
    Messages : 725
    Points : 184
    Points
    184
    Par défaut
    Bonjour

    Ok, mais ça plante toujours ...

    Merci pour votre aide
    Philippe


    Citation Envoyé par marot_r Voir le message
    Bonjour.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "= SUBSTITUE(" & Adresse_du_texte & "; CAR(10); "" - """)"
    Pour mettre un guillemet dans du texte, il faut le doubler.

    A+

  12. #12
    Membre habitué Avatar de goninph
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2013
    Messages : 725
    Points : 184
    Points
    184
    Par défaut
    Helllo,

    Trouvé

    Merci à tous
    Philippe

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Cells(LigneCelluleActive, ColonneTrouvee - 1).Formula = "= SUBSTITUTE(" & Adresse_du_texte & ", CHAR(10), "" - "")"

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Quote et double quote dans les requêtes paramétrées
    Par michel.souris dans le forum WinDev
    Réponses: 5
    Dernier message: 07/06/2013, 10h27
  2. Les doubles quotes dans les fprintf
    Par Changedman dans le forum C
    Réponses: 30
    Dernier message: 22/02/2007, 12h07
  3. Changement de couleur dans les cellules d'un tableau
    Par allowen dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 03/11/2005, 14h52
  4. [JTable] centrer les donnees dans les cellules
    Par cmoa59 dans le forum Composants
    Réponses: 5
    Dernier message: 20/05/2005, 11h35
  5. Alignement dans les cellules d'un tableau
    Par philippef dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 23/02/2005, 12h15

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