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 :

Exécution code VBA sur fichier déja rempli


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Juillet 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2012
    Messages : 6
    Par défaut Exécution code VBA sur fichier déja rempli
    Bonjour,
    Je viens enfin de finir la réalisation d'un code VBA (chose que je n'avais jamais fait) pour colorier une ligne selon le remplissage d'une cellule.
    Mon code fonctionne, si je rempli les cases maintenant. Mais mon fichier est déjà rempli et la coloration ne s'effectue pas sauf si je retape ce qu'il y a dans la cellule.

    Est-ce mon code qui n'est pas bon ou tout simplement est-ce qu'un code VBA n'est pas applicable sur de l'existant

    Je vous remercie par avance de votre aide

    Voici mon 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
    18
    19
    20
    21
    22
    23
    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim lig As Byte, plage As Range
     
    If Intersect(Target, Range("B21:C5000")) Is Nothing Then: Exit Sub
     
    lig = Target.Row
    Set plage = Range(Cells(lig, 1), Cells(lig, 8))
     
    Select Case Target
        Case Is = "D"
            plage.Interior.ColorIndex = 15
        Case Is = "NA"
            plage.Interior.ColorIndex = 16
        Case Is = "C"
            plage.Interior.ColorIndex = 10
        Case Is = "NC"
            plage.Interior.ColorIndex = 3
        Case Is = "AV"
            plage.Interior.ColorIndex = 42
        Case Else
            plage.Interior.ColorIndex = -4142
    End Select
    End Sub

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 186
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    C'est tout à fait normal, tu as mis ce code dans la procédure événementielle d'une feuille qui ne s'enclenche que si et seulemnt si l'on fait un changement d'une valeur dans une cellule de cette feuille.
    Il n'y a pas de miracle.
    Je n'ai pas vu avec quelle version tu travaillais mais tu sais que tu peux avoir le même résultat avec mise en forme immédiate et ce même si les données sont déjà encodées avec la mise en forme conditionnelle.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  3. #3
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Juillet 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2012
    Messages : 6
    Par défaut
    Merci Corona pour ta réponse.
    Je travail avec Excel 2007 (je me suis rendu compte après avoir posté que j'avais oublié de le mettre, j'ai fait un edit mais ca n'a pas l'air d'avoir fonctionné)
    Par contre où dois-je mettre mon code ou que dois-je modifier pour que cela fonctionne stp ?

  4. #4
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 186
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Si tu es en version 2007, pas besoin de VBA pour cela tu appliques la mise en forme conditionnelle (la version 2003 étant limitée à 3 conditions).
    Onglet [Accueil], groupe Style, clic sur Mise en forme conditionnelle et tu appliques autant de règles qu'il n'y a de conditions en choisissant Utiliser une formule pour déterminer pour quelles cellules le forma sera appliqué
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  5. #5
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Juillet 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2012
    Messages : 6
    Par défaut
    En fait j'utilisais de la mise en forme conditionnelle avant.
    Sauf que c'est un fichier pro qui me sert de base pour alimenter des fichiers clients et dès que je fait un copier/coller sur le fichier de mes clients ca rajoute une nouvelle fois des mises en forme conditionnelle sur le fichier du client juste pour la ligne que j'ai copié.
    Je voulais donc insérer ce code sur les fichiers de mes clients une seule fois et comme ca je ne suis plus embêter pour mes copier/coller.

  6. #6
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 186
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Le Copier/Collage Spécial Valeur ne convient pas pour cas là ?
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  7. #7
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Juillet 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2012
    Messages : 6
    Par défaut
    Non ca me prendrait trop de temps, le CTRL+V, CTRL+C étant tellement plus rapide.
    Et puis je n'ai pas que des valeurs a copier, j'ai aussi de la mise en forme interne et des commentaires sur les cellules.
    C'est pour ca que le code VBA me convenait bien.

  8. #8
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 186
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Non ca me prendrait trop de temps, le CTRL+V, CTRL+C étant tellement plus rapide.
    Rien ne t'empêche de créer un code VBA qui fait ce Collage Spécial/Valeur associé à un raccourci clavier par exemple Ctrl+Shift+V
    Et puis je n'ai pas que des valeurs a copier, j'ai aussi de la mise en forme interne et des commentaires sur les cellules.
    La mise en forme du classeur de destination est conservée y compris la mise en forme conditionnelle si l'on fait un Copier/Collage Special Valeur et l'on peu aussi faire un Copier/Collage Special Commentaire a intégrer également dans le code VBA.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  9. #9
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Juillet 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2012
    Messages : 6
    Par défaut
    OK pour un code VBA pour un collage spécial. Ca veut dire qu'il va encore falloir que je passe une journée à trouver comment faire le code

    Mais le code que j'avais créé il n'est pas possible de le "transformer" pour que ca fonctionne sur ce qui existe déjà et aussi sur ce qui sera fait par la suite ?

  10. #10
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 186
    Billets dans le blog
    53
    Par défaut
    Bonsoir,
    Citation Envoyé par Nanou84 Voir le message
    OK pour un code VBA pour un collage spécial. Ca veut dire qu'il va encore falloir que je passe une journée à trouver comment faire le code
    Mais le code que j'avais créé il n'est pas possible de le "transformer" pour que ca fonctionne sur ce qui existe déjà et aussi sur ce qui sera fait par la suite ?
    Une journée tout de même pas.
    Voici un exemple d'un code Copy/PasteSpecial Valeur + Commentaire (A adapter bien sûr) qui ne m'a pas pris plus de 15 minutes, enregistreur de macro, adaptation, + test
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub CopyPaste()
    ' CopyPaste par valeur + Commentaire
    ' Touche de raccourci du clavier: Ctrl+Shift+V
     With Selection
     .PasteSpecial Paste:=xlPasteValues
     .PasteSpecial Paste:=xlPasteComments
     End With
    End Sub
    Pour répondre à ta question
    Mais le code que j'avais créé il n'est pas possible de le "transformer" pour que ca fonctionne sur ce qui existe déjà et aussi sur ce qui sera fait par la suite ?
    Créer un code supplémentaire, à mon avis ajouter un For To ... Next ou un For Each In... Next pour vérifier si les conditions sont réunies par une boucle qui va parcourir chaque ligne de la base de données et vérifier si la ou les conditions sont remplies.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  11. #11
    Membre chevronné
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    181
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2011
    Messages : 181
    Par défaut
    Bonsoir,

    Peut-être une solution qui pourrait vous satisfaire, mais qui ne remplie pas les recommandations de Corona.

    A l'ouverture du fichier, un contrôle de la plage sera effectué et le "coloriage" si besoin.

    Pour ce faire, créer une Sub dans ThisWorkbook ;
    Pour ne pas surcharger le code, utiliser une partie commune située dans 1 Module ;
    Ce qui nous donnerait, pour la Sub que vous avez écrite.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Option Explicit
    Private Sub Worksheet_Change(ByVal Target As Range)
     
    If Not Intersect(Target, Range("B21:C5000")) Is Nothing Then
        Ligne = Target.Row
        c = Target.Address
        Set Plage = Range(Cells(Ligne, 1), Cells(Ligne, 8))
     
        Colorier
    End If
    End Sub
    Pour la partie commune mise dans 1 Module
    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
    Option Explicit
    Public Ligne As Integer, Plage As Range
    Public c As String
     
    Public Sub Colorier()
     
    Select Case Range(c)
        Case "D":   Plage.Interior.ColorIndex = 15
        Case "NA": Plage.Interior.ColorIndex = 16
        Case "C":   Plage.Interior.ColorIndex = 10
        Case "NC": Plage.Interior.ColorIndex = 3
        Case "AV": Plage.Interior.ColorIndex = 42
        Case Else: Plage.Interior.ColorIndex = -4142
    End Select
    End Sub
    Enfin à l'ouverture du fichier, dans This Workbook
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Option Explicit
     
    Private Sub Workbook_Open()
     
    For Each Plage In Range("B21:C5000")
        Ligne = Plage.Row
        c = Plage.Address
        Set Plage = Range(Cells(Ligne, 1), Cells(Ligne, 8))
     
        Colorier
    Next
    End Sub
    Cordialement

    [EDIT] un peu tard ...

  12. #12
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Juillet 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2012
    Messages : 6
    Par défaut
    Citation Envoyé par corona Voir le message
    Bonsoir,

    Une journée tout de même pas.
    Si si, une journée, je t'assure !!! Je n'y connais rien du tout en code donc google mon ami m'aide à trouver ce que je cherche et après quelques heures quand je ne trouve pas je me décide à poster sur un forum !!!
    Du coup j'avoue ne pas savoir où mettre tes "For To ... Next ou un For Each In... Next"

    Bonsoir,

    Peut-être une solution qui pourrait vous satisfaire
    Je viens d'essayer mais rien ne se passe.

    J'ai environ 20 onglets, est-ce que ca pourrait être du à ca ?

  13. #13
    Membre chevronné
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    181
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2011
    Messages : 181
    Par défaut
    Bonjour,

    Oui, en partie ... la mise à jour du "coloriage" ne se fait que sur l'onglet actif.

    De plus, en regardant de près, si une valeur dans un Range Bxx attribuait une couleur, celle-ci s'effaçait si la Range Cxx correspondante était vide.

    La correction est faite et fonctionne sur tous les onglets du classeur.

    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
    Private Sub Workbook_Open()
    Dim Ligne As Integer, plage As Range
    Dim c As String
    Dim Compteur As Byte, Modif As Boolean
    Dim Feuille As Byte
     
    Application.ScreenUpdating = False
    For Feuille = 1 To ThisWorkbook.Sheets.Count
        Compteur = 0: Modif = False
        With Sheets(Feuille)
            For Each plage In .Range("B21:C5000")
                Ligne = plage.Row
                c = plage.Address
                Set plage = .Range(.Cells(Ligne, 1), .Cells(Ligne, 8))
                Compteur = Compteur + 1
                If Compteur = 3 Then Compteur = 1: Modif = False
                If Not Modif Then
                    Select Case Sheets(Feuille).Range(c)
                        Case "D":   plage.Interior.ColorIndex = 15: Modif = True
                        Case "NA":  plage.Interior.ColorIndex = 16: Modif = True
                        Case "C":   plage.Interior.ColorIndex = 10: Modif = True
                        Case "NC":  plage.Interior.ColorIndex = 3: Modif = True
                        Case "AV":  plage.Interior.ColorIndex = 42: Modif = True
                        Case Else:  plage.Interior.ColorIndex = -4142
                    End Select
                End If
            Next
        End With
    Next
    Application.ScreenUpdating = True
    End Sub
    Ci-dessus est le code à mettre dans ThisWorkbook
    Vos codes restants les-mêmes que dans votre 1er post, je n'y touche pas.

  14. #14
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 186
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Citation Envoyé par Nanou84 Voir le message
    Si si, une journée, je t'assure !!! Je n'y connais rien du tout en code donc google mon ami m'aide à trouver ce que je cherche et après quelques heures quand je ne trouve pas je me décide à poster sur un forum !!!
    Du coup j'avoue ne pas savoir où mettre tes "For To ... Next ou un For Each In... Next"
    Je viens d'essayer mais rien ne se passe.
    J'ai environ 20 onglets, est-ce que ca pourrait être du à ca ?
    Le code que je t'ai proposé ne fait que te permettre de faire un CollageSpecial, Valeur + Commentaire, que j'avais associé aux touches de raccourcis Ctrl+Shift+V.
    Et comme je l'ai écrit, avec cette technique, cela conserve la mise en forme + la mise en forme conditionnelle des cellules de destination
    C'est pour répondre à ton post d'hier à 15h47
    Non ca me prendrait trop de temps, le CTRL+V, CTRL+C étant tellement plus rapide.
    Et puis je n'ai pas que des valeurs a copier, j'ai aussi de la mise en forme interne et des commentaires sur les cellules.
    C'est pour ca que le code VBA me convenait bien.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

Discussions similaires

  1. Pbm d'execution de code VBA sur fichier mde
    Par Aegnor dans le forum VBA Access
    Réponses: 5
    Dernier message: 30/07/2012, 16h54
  2. [Toutes versions] exécuter code VBA dans page HTML
    Par Antho87 dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 20/08/2009, 20h26
  3. [WD-2003] Recherche code vba destruction fichier
    Par vieuxmonsieur dans le forum VBA Word
    Réponses: 15
    Dernier message: 05/06/2009, 10h46
  4. Test de code VBA sur différentes versions d'Excel
    Par Fala fala dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 03/01/2008, 12h33
  5. Comment faire Copier/Coller par code VBA sur INTERNET...
    Par GESCOM2000 dans le forum Access
    Réponses: 5
    Dernier message: 02/01/2006, 14h19

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