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 :

Changer de référence de feuille selon date du jour [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Membre éprouvé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2007
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 896
    Points : 984
    Points
    984
    Par défaut Changer de référence de feuille selon date du jour
    Bonjour à tous,

    A l'aide du code suivant et selon se qui se trouve dans la Combo (Cb3), des sommes s'affichent dans les TextBox (T4,T5,T8). Ces sommes se trouvent dans la feuille "Données" du Classeur.
    Ces sommes changent à partir du 1er juillet et doivent donc faire référence à partir de cette date à une nouvelle feuille "Données2" du même classeur.
    Comment faire pour que automatiquement du 1er janvier au 30 juin les données soient prises dans la feuille "Données" et qu'ensuite du 1er juillet au 31 décembre dans la feuille "Données2". La date se trouve dans le TextBox "T2" au format "dddd d mmmm yyyy".
    J'ai mis le code que j'ai actuellement, je dois donc y ajouter ces 2 conditions et c'est là que je coince. Pouvez-vous m'apporter votre aide s'il vous plait ?
    Je vous en remercie par avance

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Private Sub Cb3_Change()
    Dim cell As Range
        If Me.Cb3.Value <> "" Then
            For Each cell In Sheets("Données").Range("B2:F57")
                If UCase(Left(cell.Text, Len(Cb3.Text))) = UCase(Cb3.Text) Then
                    Me.T4.Text = cell.Offset(0, 2).Text
                    Me.T5.Text = cell.Offset(0, 1).Text
                    Me.T8.Text = cell.Offset(0, 5).Text
                    Exit Sub
                End If
            Next
        End If
    End Sub
    J’entends et j’oublie,
    Je vois et je me souviens,
    Je fais et je comprends.
    Confucius

  2. #2
    Membre habitué Avatar de Basicnav
    Profil pro
    Inscrit en
    Février 2008
    Messages
    245
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Février 2008
    Messages : 245
    Points : 193
    Points
    193
    Par défaut
    Bonjour,

    sans me pencher plus sur le problème, si tu mets un SELECTCASE dans ton if avec comme condition la date supérieure ou inférieure, tu peux changer tes référence de feuilles non ?

    sans doute un peu simpliste mais peut-être une voie à explorer.
    on ne parvient jamais à bien jouir de soi sans le recours d'autrui
    JJ Rousseau

    http://funz.labrute.fr/

  3. #3
    Membre éprouvé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2007
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 896
    Points : 984
    Points
    984
    Par défaut
    Bonjour,

    Je pensais ajouter 2 conditions du genre

    Si T2 est compris entre le 1/1 et le 30/6 alors se référer aux données de "Données" et si T2 est compris entre le 1/7 et le 31/12 alors "Données2".

    Mais ça j'ai du mal à l'écrire. J'essaie de mon côté si vous avez une idée !
    Merci
    J’entends et j’oublie,
    Je vois et je me souviens,
    Je fais et je comprends.
    Confucius

  4. #4
    Membre habitué Avatar de Basicnav
    Profil pro
    Inscrit en
    Février 2008
    Messages
    245
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Février 2008
    Messages : 245
    Points : 193
    Points
    193
    Par défaut
    un truc du genre

    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
     
    Dim madate as Date
    Dim maFeuille as string
     
    If Me.Cb3.Value <> "" Then
    Select Case madate
        CASE 1/1 to 30/06
        maFeuille = Donnée
        CASE 1/07 to 31/12
        maFeuille = Donnée2
            For Each cell In Sheets("&maFeuille&").Range("B2:F57")
                If UCase(Left(cell.Text, Len(Cb3.Text))) = UCase(Cb3.Text) Then
                    Me.T4.Text = cell.Offset(0, 2).Text
                    Me.T5.Text = cell.Offset(0, 1).Text
                    Me.T8.Text = cell.Offset(0, 5).Text
    ...
    Attention, la syntaxe n'y est pas, je n'ai hélas pas le temps de vérifier...
    je te renvoie au forum, désolé de ne pas pouvoir t'aider plus que ça
    on ne parvient jamais à bien jouir de soi sans le recours d'autrui
    JJ Rousseau

    http://funz.labrute.fr/

  5. #5
    Membre éprouvé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2007
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 896
    Points : 984
    Points
    984
    Par défaut
    Merci BasicNav je vais poursuivre dans ta lancée et je te donne le code complet dès que ça marche.
    J’entends et j’oublie,
    Je vois et je me souviens,
    Je fais et je comprends.
    Confucius

  6. #6
    Membre éprouvé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2007
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 896
    Points : 984
    Points
    984
    Par défaut
    Bonjour à tous,

    Tout d'abord permettez moi de vous présenter tous mes voeux de santé de bonheur et de prospérité pour cette nouvelle année.

    Je souhaiterai avoir votre avis sur ce code. Est-ce que la codification est bonne car cela ne marche pas chez moi, rien ne se passe.

    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
     
    Private Sub Cb3_Change()
    Dim Cell As Range
    Dim MaDate As Date
    Dim MaFeuille As String
     
    MaDate = T2.Value 'date obtenue par saisie dans la TextBox
     
    If Me.Cb3.Value <> "" Then 'si la date de T2 est comprise entre le 1/1 et 31/6 alors prendre les données dans la feuille "Données"
        Select Case MaDate
            Case 1 / 1 To 31 / 6
            MaFeuille = Données
     
            Case 1 / 7 To 31 / 12 'si la date de T2 est comprise entre le 1/7 et 31/12 alors prendre les données dans la feuille "Données2"
     
            MaFeuille = Données2
     
            For Each Cell In Sheets("MaFeuille").Range("B2:F57")
                If UCase(Left(Cell.Text, Len(Cb3.Text))) = UCase(Cb3.Text) Then
                    Me.T4.Text = Cell.Offset(0, 2).Text
                    Me.T5.Text = Cell.Offset(0, 1).Text
                    Me.T8.Text = Cell.Offset(0, 5).Text
                    Exit Sub
                End If
            Next
        End If
    End Sub
    Merci pour votre aide car je n'y arrive pas seul

    J'ai fait un test alors une erreur apparait sur la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    MaDate = T2.Value 'date obtenue par saisie dans la TextBox
    Le format de T2 est : "T2.Value = Format(T2.Tag, "dddd d mmmm yyyy")"
    Incompatibilité de type. Lorsque je passe la souris sur cette ligne le résultat est : "MaDate="Lundi 4 janvier 2010"" - Si je passe la souris sur la ligne " Dim MaDate As Date" le résultat est :"Date=04-01-2010".
    Le problème vient donc de là (je présume), que dois-je faire ?
    J’entends et j’oublie,
    Je vois et je me souviens,
    Je fais et je comprends.
    Confucius

  7. #7
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Bonjour,
    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
    Private Sub Cb3_Change()
    Dim sht As Worksheet
    Dim cell As Range
     
    If Month(CDate(Me.T2.Value)) < 7 Then
        Set sht = Sheets("Données")
    Else
        Set sht = Sheets("Données2")
    End If
     
    If Me.Cb3.Value <> "" Then
        For Each cell In sht.Range("B2:F57")
            If UCase(Left(cell.Text, Len(Cb3.Text))) = UCase(Cb3.Text) Then
                Me.T4.Text = cell.Offset(0, 2).Text
                Me.T5.Text = cell.Offset(0, 1).Text
                Me.T8.Text = cell.Offset(0, 5).Text
                Exit Sub
            End If
        Next
    End If
    Set sht = Nothing
    End Sub
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  8. #8
    Membre éprouvé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2007
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 896
    Points : 984
    Points
    984
    Par défaut
    Citation Envoyé par mercatog Voir le message
    Bonjour,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    If Month(CDate(Me.T2.Value)) < 7 Then
    Bonjour et merci Mercatog,

    J'ai mis ton code en place mais il y a une incompatibilité de type sur cette ligne

    Le format de T2 est : "T2.Value = Format(T2.Tag, "dddd d mmmm yyyy")" l'erreur peut-elle provenir de ce format ?
    J’entends et j’oublie,
    Je vois et je me souviens,
    Je fais et je comprends.
    Confucius

  9. #9
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Et si forcer MaDate (comme tu l'as testé)
    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
    Private Sub Cb3_Change()
    Dim sht As Worksheet
    Dim cell As Range
    Dim MaDate As Date
     
    If Me.Cb3.Value <> "" Then
        MaDate = T2.Value
        If Month(MaDate) < 7 Then
            Set sht = Sheets("Données")
        Else
            Set sht = Sheets("Données2")
        End If
     
        For Each cell In sht.Range("B2:F57")
            If UCase(Left(cell.Text, Len(Cb3.Text))) = UCase(Cb3.Text) Then
                Me.T4.Text = cell.Offset(0, 2).Text
                Me.T5.Text = cell.Offset(0, 1).Text
                Me.T8.Text = cell.Offset(0, 5).Text
                Exit For
            End If
        Next
    End If
        Set sht = Nothing
    End Sub
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  10. #10
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2009
    Messages
    944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vosges (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 944
    Points : 1 282
    Points
    1 282
    Par défaut
    Bonjour et bonne année à tous

    Je pense que le problème vient de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "T2.Value = Format(T2.Tag, "dddd d mmmm yyyy")"
    En effet, suite à cette instruction T2 ne contient plus une date mais du texte.
    Frédéric
    Développeur d'Applications Access

  11. #11
    Membre éprouvé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2007
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 896
    Points : 984
    Points
    984
    Par défaut
    Toujours le même message d'erreur sur la même ligne.

    Bonjour fgiambelluco,

    Merci pour cette info. Mais comment je résoud ce problème ?
    J'ai essayé en mettant T2.Text mais rien n'y fait.
    Cordialement
    J’entends et j’oublie,
    Je vois et je me souviens,
    Je fais et je comprends.
    Confucius

  12. #12
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2009
    Messages
    944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vosges (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 944
    Points : 1 282
    Points
    1 282
    Par défaut
    Re
    Commece par supprimer la ligne T2.Value = Format(T2.Tag, "dddd d mmmm yyyy") de façon à garder une date dans la zone de texte T2.
    Frédéric
    Développeur d'Applications Access

  13. #13
    Membre éprouvé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2007
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 896
    Points : 984
    Points
    984
    Par défaut
    C'est fait, mais l'erreur persiste.
    Lorsque je mets la souris sur MaDate la réponse est 00:00:00
    J’entends et j’oublie,
    Je vois et je me souviens,
    Je fais et je comprends.
    Confucius

  14. #14
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Par quoi est alimentée ta TextBox T2?
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  15. #15
    Membre éprouvé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2007
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 896
    Points : 984
    Points
    984
    Par défaut
    par la date du jour à ce format (lundi 4 janvier 2010), mais cette zone peut être modifiée par l'utilisateur
    J’entends et j’oublie,
    Je vois et je me souviens,
    Je fais et je comprends.
    Confucius

  16. #16
    Membre éprouvé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2007
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 896
    Points : 984
    Points
    984
    Par défaut
    J'ai remplacé les formats mais rien n'y fait ça beugue toujours.

    J'en avais oublié un.
    J'ai donc transformé le format T2 "dddd d mmmm yyyy" en T2 "dd mmmm yyyy" et cela à l'air de fonctionner.

    Merci à tous pour vos lumières et encore bonne année à tous
    J’entends et j’oublie,
    Je vois et je me souviens,
    Je fais et je comprends.
    Confucius

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

Discussions similaires

  1. Renommer fichier selon date du jour
    Par stade13 dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 14/02/2013, 11h34
  2. Requête selon date du Jour
    Par lanainejulie dans le forum Langage SQL
    Réponses: 5
    Dernier message: 18/04/2011, 12h06
  3. Réponses: 2
    Dernier message: 09/12/2009, 17h51
  4. changer de feuille selon la volonter de l'utilisateur
    Par swissmade dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 06/07/2007, 16h46

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