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 :

Faire apparaitre les changements en rouge [Toutes versions]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné
    Homme Profil pro
    autodidacte
    Inscrit en
    Novembre 2013
    Messages
    517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : autodidacte
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2013
    Messages : 517
    Par défaut Faire apparaitre les changements en rouge
    Bonjour à tous,


    je viens vers vous afin de savoir par ou commencer mon projet.

    Je m'explique:

    j'ai un fichier excel avec 2 feuilles, sur la première je colle une programme de production tous les matins. il est sur 11 colonnes et est trier par rapport à la colonne I qui représente une date heure de fin de fabrication. Ce programme est susceptible de changer. Il se peut que une ligne soit supprimée, déplacée, ajoutée ou encore que rien ne bouge mais que l'heure de fin soit modifiée.

    Ce que je cherche à faire, c'est le copier et le coller dans la seconde feuille via une macro et que lorsque je lance la macro, les lignes modifiées (celles ajoutées,changées de place ou ayant changer une données de fin de production soient écrite en caractère rouge afin de les reperer facilement par rapport à celles n'ayant eu aucune modification.) Ce planning dans la seconde feuille doit aussi être triée par date/heure de fin de production (colonne I également). A noter que le planning dans la seconde feuille a strictement le même format et le même nombre de colonne et que par exemple la colonne C de la feuille 1 est la meme colonne C pour la feuille 2. C'est un simple copier/coller
    Pouvez-vous me donner des pistes sur des fonctions, des méthodes qui pourraient m'aider à réaliser mon projet.
    Je sais bien copier/coller, trier etc.. mais je vois pas comment faire apparaitre les données ayant été modifiées par rapport à la dernière mise à jour via la macro.

    J'essayerai de faire ensuite quelque chose grâce à vos pistes et reviendrait vers vous si j'ai des soucis particuliers.


    Merci d'avance
    Bonne journée

  2. #2
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Bonjour,

    Si seule la date ou l'heure de fin de production est différente, est-ce qu'on considère que la ligne est à colorier ?

  3. #3
    Membre chevronné
    Homme Profil pro
    autodidacte
    Inscrit en
    Novembre 2013
    Messages
    517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : autodidacte
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2013
    Messages : 517
    Par défaut
    Bonjour,

    Non, si au final elle ne change pas de place dans le planning par rapport à la version d'avant mais si cette condition fait que ca devient trop compliquer alors c'est pas grave si la ligne est coloriée

  4. #4
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Est-ce que tu pourrais mettre un classeur exemple en PJ ? Le top serait d'ajouter une feuille avec le résultat escompté. Je n'ai pas tropp le temps de me bricoler un jeu d'essai.

  5. #5
    Membre chevronné
    Homme Profil pro
    autodidacte
    Inscrit en
    Novembre 2013
    Messages
    517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : autodidacte
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2013
    Messages : 517
    Par défaut
    Merci de ton interet pour la question.

    Je joins le fichier

    en feuille PETRI_1, le programme que je copie/colle depuis un autre classeur.
    ensuite je vais sur la feuille programmation et je clique sur Update.
    La macro va rechercher les différences entre le programme de la feuille PETRI_1 et le le programme qui était déja présent sur la feuille programmation et mettre de ce fait à jour la feuille programmation.

    donc en gros:
    à J-1 le programme a été copier sur PEtri_1 et le update a été fait juste après. le programme est donc mis à jour à J-1
    le lendemain,on refait la meme manipulation à jour J. Si il y a des différence entre le programme sur la feuille programmation (donc celui de J-1) par rapport au nouveau programme de la feuille Petri_1 (Jour J), alors on colore en rouge ou on supprime si la ligne a disparu entre temps dans la feuille programmation.
    puis à J+1, le programme de la feuille programmation sera celui du jour J et fera office de comparatif entre le nouveau programme de PETRI_1 (J+1) etc...

    j'espère avoir été clair.
    Fichiers attachés Fichiers attachés

  6. #6
    Membre chevronné
    Homme Profil pro
    autodidacte
    Inscrit en
    Novembre 2013
    Messages
    517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : autodidacte
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2013
    Messages : 517
    Par défaut
    En fait j'ai déjà réfléchi à plusieurs pistes mais je sais pas si c'est faisable et si la plus simple:

    je pensais passer par un dictionnaire mais je sais pas si on peux faire un dictionnaire à plusieurs "dimensions".
    Je sais ajouter une colonne dans un dico et comparer mais est il possible d'ajouter plusieurs colonne et une fois ceci fait de comparer ligne à ligne du dictionnaire sur plusieurs dimensions du dictionnaire:

    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
    Dim MyDico As Object
    Dim WB As Workbook
    Dim RG As Range
    Dim Cel As Range
    Dim DL As Long
    Dim DL_P As Long
    Dim i As Integer
     
     
    Set WB = ThisWorkbook
     
    With WB.Worksheets("Programmation")
         DL = .Cells(Rows.Count, 4).End(xlUp).Row
         Set RG = .Range(.Cells(3, 5), .Cells(DL, 5))
    End With
     
     
    Set MyDico = CreateObject("Scripting.Dictionary")
     
     
    For Each Cel In RG
         If MyDico.Exists(CStr(Cel.Value)) = False And Cel.Value <> "" Then
            MyDico.Add CStr(Cel.Value), Cel.Value
         End If
    Next Cel
     
    With WB.Worksheets("PETRI_1")
        DL_P = .Cells(Rows.Count, 3).End(xlUp).Row
        For i = 3 To DL_P
             If MyDico.Exists(CStr(.Cells(i, 5).Value)) = False Then .Range("A" & i & ":E" & i).Copy
             DL = WB.Worksheets("Programmation").Cells(Rows.Count, 5).End(xlUp).Row
             ThisWorkbook.Worksheets("Programmation").Range("A1:E" & DL).PasteSpecial xlValue
        Next i
    End With
     
    Set MyDico = Nothing
     
    End Sub

    Ou alors je pensai passer par une variable tableau et faire un peu de ce styleCf. les commentaire pour voir ce que j'arrive pas a coder)

    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
    Dim montab_Prog()
    Dim montab_Petri()
    Dim DL As Long 'derniere ligne programmation
    Dim DL_P As Long 'derniere ligne PETRI_1
    Dim i As Integer
    Dim j As Integer
     
     
    ThisWorkbook.Worksheets("Programmation").Range("a3:G" & DL).Sort Key1:=ThisWorkbook.Worksheets("Programmation").Range("G3"), Order1:=xlAscending, Header:=xlGuess, _
            OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
    ThisWorkbook.Worksheets("PETRI_1").Range("a3:I" & DL_P).Sort Key1:=ThisWorkbook.Worksheets("PETRI_1").Range("I3"), Order1:=xlAscending, Header:=xlGuess, _
            OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
    DL = ThisWorkbook.Worksheets("Programmation").Cells(Rows.Count, 3).End(xlUp).Row
    DL_P = ThisWorkbook.Worksheets("PETRI_1").Cells(Rows.Count, 3).End(xlUp).Row
    ThisWorkbook.Worksheets("PETRI_1").Range("E3:E" & DL_P).NumberFormat = "0"
    ThisWorkbook.Worksheets("Programmation").Range("E3:E" & DL).NumberFormat = "0"
    montab_Prog() = ThisWorkbook.Worksheets("Programmation").Range("A3:G" & DL).Value
    montab_Petri() = ThisWorkbook.Worksheets("PETRI_1").Range("A3:I" & DL_P).Value
     
    For i = LBound(montab_Petri, 1) To UBound(montab_Petri, 1)
    For j = LBound(montab_Prog, 1) To UBound(montab_Prog, 1)
    ' et la je bloque comment comparer les heure et les N° de lot en meme temps
    'il faudrai que je fasse:
    'CONDITON 1: si montab_petri(i, 5) n'existe pas dans montab_prog(j, 5) alors pourquoi pas ajouter la ligne entière de montab_petri() dans un 3ème tableau afin de tout coller a la fin si c'est le plus simple
    'CONDITION 2 :ensuite si montab_prog(j, 5) n'existe pas dans montab_petri(i, 5) alors le supprimer du tableau montab_prog
    'CONDITION 3 : et enfin, si montab_petri(i, 5) existe dans montab_prog(j, 5) et que montab_petri(i, 9) <> montab_prog(n° ligne ou le lot a été trouver (condition d'avant), 7) alors supprimer la ligne de montab_prog(j, 5) et ajouter la nouvelle ligne mise à jour depuis montab_petri() dans le meme 3ème tableau de la CONDITION 1 afin que ca apparaisse en rouge a la toute fin lors du copiage du tableau 3 dans la feuille de calcul
    Next j
    Next i
    ThisWorkbook.Worksheets("Programmation").Range("A3:G" & DL).ClearContents
    'Ajouter les données de montab_prog() dans la feuille programmation
    ThisWorkbook.Worksheets("Programmation").Range("a3:G" & DL).Sort Key1:=ThisWorkbook.Worksheets("Programmation").Range("G3"), Order1:=xlAscending, Header:=xlGuess, _
            OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
    'copier les données à la toute fin du 3ème tableau en caractère rouge dans la feuille programmation
    DL = ThisWorkbook.Worksheets("Programmation").Cells(Rows.Count, 3).End(xlUp).Row
    ThisWorkbook.Worksheets("Programmation").Range("a3:G" & DL).Sort Key1:=ThisWorkbook.Worksheets("Programmation").Range("G3"), Order1:=xlAscending, Header:=xlGuess, _
            OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Faire apparaitre les lignes sans enregistrements.
    Par bolderiz dans le forum Designer
    Réponses: 8
    Dernier message: 22/05/2007, 13h44
  2. Réponses: 2
    Dernier message: 19/04/2007, 09h27
  3. [vBulletin] Faire apparaitre les sous forum sur le forum parent
    Par sofidz dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 2
    Dernier message: 02/04/2007, 16h44
  4. faire apparaitre les images
    Par flamel dans le forum Access
    Réponses: 2
    Dernier message: 04/06/2006, 10h49
  5. faire apparaitre les scrollbar en 800*600
    Par Djwaves dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 06/02/2006, 21h40

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