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 :

Comment actualiser automatiqument une colonne ?


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2011
    Messages : 16
    Par défaut Comment actualiser automatiqument une colonne ?
    Bonjour,
    J'ai une fonction en VBA sur Excel qui me permet de changer la police d'écriture d'une cellule en fonction de son résultat :
    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
    Private Sub Worksheet_Change(ByVal Target As Range)
    Application.ScreenUpdating = False
    ActiveSheet.Unprotect Password:="MDP"
        If Target.Count = 1 Then
            If Target.Column = 32 Then
                Select Case Target.Value
                    Case "ok"
                        Target.EntireRow.Interior.Color = vbGreen
                    Case "Partiel"
                        Target.EntireRow.Interior.Color = vbYellow
                    Case "-"
                        Target.EntireRow.Interior.Color = vbRed
                    Case Else
                        Target.EntireRow.Interior.ColorIndex = xlNone
                End Select
            ElseIf Target.Column = 30 Then
                Select Case Target.Offset(0, 6).Value
                    Case "Aujourd'hui"
                        Target.Offset(0, 6).Font.Name = "Times New Roman"
                        Target.Offset(0, 6).Font.Bold = True
                        Target.Offset(0, 6).Font.Color = vbBlue
                    Case "Passée"
                        Target.Offset(0, 6).Font.Name = "Times New Roman"
                        Target.Offset(0, 6).Font.Bold = True
                        Target.Offset(0, 6).Font.ColorIndex = 46    'Orange
                    Case Else
                        Target.Offset(0, 6).Font.Name = "Arial"
                        Target.Offset(0, 6).Font.Bold = False
                        Target.Offset(0, 6).Font.Color = vbDark
                End Select
           ElseIf Target.Column = 31 Then
                Select Case Target.Offset(0, 8).Value
                    Case "Aujourd'hui"
                        Target.Offset(0, 8).Font.Name = "Times New Roman"
                        Target.Offset(0, 8).Font.Bold = True
                        Target.Offset(0, 8).Font.Color = vbBlue
                    Case "Passée"
                        Target.Offset(0, 8).Font.Name = "Times New Roman"
                        Target.Offset(0, 8).Font.Bold = True
                        Target.Offset(0, 8).Font.ColorIndex = 46    'Orange
                    Case Else
                        Target.Offset(0, 8).Font.Name = "Arial"
                        Target.Offset(0, 8).Font.Bold = False
                        Target.Offset(0, 8).Font.Color = vbDark
                End Select
           End If
        End If
        ActiveSheet.Protect Password:="MDP"
    End Sub
    Le problème est que les cellules dont je modifie la mise en forme (colonne 36 et 39) ont leurs résultats qui varient en fonction de la date (aujourdhui()), ce résultat se réactualise en même temps que la date (aujourdhui()), mais pas leur mise en forme, je suis donc obligé de faire F2-Entrer sur les colonnes 30 et 31 pour actualiser la mise en forme des colonnes 36 et 39.
    La touche F9 ne change rien.
    Et comme les résultats contenus en colonnes 36 et 39 proviennent d’une fonction Excel (classique) et que ces cellules sont de plus protégées, je ne peux pas utiliser Worksheet_Change.

  2. #2
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2011
    Messages : 16
    Par défaut
    J'ai trouvé ceci sur un forum :
    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 test()
    Dim C As Range, T As Double
    With Worksheets("Feuil1")
    .Select
    Application.ScreenUpdating = False
    For Each C In .Range("A1:A20")
    SendKeys "{F2}" & "~"
    C.Select
    C.NumberFormat = "General"
    T = Timer + 1 / 10000
    Do While Timer <= T
    DoEvents
    Loop
    Next
    Application.ScreenUpdating = True
    End With
    End Sub
    La personne qui la posté indique :
    Tu dois déclencher ce code à partir de l'interface de la feuille de calcul obligatoirement.
    Comme la procédure utilise "Select" la feuille désirée doit être la feuille active.
    J'ai donc adapté a mon cas comme ceci :
    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
    Private Sub CommandButton1_Click()
    Dim C As Range, T As Double
        With Worksheets("Feuil4")
        .Select
        Application.ScreenUpdating = False
            For Each C In .Range("AD:AD")
            SendKeys "{F2}" & "~"
            C.Select
            C.NumberFormat = "General"
            T = Timer + 1 / 10000
                Do While Timer <= T
                DoEvents
                Loop
            Next
            For Each C In .Range("AE:AE")
            SendKeys "{F2}" & "~"
            C.Select
            C.NumberFormat = "General"
            T = Timer + 1 / 10000
                Do While Timer <= T
                DoEvents
                Loop
            Next
        Application.ScreenUpdating = True
        End With
    End Sub
    Mais lorsque je clique sur le bouton (CommandButton1) rien ne se passe avec le code placé dans ThisWorkBook
    Si je le met dans "Feuil4" j’obtiens une erreur : "L'indice n'appartient pas à la sélection"

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 105
    Par défaut
    Bonjour,
    Tu peux utiliser l'évènement Open ou Activate de ta feuille pour mettre à jour ton classeur.

    @+

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2011
    Messages : 16
    Par défaut
    Oui je pense que c'est possible, quoi qu'il en soit j'ai opté pour simplification de ma feuille de travail.
    Pour ce qui sont intéressés j'ai tout de même réussit à trouver comment arranger le code afin d'actualiser quelque cellules a partir d'un bouton :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub CommandButton1_Click()
        Dim c As Range
        For Each c In Range("AD1:AD2").Cells
            c.Select
            SendKeys "{F2}" & "~"
            T = Timer + 1 / 10000
            Do While Timer <= T
            DoEvents
            Loop
        Next
    End Sub
    Ensuite j'ai mit le code directement dans ma feuille 4.

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

Discussions similaires

  1. [WD11] comment inserer automatiquement des colonnes dans une table
    Par incomparable dans le forum WinDev
    Réponses: 3
    Dernier message: 31/08/2009, 13h51
  2. [c#] comment rendre invisble une colonne d'un datagrid
    Par meteor4 dans le forum Windows Forms
    Réponses: 2
    Dernier message: 19/07/2005, 16h26
  3. Réponses: 5
    Dernier message: 19/04/2005, 09h46
  4. Comment détecté automatiquement Une base erronée.
    Par ada_b dans le forum Débuter
    Réponses: 4
    Dernier message: 13/01/2005, 07h56
  5. Réponses: 10
    Dernier message: 19/05/2004, 15h44

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