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 :

Macro de mise en forme selon l'information de la cellule active


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
    Technicien
    Inscrit en
    Février 2023
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Technicien

    Informations forums :
    Inscription : Février 2023
    Messages : 13
    Par défaut Macro de mise en forme selon l'information de la cellule active
    Bonjour tout le monde !

    Je suis nouveau sur le forum et je tiens à préciser que je n'ai pas de bases en programmation. Ainsi je m'excuse si mon problème parait ridicule mais je dois avouer que j'y ai passé littéralement des heures ^^'

    Je souhaiterai faire une macro d'une mise en forme qui mette en évidence les doublons etc au sein d'une colonne.
    Mes données sont déjà regroupés "par paquet" d'un premier critère (identifiants). J'ai deux autres critères (une colonne combinaison et une autre score). Au sein de chaque paquet peut se se trouver des lignes avec des identifiants et des combinaisons identiques mais des scores différents. Je vais devoir supprimer les lignes avec les scores les plus faibles. Cependant une combinaison peut se trouver au sein de plusieurs identifiants.
    Evidemment si c'était pas le cas j'aurai tout simplement mis en forme les doublons de combinaisons !
    Ainsi je suis obligé de repasser à chaque fois dans mise en forme et changer la cellule sélectionnée pour faire en évidence les doublons au sein de chaque groupe d'identifiant.

    Or je voudrais juste aller sur une cellule et faire une touche raccourci pour mettre en forme si le contenu de cette cellule est multiple sans repasser par l'onglet mise en forme.
    Bien sûr je n'ai pas le niveau et je ne vais pas vous demander de faire un programme avec des boucles avec trois conditions.

    J'ai enregistré une macro de mise en forme qui colore en vert les doublons de la combinaison contenus dans la cellule I4. Mais je ne réussis pas à remplacer correctement pas à faire référence à la cellule active. Pourtant j'ai tout essayé avec ActiveCell mais ça plante toujours... Et oui il y a certainement que deux lignes à changer.

    Voici la MACRO en question ci-dessous. Merci d'avance de votre aide !

    Sub Macro11()
    '
    ' Macro11 Macro
    ' Mettre en vert les doublons
    '

    '

    Application.CutCopyMode = False
    Application.CutCopyMode = False
    Cells.FormatConditions.Delete
    Columns("I:I").Select
    Range("I4").Activate
    Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlEqual, _
    Formula1:="=$I$4"
    Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
    With Selection.FormatConditions(1).Interior
    .PatternColorIndex = xlAutomatic
    .ThemeColor = xlThemeColorAccent6
    .TintAndShade = 0.799981688894314
    End With
    Selection.FormatConditions(1).StopIfTrue = False
    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 176
    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 176
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Mais je ne réussis pas à remplacer correctement pas à faire référence à la cellule active
    L'objet représentant la cellule active est tout simplement ActiveCell

    [EDIT]

    Procédure qui renvoie l'adresse complète de la plage sélectionnée (Selection) soit $B$4:$D$10 + Nom du classeur & Nom de la feuille et de la cellule active (ActiveCell) soit $B$4 + Nom du classeur & Nom de la feuille correspondant à l'illustration.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub t()
      Dim t As String
      t = "Adresse des cellules"
      t = t & vbCrLf & "Sélection = " & Selection.Address(External:=True)
      t = t & vbCrLf & "Cellule active = " & ActiveCell.Address(External:=True)
      MsgBox t
    End Sub
    Illustration
    Nom : 230210 ActiveCell.png
Affichages : 68
Taille : 12,1 Ko
    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 habitué
    Homme Profil pro
    Technicien
    Inscrit en
    Février 2023
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Technicien

    Informations forums :
    Inscription : Février 2023
    Messages : 13
    Par défaut
    Citation Envoyé par Philippe Tulliez Voir le message
    Bonjour,

    L'objet représentant la cellule active est tout simplement ActiveCell

    [EDIT]

    Procédure qui renvoie l'adresse complète de la plage sélectionnée (Selection) soit $B$4:$D$10 + Nom du classeur & Nom de la feuille et de la cellule active (ActiveCell) soit $B$4 + Nom du classeur & Nom de la feuille correspondant à l'illustration.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub t()
      Dim t As String
      t = "Adresse des cellules"
      t = t & vbCrLf & "Sélection = " & Selection.Address(External:=True)
      t = t & vbCrLf & "Cellule active = " & ActiveCell.Address(External:=True)
      MsgBox t
    End Sub
    Illustration
    Nom : 230210 ActiveCell.png
Affichages : 68
Taille : 12,1 Ko

    Bonjour Philippe

    Merci de ta réponse.


    Juste pour être sûr de comprendre... Normalement si je remplace juste par ActiveCell aux deux lignes où sont marqués I4 et $I$4 cela suffit il ? Ou je dois faire référence au classeur et à la feuille ?

    Sub Macro12()
    '
    ' Macro12 Macro
    '

    '
    Application.CutCopyMode = False
    Application.CutCopyMode = False
    Cells.FormatConditions.Delete
    Columns("I:I").Select
    Range("ActiveCell").Activate
    Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlEqual, _
    Formula1:="= ActiveCell"
    Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
    With Selection.FormatConditions(1).Interior
    .PatternColorIndex = xlAutomatic
    .ThemeColor = xlThemeColorAccent6
    .TintAndShade = 0.799981688894314
    End With
    Selection.FormatConditions(1).StopIfTrue = False
    End Sub



    J'obtient ce message d'erreur en exécutant comme tel...

    Erreur d'exécution '1004':
    La méthode 'Range' de l'objet '_Global' a échoué

    Et toute ma colonne est sélectionnée sans rien de plus.


    Merci d'avance

  4. #4
    Membre habitué
    Homme Profil pro
    Technicien
    Inscrit en
    Février 2023
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Technicien

    Informations forums :
    Inscription : Février 2023
    Messages : 13
    Par défaut
    Citation Envoyé par Philippe Tulliez Voir le message
    Bonjour,

    L'objet représentant la cellule active est tout simplement ActiveCell

    [EDIT]

    Procédure qui renvoie l'adresse complète de la plage sélectionnée (Selection) soit $B$4:$D$10 + Nom du classeur & Nom de la feuille et de la cellule active (ActiveCell) soit $B$4 + Nom du classeur & Nom de la feuille correspondant à l'illustration.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub t()
      Dim t As String
      t = "Adresse des cellules"
      t = t & vbCrLf & "Sélection = " & Selection.Address(External:=True)
      t = t & vbCrLf & "Cellule active = " & ActiveCell.Address(External:=True)
      MsgBox t
    End Sub
    Illustration
    Nom : 230210 ActiveCell.png
Affichages : 68
Taille : 12,1 Ko

    NB : Je vais pas montrer toutes les combinaisons que j'ai fais avec ActiveCell et tous les dérivés (ActiveCell.Value etc)... Mais je suis sûr que mon erreur est très basique !

  5. #5
    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 176
    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 176
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    NB : Je vais pas montrer toutes les combinaisons que j'ai fais avec ActiveCell et tous les dérivés (ActiveCell.Value etc)... Mais je suis sûr que mon erreur est très basique !
    Je m'en doute.
    Le complément de ma réponse, n'était là que pour illustrer la compréhension et l'utilisation de l'objet ActiveCell (cellule active) qui est l'objet de la question que vous avez posée.

    Désolé pour cet ajout. je m'abstiendrai la prochaine fois
    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

  6. #6
    Membre habitué
    Homme Profil pro
    Technicien
    Inscrit en
    Février 2023
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Technicien

    Informations forums :
    Inscription : Février 2023
    Messages : 13
    Par défaut
    Citation Envoyé par Philippe Tulliez Voir le message
    Bonjour,

    Je m'en doute.
    Le complément de ma réponse, n'était là que pour illustrer la compréhension et l'utilisation de l'objet ActiveCell (cellule active) qui est l'objet de la question que vous avez posée.

    Désolé pour cet ajout. je m'abstiendrai la prochaine fois

    Pas de soucis ! Il me semblait bien que c'était un exemple pour justement dire où se trouve notre cellule active. Mais si j'avais un doute c'est bien que ce n'était pas suffisamment clair dans ma tête.

    En fait je ne réussis pas à mettre ActiveCell comme il faut pour réussir ma macro. L'erreur est peut être de la syntaxe.
    Mais en tout cas ça colore pas en vert tous les doublons ETC du contenus exact de la cellule sélectionnée.

  7. #7
    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 176
    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 176
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Dans la ligne de votre code initial, Formula1:="=$I$4"
    Vous constaterez que la valeur est une chaîne de caractères donc vous ne pouvez pas remplacer cette valeur par ActiveCell qui est un objet et pas une chaine de caractères représentant l'adresse de la cellule.

    Mon exemple avec la propriété Address illustre par contre la chaine de caractères contenant l'adresse.
    La piste est là

    Etes-vous certain d'avoir besoin de la cellule active pour dénombrer les cellules en double dans une plage de cellules ?
    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. [XL-2003] Optimiser une macro de mise en forme d'un Tableau
    Par mouncefdi dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 10/04/2009, 12h19
  2. macro pour mise en forme conditionnelle
    Par dodo28 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 25/03/2009, 20h21
  3. [PPT-07] Macro de mise en forme d'images
    Par ovier dans le forum VBA PowerPoint
    Réponses: 3
    Dernier message: 09/03/2009, 08h55
  4. Macro de mise en forme
    Par roman33 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 23/12/2008, 08h12
  5. Macro ou Mise en forme ?
    Par Troutchu dans le forum Excel
    Réponses: 7
    Dernier message: 29/02/2008, 16h31

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