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 :

Ligne en couleur sur procédure existante


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Femme Profil pro
    Inscrit en
    Février 2012
    Messages
    243
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 243
    Par défaut Ligne en couleur sur procédure existante
    Bonjour à tous
    J'ai une procédure qui me reformate complètement un 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
     
    Sub FORMAT_STATS_BDD()
     
     
        '----------------------------------------
        ' -- LANCE MACRO MISE EN FORME TABLEAU --
        '----------------------------------------
     
        Selection.CurrentRegion.Select
        Application.Run "PERSONAL.XLSB!tableau"
     
     
        '----------------------------------------
        ' -- RENOMINATION DES COLONNES ET MEF  --
        '----------------------------------------
     
        Range("A1").Select
        ActiveCell.FormulaR1C1 = "ID"
        Range("B1").Select
        ActiveCell.FormulaR1C1 = "CHANTIER"
        Range("C1").Select
        ActiveCell.FormulaR1C1 = "STATUT" 
        .... etc ....
    je souhaiterais pouvoir ajouter à cette procédure une fonction
    qui me permet de mettre en surbrillance toute la ligne à partir d'une cellule active.
    Cette fonction fonctionne très bien seule, mais ne marcher pas quand j'essaie de l'appeler ou de l'ajouter au code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
     
      Set champ = Range("A13:CZ2000")
      If Not Intersect(champ, Target) Is Nothing And Target.Count = 1 Then
         champ.Interior.ColorIndex = xlNone
         col1 = champ.Column
         col2 = col1 + champ.Columns.Count - 1
         Range(Cells(Target.Row, col1), Cells(Target.Row, col2)).Interior.ColorIndex = 40
     
      End If
    End Sub
    Pourriez-vous me conseiller pour que je puisse l'utiliser une fois le formatage de mon tableau
    effectué ; dans l'idée
    1. je récupère mes données brutes
    2. je lance ma macro FORMAT_STATS_BDD()
    3. une fois ma macro effectuée la fonction de surbrillance de ligne s'applique sur le classeur

    je précise que tout est enregistré dans les macros personnelles
    Merci d'avance pour votre aide précieuse
    Belle journée à tous

    Benoit

  2. #2
    Expert confirmé
    Homme Profil pro
    retraité
    Inscrit en
    Juin 2012
    Messages
    3 438
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : retraité
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juin 2012
    Messages : 3 438
    Par défaut
    Bonjour,

    Ceci devrait convenir:
    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
    Option Explicit
     
    Sub FORMAT_STATS_BDD()
        Selection.CurrentRegion.Select
        Application.Run "PERSONAL.XLSB!tableau"
        Range("A1") = "ID"
        Range("B1") = "CHANTIER"
        Range("C1") = "STATUT"
        '.... etc ....
    End Sub
     
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
        Dim champ As Range
        Set champ = Range("A13:CZ2000")
        champ.Interior.ColorIndex = xlNone
        If Target.Count = 1 And Not Intersect(champ, Target) Is Nothing Then
            Range("A" & Target.Row & ":CZ" & Target.Row).Interior.ColorIndex = 40
        End If
    End Sub
    Toujours utiliser Option Explicit, cela permet d'éviter beaucoup d'ennuis stupides liés à de simples erreurs de frappe.
    Cordialement.

  3. #3
    Membre confirmé
    Femme Profil pro
    Inscrit en
    Février 2012
    Messages
    243
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 243
    Par défaut Re :
    Bonjour et merci pour la réponse
    J'ai inséré au tout début "option explicit"
    Puis ma macro de mise en forme
    Puis la macro de surlignement

    Seule la macro de mise en forme fonctionne

  4. #4
    Membre Expert
    Avatar de pijaku
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 817
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2010
    Messages : 1 817
    Billets dans le blog
    10
    Par défaut
    Bonjour,

    La procédure Private Sub Worksheet_SelectionChange(ByVal Target As Range) est une procédure événementielle de Feuille.
    Il convient donc de placer ce code ... dans le module de la feuille concernée.

    2 possibilités :
    1- Alt+F11 Dans la fenêtre explorateur de projet, double clic sur le nom de la feuille.
    2- Clic droit sur l'onglet de la feuille concernée / visualiser le code.

    Puis coller le code dans la fenêtre de code.

  5. #5
    Membre confirmé
    Femme Profil pro
    Inscrit en
    Février 2012
    Messages
    243
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 243
    Par défaut Re :
    Effectivement cela marche très bien.

    Le problème c'est qu'un fichier excel nommé Stat_salaries est généré automatiquement depuis une base access
    Donc l'idée était que je puisse tout le temps appeler ma macro (sans être obligé à chaque fois de la copier-coller depuis le classeur de macro perso)
    car le fichier change très souvent.
    Après je peux essayer de faire une macro qui va me chercher la procédure dans le fichier de macros perso et qui me la colle dans la feuille active
    mais je ne pense pas que cela fonctionne

  6. #6
    Membre Expert
    Avatar de pijaku
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 817
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2010
    Messages : 1 817
    Billets dans le blog
    10
    Par défaut
    Tu peux écrire du code, par le code...

    Exemple :
    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
    Sub Appel()
    Dim maFeuille As Worksheet
       Set maFeuille = Workbooks("Classeur11.xlsm").Worksheets("Feuil1") 'la feuille ou tu veux insérer le code
       EcrireMacro(maFeuille)
    End Sub
     
    Private Sub EcrireMacro(ws As Worksheet)
    Dim Wb As Workbook, i As Integer, Ligne(1 To 8) As String
        Set Wb = ws.Parent
    Ligne(1) = "Private Sub Worksheet_SelectionChange(ByVal Target As Range)"
    Ligne(2) = "    Dim champ As Range"
    Ligne(3) = "    Set champ = Range(""A13:CZ2000"")"
    Ligne(4) = "    champ.Interior.ColorIndex = xlNone"
    Ligne(5) = "    If Target.Count = 1 And Not Intersect(champ, Target) Is Nothing Then"
    Ligne(6) = "       Range(""A"" & Target.Row & "":CZ"" & Target.Row).Interior.ColorIndex = 40"
    Ligne(7) = "    End If"
    Ligne(8) = "End Sub"
        For i = LBound(Ligne) To UBound(Ligne)
            Wb.VBProject.VBComponents(ws.CodeName).CodeModule.InsertLines i + 3, Ligne(i)
        Next i
    End Sub

Discussions similaires

  1. Réponses: 2
    Dernier message: 24/04/2008, 10h14
  2. Réponses: 3
    Dernier message: 03/10/2007, 13h04
  3. changement de couleur sur les lignes d'un tableau
    Par brasco06 dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 13/04/2006, 18h03
  4. Réponses: 8
    Dernier message: 17/05/2005, 18h08

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