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 :

Mise en forme d'une plage variable


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juillet 2014
    Messages : 10
    Par défaut Mise en forme d'une plage variable
    Bonjour,

    J'aimerai pouvoir écrire une macros capable d’effectuer la mise en forme suivante :

    J'ai un tableau qui s'étend de la ligne 5 à la ligne X (la taille du tableau va varier selon le projet), lorsque la cellule E contient un texte, les cases G et H de la même ligne devront avoir des bordure "xlmedium"

    Je suis débutant dans le domaine, et tout ce que j'ai appris se trouve sur les forums, seulement pour ce cas, les réponses que j'ai trouvé ne fonctionnent pas...

    les dernières cellules de mon tableau sont fixés ainsi "AFIN" "BFIN"... "HFIN" (du coup ma macros doit vérifier pour chaque ligne de mon tableau de E5 à EFIN, chaque cellule E contenant un texte, si il en contient un, alors j'applique la mise en forme).

    Je n'arrive pas a trouver un moyen de lier ma cellule E à G et à H

    Avez vous une idée ?

    (Je m'excuse d'avance si ce post ressemble à un déjà posté, mais puisque j'ai cherché et que je n'ai pas réussi a trouver de solution, je me permet un post)

    Merci d'avance.

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Bonjour,

    A mettre dans le module de la feuille :
    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
    50
    51
    52
    53
    54
    55
    56
    57
     
    Private Sub Worksheet_Change(ByVal Target As Range)
     
        If Target.Row >= 5 And Target.Column = 5 Then
     
            If Target.Value <> "" Then
     
                Bordurer Target.Offset(, 2)
                Bordurer Target.Offset(, 3)
     
            Else
     
                SuppBordure Target.Offset(, 2)
                SuppBordure Target.Offset(, 3)
     
            End If
     
        End If
     
    End Sub
     
    Sub Bordurer(Cel As Range)
     
        Dim I As Integer
     
        Application.ScreenUpdating = False
     
        For I = 7 To 10
     
            With Cel.Borders(I)
                .LineStyle = xlContinuous
                .Weight = xlMedium
            End With
     
        Next I
     
        Application.ScreenUpdating = True
     
    End Sub
     
    Sub SuppBordure(Cel As Range)
     
        Dim I As Integer
     
        Application.ScreenUpdating = False
     
        For I = 7 To 10
     
            With Cel.Borders(I)
                .LineStyle = xlNone
            End With
     
        Next I
     
        Application.ScreenUpdating = True
     
    End Sub
    Hervé.

  3. #3
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Je te déconseille l'utilisation d'une macro dans ce cas. Il sera plus simple d'utiliser une mise en forme conditionnelle.

    Tu sélectionnes la cellule G5.
    Ruban Accueil > Mise en forme conditionnelle > Nouvelle Règle > Utiliser une formule [...]
    Dans la zone de formule, tu tapes :
    Tu cliques sur le bouton Format et tu choisis l'encadré que tu souhaites.
    Clique sur Ok

    Ensuite, si tes cellules G5 à Hx sont vides, tu y copies la cellule G5.
    Si ce n'est pas le cas, tu sélectionnes G5.
    Ruban Accueil > Mise en forme conditionnelle > Gérer les Règles
    La règle que tu viens de créer devrais se trouver dans la liste.
    Tu modifie le champ "S'applique à" pour qu'elle concerne l'ensemble de tes cellules ($G$5:$H$x en remplaçant le x par ta dernière ligne).

  4. #4
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juillet 2014
    Messages : 10
    Par défaut
    Bonjour,

    Merci pour la macro,

    Cette ligne entraîne un Débogage

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
        If Target.Row >= 5 And Target.Column = 5 Then
    Du coup je l'ai remplacé par :

    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
     
     
    Dim Target As Range
     
    Range("E5:EFIN").Select
     
    For Each Target in Selection
     
     If Target.Value <> "" Then
     
                Bordurer Target.Offset(, 2)
                Bordurer Target.Offset(, 3)
     
            End If
     
       Next Target
     
    End Sub
     
    Sub Bordurer(Cel As Range)
     
        Dim I As Integer
     
        Application.ScreenUpdating = False
     
        For I = 7 To 10
     
            With Cel.Borders(I)
                .LineStyle = xlContinuous
                .Weight = xlMedium
            End With
     
        Next I
     
        Application.ScreenUpdating = True
     
    End Sub
    Pas besoin de mettre la fonction suppborder qui supprime les bordure des cases adjacentes.

    Merci du coup de main !

    Savez vous comment puis-je étendre cette macro à plusieurs classeurs ?
    Le but étant que d'autre personne que moi puisse lancer la macro sans avoir besoin d’accéder a VBA. (Il ne doit pas être possible de modifier les codes)

    Exemple :
    Dans le classeur 2 j'ai créé un bouton dans la barre d'outil auquel j'ai affecté la maccro Application.Run"'adressedelamacro'!macro". Ca fonctionne.
    Mais lorsque j'utilise ce bouton dans un classeur 3, un message d'erreur s'affiche me disant que la maccro d'appel (présent dans le classeur 2) n'est pas présent dans le classeur 3 (logique...)

    Avez vous une idée ?

    - Importer directement le module ?
    - Utiliser un Userform pour stocker le module et importer les classeurs a copier ? (possible, mais je sais pas comment importer un classeur entier...il y a 3 feuilles qui dépendent les unes des autres)

    J'essai d'avoir des idées, mais c'est pas évident, je ne connais pas les limites de VBA...

    Merci d'avance.

  5. #5
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par Megajav Voir le message
    Avez vous une idée ?
    Oui -> http://www.developpez.net/forums/d14...e/#post7907214

  6. #6
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juillet 2014
    Messages : 10
    Par défaut
    Bonjour,

    En fait, les classeurs sur lesquels je travail sont des classeurs exportés d'un autre logiciel, et pour chaque projet, je dois exporter ces donnés dans un tableau excel, puis effectuer une mise en forme pour l'envoyer à mes collaborateurs.

    Comme il y a des projets ou je dois exporter 15 classeurs ou plus, l'idée était de créer une macro qui effectue la mise en forme automatiquement pour que ça me prenne le moins de temps possible et aussi pour éviter les erreurs de mise en forme.

    La mise en forme "G et H ont des bordure en gras si E contient un texte" n'est qu'une partie de la mise en forme.

    Le faire avec une mise en forme conditionnelle prendrait plus de temps, et devrait être effectuer à chaque fois, pour chaque projet..?

    Merci d'avance

Discussions similaires

  1. Pb de mise en forme dans une liste de selection
    Par crashyear dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 07/09/2006, 11h58
  2. changer la mise en forme d'une partie d'un textarea
    Par gedeon555 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 16/08/2006, 11h48
  3. vb6 & excel : mise en forme d'une cellule
    Par couscoussier dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 23/03/2006, 18h12
  4. Sauvegarder une mise en forme dans une RichTextBox
    Par jacma dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 29/12/2005, 12h19
  5. [VB.NET] Mise en forme d'une datagrid suivant une valeur
    Par Nesmontou dans le forum ASP.NET
    Réponses: 7
    Dernier message: 17/06/2005, 11h51

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