Comparer deux fichiers regulierement - condition sur format couleur

Le
lglux
Bonjour a tous,

Merci a tout ceux qui m'avaient bien dépanné la derniere fois et ceux
qui pourront me depanner encore une fois

Voici mon probleme:

Un fichier, que l'on peut prendre sur l'intranet, est regulierement
modifié. Chaque modification de ce fichier entraine pour mon service
une action.

Ce fichier est constitué de plusieurs onglets (=famille), et chaque
onglet est disposé de la meme maniere: le tableau commence en A12, la
colonne A contient les numero de references uniques d'objets, et les
colonnes de "I" à "AK" contiennent des codes couleurs, rouge ou vert.

La difference entre les onglets est la longueur du tableau (nombre de
lignes). Ordre de grandeur: entre 150 et 500 lignes et toujours sur
une trentaine de colonnes, 15 onglets.

J'aimerai pouvoir automatisé la comparaison entre un fichier plus
ancien et un plus recent, et faire cette manip regulierement. Ce que
je veux savoir, c'est si la couleur a changé de rouge (ou orange) a
vert.

Solution à laquelle je pensais:

Copier dans un fichier les tableaux de chaque onglet, un a la suite de
l'autre, pour avoir toute l'info dans une feuille.

Je l'aurai deja fait un ou deux jours avant avec une version plus
ancienne de cette matrix, sur un autre onglet. Ca sera mes deux bases
a comparer.

Pour ce qui est des couleurs, j'ai fait un code qui me permet de
transformer une autre couleur que vert en "FALSE" et le vert en
"TRUE". Je fais cette manip sur les deux bases a comparer, et ensuite
ca sera facile de savoir si pour tel objet (defini par la valeur en
cellule colonne A), il y a eu un TRUE en plus que avant.

Que pensez vous de ma demarche?

Donc j'ai commencé par le debut: ecrire une macro qui me copie les
tableaux l'un apres l'autre, de chaque onglet de mon fichier source
sur un nouveau fichier cible:


-
Sub OpenMatrix()


getLastRowNumberWithValue "H:MacroFichier source.xls", 3, ""

o
Selection.Copy

Workbooks.Add


ActiveSheet.Paste ("A1")




End Sub
-

Function getLastRowNumberWithValue(NomFichier As String, _
Col As Integer, MaValeur As Variant) As Long


Dim Wk As Workbook, Ligne As Variant
Dim Cherche As Variant


'Selection de la derniere ligne vide de la colonne A a partir de la
cellule C12, car parfois infos manquantes dans
'certaines cellules de la colonne A donc la colonne C servira de
reference

Set Wk = Workbooks.Open(NomFichier)
With Wk.Worksheets("ONGLET 3")
Ligne = .Columns(Col).Find(MaValeur, [C12], , _
, xlByColumns, xlNext).Row



End With

Ligne = Ligne - 1

Range("A12", "AK" & Ligne).Select

End Function

-

Il y a surement mieux et plus simple. Cette macro me permet de savoir
jusqu'a quelle ligne va ma selection, puis de copier cette selection.

Le probleme: comment copier ensuite la prochaine selection de l'onglet
suivant en dessous de ce que j'ai copié en premier?

Peut on ecrire simplement: repeter cette manip de l'onglet 3 à 15 (les
deux premiers onglets étant a ignorer)?
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
lglux
Le #4987971
Peut etre ne suis je pas tres clair dans mon enoncé. En tout cas j'ai
l'impression que cela represente beaucoup de données pour excel, cela
prends du temps et plante, il faut peut etre que je songe a programmer
ca autrement..


On 12 oct, 17:58, lglux
Bonjour a tous,

Merci a tout ceux qui m'avaient bien dépanné la derniere fois et ceux
qui pourront me depanner encore une fois...

Voici mon probleme:

Un fichier, que l'on peut prendre sur l'intranet, est regulierement
modifié. Chaque modification de ce fichier entraine pour mon service
une action.

Ce fichier est constitué de plusieurs onglets (úmille), et chaque
onglet est disposé de la meme maniere: le tableau commence en A12, la
colonne A contient les numero de references uniques d'objets, et les
colonnes de "I" à "AK" contiennent des codes couleurs, rouge ou vert.

La difference entre les onglets est la longueur du tableau (nombre de
lignes). Ordre de grandeur: entre 150 et 500 lignes et toujours sur
une trentaine de colonnes, 15 onglets.

J'aimerai pouvoir automatisé la comparaison entre un fichier plus
ancien et un plus recent, et faire cette manip regulierement. Ce que
je veux savoir, c'est si la couleur a changé de rouge (ou orange) a
vert.

Solution à laquelle je pensais:

Copier dans un fichier les tableaux de chaque onglet, un a la suite de
l'autre, pour avoir toute l'info dans une feuille.

Je l'aurai deja fait un ou deux jours avant avec une version plus
ancienne de cette matrix, sur un autre onglet. Ca sera mes deux bases
a comparer.

Pour ce qui est des couleurs, j'ai fait un code qui me permet de
transformer une autre couleur que vert en "FALSE" et le vert en
"TRUE". Je fais cette manip sur les deux bases a comparer, et ensuite
ca sera facile de savoir si pour tel objet (defini par la valeur en
cellule colonne A), il y a eu un TRUE en plus que avant.

Que pensez vous de ma demarche?

Donc j'ai commencé par le debut: ecrire une macro qui me copie les
tableaux l'un apres l'autre, de chaque onglet de mon fichier source
sur un nouveau fichier cible:

----------------------------------------
Sub OpenMatrix()

getLastRowNumberWithValue "H:MacroFichier source.xls", 3, ""

o
Selection.Copy

Workbooks.Add

ActiveSheet.Paste ("A1")

End Sub
----------------------------------------

Function getLastRowNumberWithValue(NomFichier As String, _
Col As Integer, MaValeur As Variant) As Long

Dim Wk As Workbook, Ligne As Variant
Dim Cherche As Variant

'Selection de la derniere ligne vide de la colonne A a partir de la
cellule C12, car parfois infos manquantes dans
'certaines cellules de la colonne A donc la colonne C servira de
reference

Set Wk = Workbooks.Open(NomFichier)
With Wk.Worksheets("ONGLET 3")
Ligne = .Columns(Col).Find(MaValeur, [C12], , _
, xlByColumns, xlNext).Row

End With

Ligne = Ligne - 1

Range("A12", "AK" & Ligne).Select

End Function

----------------------------------------

Il y a surement mieux et plus simple. Cette macro me permet de savoir
jusqu'a quelle ligne va ma selection, puis de copier cette selection.

Le probleme: comment copier ensuite la prochaine selection de l'onglet
suivant en dessous de ce que j'ai copié en premier?

Peut on ecrire simplement: repeter cette manip de l'onglet 3 à 15 (les
deux premiers onglets étant a ignorer)?


lglux
Le #4987741
On 15 oct, 14:43, lglux
Peut etre ne suis je pas tres clair dans mon enoncé. En tout cas j'ai
l'impression que cela represente beaucoup de données pour excel, cela
prends du temps et plante, il faut peut etre que je songe a programmer
ca autrement..

On 12 oct, 17:58, lglux


Bonjour a tous,

Merci a tout ceux qui m'avaient bien dépanné la derniere fois et ce ux
qui pourront me depanner encore une fois...

Voici mon probleme:

Un fichier, que l'on peut prendre sur l'intranet, est regulierement
modifié. Chaque modification de ce fichier entraine pour mon service
une action.

Ce fichier est constitué de plusieurs onglets (úmille), et chaque
onglet est disposé de la meme maniere: le tableau commence en A12, la
colonne A contient les numero de references uniques d'objets, et les
colonnes de "I" à "AK" contiennent des codes couleurs, rouge ou vert.

La difference entre les onglets est la longueur du tableau (nombre de
lignes). Ordre de grandeur: entre 150 et 500 lignes et toujours sur
une trentaine de colonnes, 15 onglets.

J'aimerai pouvoir automatisé la comparaison entre un fichier plus
ancien et un plus recent, et faire cette manip regulierement. Ce que
je veux savoir, c'est si la couleur a changé de rouge (ou orange) a
vert.

Solution à laquelle je pensais:

Copier dans un fichier les tableaux de chaque onglet, un a la suite de
l'autre, pour avoir toute l'info dans une feuille.

Je l'aurai deja fait un ou deux jours avant avec une version plus
ancienne de cette matrix, sur un autre onglet. Ca sera mes deux bases
a comparer.

Pour ce qui est des couleurs, j'ai fait un code qui me permet de
transformer une autre couleur que vert en "FALSE" et le vert en
"TRUE". Je fais cette manip sur les deux bases a comparer, et ensuite
ca sera facile de savoir si pour tel objet (defini par la valeur en
cellule colonne A), il y a eu un TRUE en plus que avant.

Que pensez vous de ma demarche?

Donc j'ai commencé par le debut: ecrire une macro qui me copie les
tableaux l'un apres l'autre, de chaque onglet de mon fichier source
sur un nouveau fichier cible:

----------------------------------------
Sub OpenMatrix()

getLastRowNumberWithValue "H:MacroFichier source.xls", 3, ""

o
Selection.Copy

Workbooks.Add

ActiveSheet.Paste ("A1")

End Sub
----------------------------------------

Function getLastRowNumberWithValue(NomFichier As String, _
Col As Integer, MaValeur As Variant) As Long

Dim Wk As Workbook, Ligne As Variant
Dim Cherche As Variant

'Selection de la derniere ligne vide de la colonne A a partir de la
cellule C12, car parfois infos manquantes dans
'certaines cellules de la colonne A donc la colonne C servira de
reference

Set Wk = Workbooks.Open(NomFichier)
With Wk.Worksheets("ONGLET 3")
Ligne = .Columns(Col).Find(MaValeur, [C12], , _
, xlByColumns, xlNext).Row

End With

Ligne = Ligne - 1

Range("A12", "AK" & Ligne).Select

End Function
En condition cela donne:


--------------------------------------------------------------------------- ------------------------
Pour chaque cellule de la colonne A du fichier 1
Pour chaque cellule de la colonne A du fichier 2

SI la cellule du fichier 2 est egale a la cellule du fichier 1, ALORS:

SI la cellule du fichier 2 en colonne I est verte
ET la cellule du fichier 1 en colonne I est verte
ALORS ne rien faire

SI la cellule du fichier 2 en colonne I est verte
ET la cellule du fichier 1 en colonne I N'EST PAS verte,
ALORS reporter la ligne dans un nouvel onglet

SI la cellule du fichier 2 n'est pas egale a la cellule du fichier 1
(la valeur de la cellule en colonne A du fichier 2 n'est pas dans la
colonne A du fichier 1),
ALORS reporter la ligne du fichier 2 dans un nouvel onglet

SI la cellule de la colonne A du fichier 1 est vide
ET la cellule de la colonne C du fichier 1 n'est pas vide
ALORS reporter la ligne du fichier 1 dans un nouvel onglet

SI la cellule de la colonne A du fichier 2 est vide
ET la cellule de la colonne C du fichier 2 n'est pas vide
ALORS reporter la ligne du fichier 2 dans un nouvel onglet

--------------------------------------------------------------------------- ------------------------

----------------------------------------

Il y a surement mieux et plus simple. Cette macro me permet de savoir
jusqu'a quelle ligne va ma selection, puis de copier cette selection.

Le probleme: comment copier ensuite la prochaine selection de l'onglet
suivant en dessous de ce que j'ai copié en premier?

Peut on ecrire simplement: repeter cette manip de l'onglet 3 à 15 (les
deux premiers onglets étant a ignorer)?- Masquer le texte des message s précédents -


- Afficher le texte des messages précédents -



Publicité
Poster une réponse
Anonyme