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 :

Sélectionner une cellule contenant une date au format différent


Sujet :

Macros et VBA Excel

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    841
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 841
    Par défaut Sélectionner une cellule contenant une date au format différent
    Bonjour,

    La première feuille contient une cellule contenant une date au format "jj-mm-aa", je souhaiterai sélectionner la même date dans la deuxième feuille qui contient une plage cellules contenant des dates au format "jjj jj".

    Pour ce faire je sélectionne et modifie le format de cette plage de cellules :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Selection.NumberFormat = "m/d/yyyy"
    Et ensuite je rétabli le format de celle-ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Selection.NumberFormat = "ddd dd"
    Existe-t-il une meilleure solution ?

    Merci d’avance pour votre aide et réponse.

    Modus57

  2. #2
    Membre émérite
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2022
    Messages
    685
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Octobre 2022
    Messages : 685
    Par défaut
    Bonjour,

    si tu ne fais que sélectionner, je ne vois pas pourquoi il y a besoin de modifier le format.

    Il doit se passer autre chose entre tes deux Selection.NumberFormat qui doit nécessiter ou semble nécessiter de changer le format...

    Accessoirement le vba devrait rarement contenir des select et des selection. .

    Donc : dis nous en plus sur ce que tu veux faire avec cette date et qui ne marche pas si tu ne fais pas ces changements de format.

    Cordialement.

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    841
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 841
    Par défaut
    Bonjour, bonne heureuse année,

    Je me suis mal exprimé voilà ma solution :

    Le clic sur un bouton dans la Feuil1 recherche la date de la première cellule visible de la colonne 1 du tableau filtré et la sélectionne dans la Feuil2.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Dim Valeur_Cherchee As Date, MoisRecherche As String
     
        Valeur_Cherchee = Range("Formulaire").SpecialCells(xlCellTypeVisible).Cells(1, 1).Value 'Première cellule visible de la colonne 1 tableau filtré
        MoisRecherche = MonthName(Month(Valeur_Cherchee))
     
        Application.Goto Reference:=MoisRecherche
        Selection.NumberFormat = "m/d/yyyy"
        Selection.Find(what:=CDate(Valeur_Cherchee), After:=ActiveCell, LookIn:=xlValues).Activate
        ActiveCell.Interior.Color = 52879367
        Selection.NumberFormat = "ddd dd"
    Y en a-t-il d’autre ?

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    841
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 841
    Par défaut
    Bonjour,

    Un début d'année sans la moindre réponse.

  5. #5
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 127
    Par défaut
    Salut

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Valeur_Cherchee = Range("Formulaire")...
    Il vaudrait mieux préciser le classeur et la feuille sur lesquels tu travailles
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Valeur_Cherchee = ThisWorkBook.Worksheets(....).Range("Formulaire")...
    Pour ce qui est de ta recherche en elle-même, je ne comprends pas trop. Le format d'affichage d'une date n'a pas d'importance, si tu recherches le 3 Juillet 1990, peu importe le formatage que tu mets en place dans ta cellule, 3/7/1990, 03/07/90,.. ça reste la même date, tu ne devrais pas avoir à modifier quoi que ce soit pour la chercher. A moins que Find recherche une chaine et non une date.
    Dans ce cas, utilises plutôt Format() pour modifier la date que tu recherches avec find et lui donner le format "jj-jjjj"

    Plus globalement, il n'est pas utile de sélectionner une cellule ou un onglet pour modifier ou rechercher quelques choses dessus.
    Plutôt que de faire un goto, utilise ta référence pour pointer la cellule ou l'onglet

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Dim Valeur_Cherchee as Date
    Dim NextCell as Range
     
    Valeur_Cherchee  = ThisWorkBook.Worksheet("Feuil1").Range("Formulaire") '.....
     
    With ThisWorkBook.Worksheet("Feuil2").Range("Reference")
       Set NextCell = .Find(Valeur_Cherchee ,After:=.cells(1,1), LookIn:=xlValues) 'Essai comme ça avec la variable typée Date
       Set NextCell = .Find(Format(Valeur_Cherchee,"jj-jjjj") ,After:=.cells(1,1), LookIn:=xlValues) 'Sinon comme ça
       NextCell.Interior.Color = 52879367 
    End With
    Je n'ai pas testé le code, c'est un code de principe.

    [Edit]
    Bon ça m'intriguais, j'ai fait quelques essais.
    alors il faut utiliser xlFormulas et non xlValues... Sinon, en effet Find cherche dans ce qui est affiché et ne tient pas compte de la donnée brute.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     .Find(Valeur_Cherchee ,.cells(1,1), xlFormulas, xlWhole)
    [/Edit]
    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    841
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 841
    Par défaut
    Bonjour Qwazerty,

    J'ai testé votre code :

    Nom : Capture d’écran 2023-01-09 092309.jpg
Affichages : 198
Taille : 65,6 Ko

    Range("Formulaire") est un tableau structuré

    Ça bug

    Nom : Capture d’écran 2023-01-09 092455.jpg
Affichages : 181
Taille : 16,7 Ko

  7. #7
    Expert confirmé Avatar de hyperion13
    Homme Profil pro
    Webplanneur
    Inscrit en
    Octobre 2007
    Messages
    4 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Réunion

    Informations professionnelles :
    Activité : Webplanneur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 288
    Par défaut
    Salut
    Si vous n'avez pas de tableau structuré, déterminez le Range du tableau
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    With ThisWorkbook.Worksheet("formulaire")
        lastRow = .Cells(.Rows.Count, "A").End(xlUp).Row
        lastCol = .Cells(1, .Columns.Count).End(xlToLeft).Column
        Set rng = .Range(.Cells(1, 1), .Cells(lastRow, lastCol))
    End With

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    841
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 841
    Par défaut
    Bonjour hyperion13,

    Merci pour votre réponse j'en prends bonne note.

    J'ai un peu amélioré mon code en modifiant le format de la plage mois, mais dans l'obligation d'activer la feuille2 "Calendrier" et le mois "MoisRecherche", cette obligation à prime abord est incontournable si la macro est lancée depuis la feuille2 !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
        Dim Valeur_Cherchee As Date, MoisRecherche As String
        Valeur_Cherchee = Range("Formulaire").SpecialCells(xlCellTypeVisible).Cells(1, 1).Value 'Première cellule visible de la colonne 1 tableau filtré
        MoisRecherche = MonthName(Month(Valeur_Cherchee))
     
        Sheets("Calendrier").Range(MoisRecherche).NumberFormat = "m/d/yyyy"
        Sheets("Calendrier").Range(MoisRecherche).Activate
        Sheets("Calendrier").Range(MoisRecherche).Find(what:=CDate(Valeur_Cherchee), After:=ActiveCell, LookIn:=xlValues).Interior.Color = 52879367
        Sheets("Calendrier").Range(MoisRecherche).NumberFormat = "ddd dd"

  9. #9
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 127
    Par défaut
    Salut

    Pouvez-vous mettre un fichier démo à dispo, histoire de voir l'organisation exact.

    Si vous travaillez avec un tableau structuré, il est possible de le pointer via
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ThisWorkbook.worksheets("....").ListObjects("Formulaire")
    La propriété DataBodyRange représente la partie du tableau contenant les données, si données il y a, sinon cette propriété est à Nothing

    Vous pouvez faire quelque choses comme ça
    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
    Sub test()
    Dim aCell As Range
    Dim VariableX As Boolean
     
     
        '"Feuil1" est le codename de la feuille (ça marche pareil avec ThisWorkbook.Worksheets("NomDeL'Onglet")
        With Feuil1.ListObjects("Tableau1")
            If Not .DataBodyRange Is Nothing Then
                For Each aCell In .ListColumns("Col1").DataBodyRange.SpecialCells(xlCellTypeVisible)
                    If aCell.Value = 4 Then
                        'Code...
                        VariableX = True
                    End If
                Next
            End If
        End With
     
     
    End Sub
    Pour utiliser le codename des feuille, c'est ici
    Nom : 2015-01-18_134906.png
Affichages : 168
Taille : 14,2 Ko

    Il existe du tuto sur les tableaux structurés ainsi que des blogs, je pense à celui de Pierre fauconnier, vous pourriez y trouver des sources d'inspiration pour écrire votre code

    Attention avec les méthodes qui retourne un cellule, Find retourne une cellule... si elle en trouve une qui correspond, sinon c'est nothing et votre code va planter
    Sans parler de la fonction du code, n'oubliez pas de préciser sur quoi vous travaillez (il manque le classeur dans votre code)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Sheets("Calendrier").Range(MoisRecherche).NumberFormat = "m/d/yyyy"
    Sheets("Calendrier").Range(MoisRecherche).Activate
    Sheets("Calendrier").Range(MoisRecherche).Find(what:=CDate(Valeur_Cherchee), After:=ActiveCell, LookIn:=xlValues).Interior.Color = 52879367
    Sheets("Calendrier").Range(MoisRecherche).NumberFormat = "ddd dd"
    Ecrivez plutôt

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Dim aCellFinded as Range
       With ThisWorkbook.Sheets("Calendrier").Range(MoisRecherche)
          .NumberFormat = "m/d/yyyy"
          .Activate
          Set aCellFinded = .Find(what:=CDate(Valeur_Cherchee), After:=ActiveCell, LookIn:=xlValues)
          'On vérifie qu'un cellule a été trouvée
          If not acellfinded = nothing then
             acellFinded.Interior.Color = 52879367
          end if
          .NumberFormat = "ddd dd"
    Et à mon avis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Dim aCellFinded as Range
       With ThisWorkbook.Sheets("Calendrier").Range(MoisRecherche)
          '.NumberFormat = "m/d/yyyy"
          '.Activate
          Set aCellFinded = .Find(what:=Format(Valeur_Cherchee,"ddd dd"), After:=ActiveCell, LookIn:=xlValues)
          'On vérifie qu'un cellule a été trouvée
          If not acellfinded = nothing then
             acellFinded.Interior.Color = 52879367
          end if
          '.NumberFormat = "ddd dd"
    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  10. #10
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    841
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 841
    Par défaut
    Bonjour Qwarzety,

    Ci-joint mon fichier dépouillé au maximum pour une question de confidentialité.

    Quand j’exécute votre code :
    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
    Sub A_TestWeb()
        Dim Valeur_Cherchee As Date, MoisRecherche As String
        Valeur_Cherchee = Range("Formulaire").SpecialCells(xlCellTypeVisible).Cells(1, 1).Value 'Première cellule visible de la colonne 1 tableau filtré
        MoisRecherche = MonthName(Month(Valeur_Cherchee))
     
        Dim aCellFinded As Range
        With ThisWorkbook.Sheets("Calendrier").Range(MoisRecherche)
            .NumberFormat = "m/d/yyyy"
            '.Activate
            Set aCellFinded = .Find(what:=Format(Valeur_Cherchee, "ddd dd"), After:=ActiveCell, LookIn:=xlValues)
            'On vérifie qu'un cellule a été trouvée
            If Not aCellFinded Is Nothing Then
                aCellFinded.Interior.Color = 52879367
            End If
            .NumberFormat = "ddd dd"
        End With
    End Sub
    Ça bug ?
    Nom : Capture d’écran 2023-01-10 100140.jpg
Affichages : 205
Taille : 13,4 Ko
    En revanche avec mon code fonctionne :
    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
    Sub A_TestDate_2()
        Dim Valeur_Cherchee As Date, MoisRecherche As String
        Valeur_Cherchee = Range("Formulaire").SpecialCells(xlCellTypeVisible).Cells(1, 1).Value 'Première cellule visible de la colonne 1 tableau filtré
        MoisRecherche = MonthName(Month(Valeur_Cherchee))
     
    '    Application.Goto Reference:=MoisRecherche
    '    Selection.NumberFormat = "m/d/yyyy"
        Sheets("Calendrier").Range(MoisRecherche).NumberFormat = "m/d/yyyy"
    '    Selection.Find(what:=CDate(Valeur_Cherchee), After:=ActiveCell, LookIn:=xlValues).Activate
        Sheets("Calendrier").Activate
        Sheets("Calendrier").Range(MoisRecherche).Activate
        Sheets("Calendrier").Range(MoisRecherche).Find(what:=CDate(Valeur_Cherchee), After:=ActiveCell, LookIn:=xlValues).Activate
    '    Selection.NumberFormat = "ddd dd"
        Sheets("Calendrier").Range(MoisRecherche).NumberFormat = "ddd dd"
        TransfertFormulaireNote_1
    End Sub
    Merci pour votre participation @+

  11. #11
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 127
    Par défaut
    Salut

    Je ne vois pas de fichier joint, sans doute un oubli.

    C'est tout à fait possible que le code tel quel ne fonctionne pas, je n'ai pas pu le tester.
    Je pense que le problème vient de After:=ActiveCel, le mieux est de carrément supprimer de paramètre, sinon il faut lui faire pointer la 1er cellule de ta colonne où se trouvent les dates.

    Je continue à penser que tu t'embêtes pour rien, as-tu fait un essai avec xlFormulas comme indiqué au message n°5 ?

    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  12. #12
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    841
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 841
    Par défaut
    Voici le fichier que j'ai oublier de joindre.
    Navré @+
    Fichiers attachés Fichiers attachés

  13. #13
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 127
    Par défaut
    Salut

    Une solution

    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
    Sub A_TestWeb() 'lien 10-01-23 : https://www.developpez.net/forums/d2144014/logiciels/microsoft-office/excel/macros-vba-excel/selectionner-cellule-contenant-date-format-different/
        Dim Valeur_Cherchee As Date, MoisRecherche As String
        Dim LeMois As Byte, LeJour As Byte
        Dim aCellFinded As Range
     
        Valeur_Cherchee = Range("Formulaire").SpecialCells(xlCellTypeVisible).Cells(1, 1).Value 'Première cellule visible de la colonne 1 tableau filtré
        LeMois = Month(Valeur_Cherchee)
        LeJour = Day(Valeur_Cherchee)
     
        With ThisWorkbook.Sheets("Calendrier").Range("A4").Offset(LeJour, LeMois)
            .Interior.Color = 52879367
            .Worksheet.Activate
            .Select
        End With
    End Sub
    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  14. #14
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 127
    Par défaut
    Salut

    Sinon, une solution avec recherche avec un code plus robuste, ça donnerait ça
    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
    Sub A_TestWeb2() 'lien 10-01-23 : https://www.developpez.net/forums/d2144014/logiciels/microsoft-office/excel/macros-vba-excel/selectionner-cellule-contenant-date-format-different/    Dim Valeur_Cherchee As Variant, MoisRecherche As String
        Dim LeMois As Byte, LeJour As Byte
        Dim aCellFinded As Range
     
        'On pointe le tableau
        With Feuil1.ListObjects("Formulaire")
            'On vérifie qu'il a du contenu
            If .ListRows.Count > 0 Then
                'On regarde la date à rechercher
                Valeur_Cherchee = .DataBodyRange.SpecialCells(xlCellTypeVisible).Cells(1, 1).Value 'Première cellule visible de la colonne 1 tableau filtré
                'On vérifie qu'il s'agit d'une date valide
                If VarType(Valeur_Cherchee) And vbDate = vbDate Then
                    'On modifie la forme de la rrecherche
                    Valeur_Cherchee = Replace(Format(Valeur_Cherchee, "ddd dd"), ".", "")
                    'On pointe le calendrier
                    With Feuil2 'ThisWorkbook.Worksheets("Calendrier")
                        'On recherche la date
                        Set aCellFinded = .Range("Calendrier").Find(Valeur_Cherchee, LookIn:=xlValues, MatchCase:=False)
                        'On regarde si la cellule a été trouvée
                        If Not aCellFinded Is Nothing Then
                            'On la coloris
                            aCellFinded.Interior.Color = 52879367
                            'On active l'onglet
                            .Activate
                            'On selectionne la cellule
                            aCellFinded.Select
                        End If
                    End With
                End If
            End If
        End With
    End Sub
    'Il faudrait ajouter une gestion de application.screenupdating peut-être

    Vous pouvez aussi juste copier la date à rechercher dans un cellule cible de la feuille calendrier et vous en servir pour mettre une mise en forme automatique sur le calendrier pour colorier la cellule.

    Autre option, ajouter une colonne en mettant une formule Lien_hypertext qui pointe sur la cellule correspondante au décalage jour et mois (comme mon code précédent), un click sur le lien vous enverrais directement sur la bonne cellule du calendrier.

    Les deux dernières possibilités peuvent être mixées, la MFC pourrait directement prendre en compte la cellule A4 de formulaire, comme ça 0 VBA. Il est, à mon avis, plus profitable "d'épuiser" les options qu'offre Excel avant de passer à du VBA

    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  15. #15
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    841
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 841
    Par défaut
    Bonjour Qwazerty,

    Merci pour le temps que vous avez consacré à cette discussion et pour vos excellentes réponses.

    Je viens de tester votre solution du post #13 elle fonctionne très bien peu importe si la feuille est active ou pas.

    Vous pouvez aussi juste copier la date à rechercher dans un cellule cible de la feuille calendrier et vous en servir pour mettre une mise en forme automatique sur le calendrier pour colorier la cellule.
    Il est, à mon avis, plus profitable "d'épuiser" les options qu'offre Excel avant de passer à du VBA
    C’est très intéressant, en revanche pour le processus : dans la Feuil2 « Calendrier » une cellule contient la formule « =Formulaire!A4 », mais comment utiliser celle-ci pour colorier la cellule correspondante à cette date dans le calendrier ?

  16. #16
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 127
    Par défaut
    Salut

    Simplement en ajoutant une MFC (Mise En Forme Conditionnelle) sur l'ensemble de la zone calendrier.

    Pour la mettre ne place, il faut sélectionner la zone Calendrier, puis ajouter une MFC (Bandeau Accueil, section Styles, bouton Mise en Forme Conditionnelle)

    Nom : 2023-01-11_15h26_50.png
Affichages : 157
Taille : 73,0 Ko

    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  17. #17
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    841
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 841
    Par défaut
    Bonjour Qwazerty,

    Encore une fois merci pour votre contribution.

    Je préfère rechercher dans une cellule la valeur de la première cellule visible dans la colonne « Date » du tableau « Formulaire » filtré avec la formule suivante par exemple :
    =INDEX(Formulaire[[ DATE]];MIN(SI(SOUS.TOTAL(3;DECALER(Formulaire!A3;LIGNE(Formulaire[[ DATE]])-LIGNE(Formulaire!A3);0));LIGNE(Formulaire[[ DATE]])-LIGNE(Formulaire!A3)+1)))[/CODE]

    Plus tôt que d’avoir la formule « =Formulaire!A4 » dans cette même cellule, dans ces 2 cas c’est toujours une cellule qui sera coloriée.

    Ce n’est pas exactement ce que je veux faire, le but étant de conserver dans le calendrier les cellules coloriées équivalentes et en fonction de la date de la première cellule et première colonne du tableau « Formulaire » filtré, puis insérer un commentaire et copier dans celui-ci les données provenant du tableau.

    Nom : Capture d’écran 2023-01-12 085952.jpg
Affichages : 79
Taille : 11,2 Ko

    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
    Sub TransfertFormulaireNote_1()
        Dim rng As Range, ce As Range
        Dim r As Long, c As Integer
        Dim t As String
     
        Call SupprimeNote
        Set rng = Range("Formulaire").SpecialCells(xlCellTypeVisible)
        With rng
            For r = 1 To .Rows.Count
                For c = 1 To .Columns.Count
                    t = t & .Cells(r, c).Text & " "
                Next
                t = t & vbLf
            Next
        End With
        rng.ClearComments
        With ActiveCell
            .AddComment
            .Comment.Text Text:=t
            .Comment.Shape.TextFrame.AutoSize = True
        End With
        Set rng = Nothing:
        ActiveCell.Interior.Color = 52879367
    End Sub

Discussions similaires

  1. Réponses: 9
    Dernier message: 03/12/2022, 21h03
  2. [Tableur] Calc > Macro > Cibler une cellule contenant la date du jour.
    Par Clemaverick dans le forum Bureautique
    Réponses: 0
    Dernier message: 31/01/2021, 14h49
  3. Réponses: 1
    Dernier message: 08/07/2017, 14h35
  4. Réponses: 3
    Dernier message: 15/10/2014, 09h53
  5. Réponses: 1
    Dernier message: 24/03/2010, 11h49

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