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 :

Réinitialiser une macro [XL-2003]


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Femme Profil pro
    Inscrit en
    Octobre 2010
    Messages
    148
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 148
    Par défaut Réinitialiser une macro
    Bonjour à tous

    J'utilise une macro qui me trouve les doublons sur plusieurs feuilles excel. Cette macro marche très bien.
    Par contre, j'ai un petit soucis. quand je corrige mon doublon (même si je relance la macro) la mise en forme que j'ai appliqué reste.
    J'aimerai donc trouvé une macro qui me permettent une fois le doublon corrigé de disparaitre (enfin la mise en forme) et si le doublon n'a pas été corrigé que la mise en forme reste.

    Merci

    Cordialement

  2. #2
    Expert confirmé Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Par défaut
    Bonjour,

    envoies ta macro, ça sera plus facile (enfin, peut-être !)
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur :resolu: si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  3. #3
    Membre confirmé
    Femme Profil pro
    Inscrit en
    Octobre 2010
    Messages
    148
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 148
    Par défaut
    Ma macro que j'utilise est la suivante : (en fait c'est 2 macros)

    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
    Public Sub CDouble(RngA As Range, RngB As Range)
     'Recherche les doublons entre 2 plages
     
    Dim c As Range, v As Range
     
    For Each c In RngA
        If c.Value <> "" Then 
            Set v = RngB.Find(c.Value, LookIn:=xlValues, lookat:=xlWhole)
            If Not v Is Nothing Then 
                If c.Parent.Name & c.Address <> v.Parent.Name & v.Address Then 
                c.Interior.ColorIndex = 46 
                c.Font.Bold = True 
                c.Font.ColorIndex = 36 
                v.Interior.ColorIndex = 46 
                v.Font.Bold = True 
                v.Font.ColorIndex = 36 
                Set v = Nothing 
                End If
            End If
        End If
    Next c
     
    End Sub


    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
    Sub Appliquer_doublons()
     
    Dim i As Byte, j As Byte
    Dim LastLigA As Long, LastLigB As Long
    Dim TF As Variant
     
    Application.ScreenUpdating = False
     
    TF = Array("Feuil1", "Feuil2", "Feuil3", "Feuil4") 
     
    For i = LBound(TF) To UBound(TF)
        LastLigA = Sheets(TF(i)).Cells(Rows.Count, 1).End(xlUp).Row
            For j = i To UBound(TF)
                LastLigB = Sheets(TF(j)).Cells(Rows.Count, 1).End(xlUp).Row 
                CDouble Sheets(TF(i)).Range("B9:B" & LastLigA), Sheets(TF(j)).Range("B9:B" & LastLigB) 
                CDouble Sheets(TF(i)).Range("C9:C" & LastLigA), Sheets(TF(j)).Range("C9:C" & LastLigB) 
            Next j
    Next i
     
    End Sub
    Voilà
    J'espère que ca vous aidera

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 87
    Par défaut formats
    Bonjour,
    A première vu, il faut ajouter des instructions d'effacement de format sinon les anciens formats persistent. Il faudrait tester un truc de ce style. C'est pas génial et je ne sais pas si il y a une partie des styles à garder malgré tout.
    Ca fera peut-être avancer un peu la question.
    a+

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
       If Not v Is Nothing Then
                v.ClearFormats
                c.ClearFormats
                If c.Parent.Name & c.Address <> v.Parent.Name & v.Address Then

  5. #5
    Membre confirmé
    Femme Profil pro
    Inscrit en
    Octobre 2010
    Messages
    148
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 148
    Par défaut
    J'ai essayé et cela ne marche pas...
    Et en plus cela m'efface les bordures du tableau et toute la mise en forme

  6. #6
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2006
    Messages
    288
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 288
    Par défaut
    Je pense qu'il faudrait, en début de macro, sélectionner les colonnes B et C de chacune des quatre feuilles et remettre pour les colonnes entières les propriétés
    Interior.ColorIndex, Font.Bold, Font.ColorIndex à la valeur par défaut (celle du non doublon). Puis le traitement se chargerait de remettre la mise en forme aux doublons.

    Au passage, deux remarques sur ton code :
    Dans CDouble le code de mise en forme est répété deux fois, une fois suffirait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
                c.Interior.ColorIndex = 46 
                c.Font.Bold = True 
                c.Font.ColorIndex = 36 
                v.Interior.ColorIndex = 46 
                v.Font.Bold = True 
                v.Font.ColorIndex = 36
    Puis toujours dans la même procédure, tu as :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For i = LBound(TF) To UBound(TF)
        LastLigA = Sheets(TF(i)).Cells(Rows.Count, 1).End(xlUp).Row
            For j = i To UBound(TF)
    La boucle de j commence à i, laquelle variable est incrémentée lorsqu'on change de feuille. Ceci veut dire que chaque feuille n'est pas comparée aux précédentes (la feuille 2 n'est comparée qu'aux feuilles 2, 3, 4, la feuille 3 qu'aux 3 et 4 et la feuille 4 qu'à la 4.
    Du coup, à moins que fonctionnellement ça ait un sens, des doublons avec les feuilles précédentes ne sont pas identifiés. Il faudrait amha modifier la boucle j ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For j = LBound(TF) To UBound(TF)

  7. #7
    Membre confirmé
    Femme Profil pro
    Inscrit en
    Octobre 2010
    Messages
    148
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 148
    Par défaut
    Merci je vais essayer ceci tout de suite. Par contre une autre question, je dois recréer une autre macro (1 ou 2 en fonction de si je dois recréer mon module publique) pour sélectionner les colonnes B et C des 4 feuilles pour remettre les valeurs par défaut ou je les intégrer dans mes macros déja existante?

    Merci

    Cordialement

    Petite précision, je ne maitrise pas trop bien les macros. Au fur et à mesure j'apprends et surtout grâce à ce forum. Merci

  8. #8
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2006
    Messages
    288
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 288
    Par défaut
    Tu peux l'intégrer au début de ta procédure Appliquer_Doublons, par exemple après TF = Array("Feuil1", "Feuil2", "Feuil3", "Feuil4").

    Au passage je réalise que j'ai dis une grosse bêtise tout à l'heure avec mes deux remarques, voilà ce que c'est de regarder trop vite. Donc ne touche pas au code existant à ce sujet, il marche bien comme ça (la "double" mise en forme ne concernait pas le même objet mais les deux cellules concernées par le doublon, et du coup la logique de ne pas retraiter les feuilles précédentes est tout à fait pertinente).
    Mea culpa.

  9. #9
    Membre confirmé
    Femme Profil pro
    Inscrit en
    Octobre 2010
    Messages
    148
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 148
    Par défaut
    J'ai encore une petite question (je suis embêtante). Pour lui dire de sélectionner les colonnes B et C et de lui appliquer les valeurs par défaut, il faut faire comment?
    Encore merci

  10. #10
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2006
    Messages
    288
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 288
    Par défaut
    Il faut lancer l'enregistreur de macros et voir ce que ça donne comme code pour remettre la mise en forme voulue (pour remplacer les ??? ci-dessous).
    Je n'ai pas la même version d'Excel et je ne peux pas connaître ces valeurs.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Application.ScreenUpdating = False
     
    TF = Array("Feuil1", "Feuil2", "Feuil3", "Feuil4") 
     
    For i = LBound(TF) To UBound(TF)
    
        Sheets(TF(i)).Columns("B:C").Font.Bold = False
        Sheets(TF(i)).Columns("B:C").Font.ColorIndex= ???    
        Sheets(TF(i)).Columns("B:C").Interior.ColorIndex = ???
    
        LastLigA = Sheets(TF(i)).Cells(Rows.Count, 1).End(xlUp).Row
            For j = i To UBound(TF)
        ...
    Le petit inconvénient c'est que ça modifie aussi les premières lignes de B et C qui ne contiennent pas de données, mais peut-être des en-têtes de colonnes ou autres. Si ça gêne il faut ensuite revenir sur ces cellules spécifiquement pour les remettre en forme comme désiré.

  11. #11
    Membre confirmé
    Femme Profil pro
    Inscrit en
    Octobre 2010
    Messages
    148
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 148
    Par défaut
    C'est super ca marche
    Par contre effectivement, j'ai l'inconvénient des premières lignes de B et C.
    donc il faut que je trouve comment faire pour lui dire de partir à partir de la ligne n°9.
    Encore merci..
    Si j'ai trouvé une idée je transmettrais au sinon je suis preneuse aussi
    Merci

    Cordialement

    Non pardon je rectifie. Ca m'efface même les doublons qui n'ont pas été corrigés...
    Bon à voir.

  12. #12
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2006
    Messages
    288
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 288
    Par défaut
    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
    Application.ScreenUpdating = False
     
    TF = Array("Feuil1", "Feuil2", "Feuil3", "Feuil4") 
     
    For i = LBound(TF) To UBound(TF)
        Sheets(TF(i)).Columns("B:C").Font.Bold = False
        Sheets(TF(i)).Columns("B:C").Font.ColorIndex= ???    
        Sheets(TF(i)).Columns("B:C").Interior.ColorIndex = ???
    Next i
     
    For i = LBound(TF) To UBound(TF)
     
        LastLigA = Sheets(TF(i)).Cells(Rows.Count, 1).End(xlUp).Row
            For j = i To UBound(TF)
        ...

  13. #13
    Membre confirmé
    Femme Profil pro
    Inscrit en
    Octobre 2010
    Messages
    148
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 148
    Par défaut
    Je te remercie cela marche.
    Il me reste à trouver comment faire pour que la macro parte de la ligne 9 pour éviter que la mise en forme des 1ères colonnes ne changent...
    Merci encore..

  14. #14
    Membre confirmé
    Femme Profil pro
    Inscrit en
    Octobre 2010
    Messages
    148
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 148
    Par défaut
    Bonjour à tous,
    Je n'ai toujours pas trouvé de solution à mon problème pour que la macro démarre à partir de la ligne 9. J'ai essayé avec "cells" mais ca ne marche pas...
    Donc s'il y a des solutions je prends.
    Merci
    Cordialement

  15. #15
    Expert confirmé
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Par défaut
    Bonjour,

    Essaie comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    For i = LBound(TF) To UBound(TF)
        With Sheets(TF(i)).Range("B9:C" & Rows.Count)
            .Font.Bold = False
            .Font.ColorIndex= ???
            .Interior.ColorIndex = ???
        End With
    Next

  16. #16
    Membre confirmé
    Femme Profil pro
    Inscrit en
    Octobre 2010
    Messages
    148
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 148
    Par défaut
    Super ca marche
    Merci encore..

    Bonjour,

    J'ai un souci qui n'était aps prévu.
    La macro s'applique bien lorsque l'on a 2 colonnes côte à côte. par contre si ce sont des colonnes bien distinctes (par exemple C et J) cela ne marche pas.
    Qui a une solution à mon problème?

    Merci

    Cordialement

  17. #17
    Expert confirmé
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    With Sheets(TF(i)).Range("C9:C" & Rows.Count & ",J9:J" & Rows.Count)
        .Font.Bold = False
        .Font.ColorIndex = 6
        .Interior.ColorIndex = 3
    End With

  18. #18
    Membre confirmé
    Femme Profil pro
    Inscrit en
    Octobre 2010
    Messages
    148
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 148
    Par défaut
    J'ai essayé mais il m'efface la mise en page même sur les autres feuilles où l'erreur n'est pas corrigée...
    Alors que quand les colonnes sont à côtés je n'ai pas de souci...

  19. #19
    Expert confirmé
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Par défaut
    Citation Envoyé par bbcancer Voir le message
    J'ai essayé mais il m'efface la mise en page même sur les autres feuilles où l'erreur n'est pas corrigée...

    Je t'ai donné une solution pour faire la mise en forme de colonnes non contiguës. La question de savoir sur quelle feuille cette mise en forme doit être faite ou non c'est un autre problème qui ne fait pas partie de ces quelques lignes de code.

  20. #20
    Membre confirmé
    Femme Profil pro
    Inscrit en
    Octobre 2010
    Messages
    148
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 148
    Par défaut
    Les feuilles sont précisées par le TF sauf que quand j'applique le code sur des colonnes contiguës cela marche, au sinon cela ne marche pas.
    Tu veux un exemple de fichier?

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. réinitialiser une macro
    Par potili2 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 27/10/2007, 06h47
  2. [VB6] Exécuter une macro Access
    Par Nektanebos dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 22/02/2006, 16h32
  3. [VBA-E] [Excel] Lancer une macro à une heure donnée
    Par Lysis dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 16/10/2002, 12h15
  4. Qu'est-ce qu'une macro ?
    Par karli dans le forum Assembleur
    Réponses: 2
    Dernier message: 01/09/2002, 03h38
  5. Réponses: 2
    Dernier message: 22/07/2002, 12h13

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