Projet : Mise à jour d'un tableau par macro
Bonjour à tous,
Mon collègue et moi sommes tout nouveau dans le monde du VBA et on aimerait améliorer la communication visuel avec nos techniciens. Le but est d'obtenir un tableau qui sera mise à jour tous les jours (pour diffuser ce tableau sur des écrans). On a donc acheté quelques bouquins mais on aimerait bien être épaulé dans notre démarche
Nous vous mettons en pièce jointe ce que nous voulons obtenir au final mais bien entendu on ne s'attend pas à tomber sur une solution toute faite ! (Nous avons bien pris en compte le fait que l'on ne devait pas mettre de fichier joint dès le premier message, les documents joints ne sont là que pour les intéressés et donner une petite idée de notre projet)
Procédons donc par étape :
Tout d'abord, pourrais on avoir un exemple de code qui puisse faire cela :
Analyser la couleur de la cellule F4 d'une feuille source (ici Intégration_test.xls) et à partir de cette information, renseigné une feuille contenue dans un autre classeur ici (Vue 1_décembre) avec pour ordre :
En appuyant sur le Bouton Vue 1 :
_ Si F4 est bleu alors la cellule C2 dans Vue 1_janvier est verte et affiche la date de mise à jour dans la cellule.
_ Si F4 est orange alors C2 est blanc sans date.
On a aussi une question :
_ Est-il possible d'avoir une macro qui analyse les données qui ont été mises à jours à partir de la feuille source et de les transmettre dans la feuille qui contiendra notre tableau finale sans pour autant modifier les autres informations ?
Exemple : le 18/12/2013 on lance notre macro et dans Vue 1_janvier on a C2 en vert avec la date cad 18/12/2013. Le lendemain on relance la macro, mais vu que C2 est déjà vert on veut garder la date 18/12/2013 et non avoir 19/12/2013. C'est possible ?
Merci pour votre patience et n'hésitez à nous demander quoi que ce soit, ce n'est que le début de notre projet !
Bonjour et bienvenue sur le forum
Voilà pour un essai de code :
Sub EssaiDeCode()
CouleurBleue = Range("D24").Interior.ColorIndex
CouleurOrange = Range("D21").Interior.ColorIndex
CouleurVerte = Range("D29").Interior.ColorIndex
With Workbooks("Point Management visuel_test1 V1.xls").Sheets("Vue 1_janvier")
If Range("F4").Interior.ColorIndex = CouleurBleue Then
If .Range("C2").Interior.ColorIndex <> CouleurVerte Then
.Range("C2").Interior.ColorIndex = CouleurVerte
.Range("C2").Value = Date
End If
ElseIf Range("F4").Interior.ColorIndex = CouleurOrange Then
.Range("C2").Interior.ColorIndex = xlNone
.Range("C2").Value = ""
End If
End With
End Subet comment il fonctionne avec les fichiers joints
Bye !
Merci pour la rapidité de la réponse ! On va voir ce que ça donne !
Re Gmb,
Nickel ta macro, elle nous a bien débloqué.
Est-ce que tu sais comment faire pour que lorsque l'on appuie sur le bouton la date reste la même dans les cases qui en ont déjà une ?
Je m'explique, Le tableau sera mis à jour quasiment tous les jours par nos techniciens et on aimerait conserver la date exacte une fois que la case est verte.
Exp : Jour 1 : Technicien finit le module 1 du poste 1 donc il le met en bleu et il passe en vert dans la vue 1 avec la date JOUR 1.
Jour 2 : Technicien finit le module 2 du poste 1 donc il le met en bleu et il passe en vert dans la vue 1 avec la date JOUR 2 pour la cellule concernée mais toujours JOUR 1 dans la cellule concernant le module 1 Poste 1.
Une idée ?
Si d'autres personnes ont la réponse n'hésitez pas !
Nb : _ En lien l'avancement de notre macro (avec un passage de collage spéciale pour les intéressés) et l'ajout de boutons dans la database ( Le Bouton Vue 1 bug , je n'arrive pas à le supprimer !)
_ Penser à changer les chemins dans le VBA
Edit : J'ai remis les bon fichiers
Bonjour
Je ne comprends pas tout.
Dans ta feuille « Janvier 2014 », classeur « Intégration », on a un tableau_ avec 9 modules en titres de colonnes et 7 Postes en titres de lignes.
Dans ta feuille « Vue 1 », classseur « Point Management », on a un autre tableau avec 9 modules en titres de lignes mais 8 colonnes avec des titres type Références d’articles qui parfois d’ailleurs se répètent.
Comment fait-on la liaison entre les cellules des 2 tableaux ?
Edit : Retélécharge les fichiers, ils sont corrigés mais n'oublie pas de changer les chemins ^^ Mais j'ai enlevé ma fonction delete donc si tu switch entre janvier et février tu auras des incohérences.
En effet mais as tu essayé de lancer la macro ? Car le classeur "Point Management" n'était pas à jour par rapport au classeur intégration.
Bref, pour l'instant la forme du tableau et son contenu ne sont pas définitif donc on ne s'attarde pas trop dessus pour le moment.
Par contre, c'est vraiment la fonction "mise à jour" qui nous pose soucis car on arrive pas à "sauvegarder" la date des modules en vert lorsque l'on relance la macro. La partie du code qui nous intéresse est ici :
Sheets("Vue 1").Select
Range("D5:T16").Select
Selection.Delete Shift:=xlUp
Workbooks.Open "D:\Documents and Settings\T0148106\Mes documents\Lucas Mattera\Missions\Macro claire\TEST\Test Bon\Intégration_test V1.xls" ' Chemin fichier intégration
Sheets("JANVIER 2014").Select
Dim i, j As Integer
CouleurJaune = Range("D26").Interior.ColorIndex 'Couleur Jaune
CouleurBleue = Range("D24").Interior.ColorIndex 'Couleur Bleue
CouleurOrange = Range("D21").Interior.ColorIndex 'Couleur Orange
CouleurVerte = Range("D29").Interior.ColorIndex 'Couleur Verte
CouleurViolette = Range("D27").Interior.ColorIndex 'Couleur Violette
For i = 4 To 20
For j = 6 To 20
With Workbooks("Point Management visuel_test1 V1.xls").Sheets("Vue 1")
If Cells(i, j).Interior.ColorIndex = CouleurBleue Then
If .Cells(j, i).Interior.ColorIndex <> CouleurVerte Then
.Cells(j, i).Interior.ColorIndex = CouleurVerte
.Cells(j, i).Value = Date
End If
ElseIf Cells(i, j).Interior.ColorIndex = CouleurOrange Then
.Cells(j, i).Interior.ColorIndex = xlNone
.Cells(j, i).Value = ""
End If
End With
Next
NextPar exemple : on veut faire une mise à jour de la vue 1 avec la macro Janvier
Le problème vient surtout de la fonction delete car on est obligé de le mettre si on passe de la macro février à janvier et vice versa.
Il faut donc lui mettre une condition du genre :
Si la vue 1 (classeur Point de vue) est déjà celle de janvier alors ne pas faire un clear
Si la vue 1 (classeur Point de vue) n'est pas celle de janvier alors faire un clear
Mais d'un point de vue logique je ne vois pas comment faire car comment excel peut savoir si la vue correspond à celle de Janvier ou Février ? Il faudrait donc prévoir l'éventualité de créer une feuille pour la Vue 1 affichant la macro Janvier et une feuille pour la Vue 1 affichant la macro Février. Cependant si on doit le faire pour tous les mois ... A voir.
Ensuite, une fois ces conditions sont respectées, il faut que :
Si la cellule est bleu dans le tableau "Intégration" feuille "JANVIER 2014" et Si la cellule correspondante dans le tableau "Point Management visuel" est déjà verte (ou contenant une date) alors ne rien faire
Si la cellule est bleu dans le tableau "Intégration" feuille "JANVIER 2014" et Si la cellule correspondante dans le tableau "Point Management visuel" est vide alors mettre la cellule en verte avec la date.
Si la cellule est orange dans le tableau "Intégration" feuille "JANVIER 2014" alors ne rien mettre dans la cellule correspondante dans le tableau "Point Management visuel"
Voilà, si tu as des petites idées je suis preneur !
Ensuite, une fois ces conditions sont respectées, il faut que :
Si la cellule est bleu dans le tableau "Intégration" feuille "JANVIER 2014" et Si la cellule correspondante dans le tableau "Point Management visuel" est déjà verte (ou contenant une date) alors ne rien faire
Si la cellule est bleu dans le tableau "Intégration" feuille "JANVIER 2014" et Si la cellule correspondante dans le tableau "Point Management visuel" est vide alors mettre la cellule en verte avec la date.
Si la cellule est orange dans le tableau "Intégration" feuille "JANVIER 2014" alors ne rien mettre dans la cellule correspondante dans le tableau "Point Management visuel"
En faite j'ai trouvé, c'est facile : ( voir le deuxième If )
Workbooks.Open "D:\Documents and Settings\T0148106\Mes documents\Lucas Mattera\Missions\Macro claire\TEST\Test Bon\Intégration_test V1.xls" ' Chemin fichier intégration
Sheets("JANVIER 2014").Select
Dim i, j As Integer
CouleurJaune = Range("D26").Interior.ColorIndex 'Couleur Jaune
CouleurBleue = Range("D24").Interior.ColorIndex 'Couleur Bleue
CouleurOrange = Range("D21").Interior.ColorIndex 'Couleur Orange
CouleurVerte = Range("D29").Interior.ColorIndex 'Couleur Verte
CouleurViolette = Range("D27").Interior.ColorIndex 'Couleur Violette
For i = 4 To 20
For j = 6 To 20
With Workbooks("Point Management visuel_test1 V1.xls").Sheets("Vue 1")
If Cells(i, j).Interior.ColorIndex = CouleurBleue Then
If .Cells(j, i).Interior.ColorIndex = CouleurVerte Then
End If
If .Cells(j, i).Interior.ColorIndex <> CouleurVerte Then
.Cells(j, i).Interior.ColorIndex = CouleurVerte
.Cells(j, i).Value = Date
End If
ElseIf Cells(i, j).Interior.ColorIndex = CouleurOrange Then
.Cells(j, i).Interior.ColorIndex = xlNone
.Cells(j, i).Value = ""
End If
End With
Next
NextA réfléchir pour la fonction delete mtn ...