Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Comparer deux fichiers regulierement - condition sur format couleur

2 réponses
Avatar
lglux
Bonjour a tous,

Merci a tout ceux qui m'avaient bien d=E9pann=E9 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=E9. Chaque modification de ce fichier entraine pour mon service
une action.

Ce fichier est constitu=E9 de plusieurs onglets (=3Dfamille), et chaque
onglet est dispos=E9 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" =E0 "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=E9 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=E9 de rouge (ou orange) a
vert.

Solution =E0 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=E9 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:\Macro\Fichier 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 =3D Workbooks.Open(NomFichier)
With Wk.Worksheets("ONGLET 3")
Ligne =3D .Columns(Col).Find(MaValeur, [C12], , _
, xlByColumns, xlNext).Row



End With

Ligne =3D 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=E9 en premier?

Peut on ecrire simplement: repeter cette manip de l'onglet 3 =E0 15 (les
deux premiers onglets =E9tant a ignorer)?

2 réponses

Avatar
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 wrote:
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)?


Avatar
lglux
On 15 oct, 14:43, lglux wrote:
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 wrote:



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 -