Pb de macro pour comparer les données de deux feuilles
Résolu/Fermé
mstecluque
Messages postés
73
Date d'inscription
mardi 9 juin 2015
Statut
Membre
Dernière intervention
28 juillet 2015
-
15 juin 2015 à 15:13
mstecluque Messages postés 73 Date d'inscription mardi 9 juin 2015 Statut Membre Dernière intervention 28 juillet 2015 - 1 juil. 2015 à 09:45
mstecluque Messages postés 73 Date d'inscription mardi 9 juin 2015 Statut Membre Dernière intervention 28 juillet 2015 - 1 juil. 2015 à 09:45
A voir également:
- Pb de macro pour comparer les données de deux feuilles
- Deux comptes whatsapp - Guide
- Effacer les données de navigation - Guide
- Macro word - Guide
- Macro logiciel - Télécharger - Organisation
- Fusionner deux feuilles excel - Guide
9 réponses
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 303
15 juin 2015 à 15:29
15 juin 2015 à 15:29
Bonjour
As tu tenté la comparaison avec on objet dictionary ?
transféré dans forum Programmation/vba
As tu tenté la comparaison avec on objet dictionary ?
transféré dans forum Programmation/vba
mstecluque
Messages postés
73
Date d'inscription
mardi 9 juin 2015
Statut
Membre
Dernière intervention
28 juillet 2015
16 juin 2015 à 13:10
16 juin 2015 à 13:10
Je suis toujours dans la même situation.
Je me suis penchée sur les filtres avancés, les dictionnary.
Je rame toujours!
Je me suis penchée sur les filtres avancés, les dictionnary.
Je rame toujours!
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 303
16 juin 2015 à 14:05
16 juin 2015 à 14:05
Sauf erreur de ma part, le classeur joint rest le classeur une fois la mise à jour effectuée: avec je ne peux rien faire ou perdre du temps à mettre des données bidon...
mstecluque
Messages postés
73
Date d'inscription
mardi 9 juin 2015
Statut
Membre
Dernière intervention
28 juillet 2015
16 juin 2015 à 14:24
16 juin 2015 à 14:24
C'est pas faux...
https://www.cjoint.com/c/EFqmxNbin2C
C'est le tableau de la deuxième feuille qui subit les modifications
https://www.cjoint.com/c/EFqmxNbin2C
C'est le tableau de la deuxième feuille qui subit les modifications
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 303
16 juin 2015 à 15:26
16 juin 2015 à 15:26
Ok, merci je regarde le tout tout à l'heure ou demain après-midi
mstecluque
Messages postés
73
Date d'inscription
mardi 9 juin 2015
Statut
Membre
Dernière intervention
28 juillet 2015
16 juin 2015 à 16:04
16 juin 2015 à 16:04
merci beaucoup
ccm81
Messages postés
10851
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
16 avril 2024
2 404
16 juin 2015 à 17:24
16 juin 2015 à 17:24
Bonjour à tous les deux
A tester en attendant la solution de Michel que je salue au passage
http://www.cjoint.com/c/EFqpxA61P0g
Le code est dans le Module 1
Cdlmnt
A tester en attendant la solution de Michel que je salue au passage
http://www.cjoint.com/c/EFqpxA61P0g
Le code est dans le Module 1
Cdlmnt
mstecluque
Messages postés
73
Date d'inscription
mardi 9 juin 2015
Statut
Membre
Dernière intervention
28 juillet 2015
17 juin 2015 à 08:45
17 juin 2015 à 08:45
Merci. A part la couleur que j'ai du changer pcq elle ne s'affichait pas, tout marche.
Maintenant il faut juste que je comprenne bien le code.
Maintenant il faut juste que je comprenne bien le code.
mstecluque
Messages postés
73
Date d'inscription
mardi 9 juin 2015
Statut
Membre
Dernière intervention
28 juillet 2015
17 juin 2015 à 08:50
17 juin 2015 à 08:50
bon en fait ça marche pas vraiment, mais c'est pas grave, c'est déjà un bon début avec lequel je vais pouvoir continuer.
Merci beaucoup
Merci beaucoup
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
mstecluque
Messages postés
73
Date d'inscription
mardi 9 juin 2015
Statut
Membre
Dernière intervention
28 juillet 2015
19 juin 2015 à 09:23
19 juin 2015 à 09:23
Bonjour,
Alors j'ai essayé d'avancer ces derniers jours en mixant mon code avec celui de ccm81. Un échec. Du coup depuis ce matin, je fais le contraire, je rajoute à son code ce qui y manque.
Bien évidemment ça ne marche pas.
J'ai voulu ajouter unboucle que chacune des lignes de mon tableau de mise à jour des commandes, pour que les lignes avec des dates de livraison antérieures à aujourd'hui soient effacées, et que pour chaque ligne créée précédemment, on enlève le fond coloré ==> ECHEC
Et surtout je voudrais rajouter mes conditions de copie des lignes. Mais encore une fois, j'ai l'impression de bien faire alors que pas du tout...
Je vous mets le code où j'en suis actuellement.
Si vous avez un peu de temps pour me dire pourquoi ça ne fonctionne pas, merci d'avance !
Alors j'ai essayé d'avancer ces derniers jours en mixant mon code avec celui de ccm81. Un échec. Du coup depuis ce matin, je fais le contraire, je rajoute à son code ce qui y manque.
Bien évidemment ça ne marche pas.
J'ai voulu ajouter unboucle que chacune des lignes de mon tableau de mise à jour des commandes, pour que les lignes avec des dates de livraison antérieures à aujourd'hui soient effacées, et que pour chaque ligne créée précédemment, on enlève le fond coloré ==> ECHEC
Et surtout je voudrais rajouter mes conditions de copie des lignes. Mais encore une fois, j'ai l'impression de bien faire alors que pas du tout...
Je vous mets le code où j'en suis actuellement.
Si vous avez un peu de temps pour me dire pourquoi ça ne fonctionne pas, merci d'avance !
Option Explicit
Option Base 1
Public Const FS = "Suivi des commandes"
Const lidebFS = 5
Const coId = "A"
Const coAA = "T" 'déclare comme constante la colonne W pour la colonne des Annulations AMCOR
Const coPL = "U" 'déclare comme constante la colonne W pour la colonne de Pas de livraison
Const coDL = "W" 'déclare comme constante la colonne W pour la colonne de Date de livraison réelle
Public Const FM = "Mise à Jour Commandes"
Public Const lidebFM = 3
Public Const cofinFM = 7
Const coulFM = 23
Public Sub MAJCommandes()
Dim liFS As Long, lifinFS As Long
Dim id As Long
Dim liFM As Long, lifinFM As Long, coFM As Long
Dim objFM As Object, liobjFM As Long
Dim TcoFS()
'Début de la macro
Application.ScreenUpdating = False
'liste des n° de colonnes dans FS qui sont dans FM
TcoFS = Array(1, 3, 6, 8, 17, 22, 23)
'On vide les valeurs inutiles du tableau MAJ et on enlève le fond coloré
For liFM = lidebFM To lifinFM
'On enlève le fond coloré
Range(liFM).Select
Selection.Interior.ColorIndex = xlNone
'On enlève la ligne si date livraison<AUJOURDHUI
If Sheets(FM).Cells(liFM, coDL).Value < Date Then
Range(liFM).Select
Selection.Delete Shift:=xlUp
End If
' dernière ligne de FS
lifinFS = Sheets(FS).Cells(Rows.Count, 1).End(xlUp).Row
'On parcourt toutes les lignes de FS
For liFS = lidebFS To lifinFS
' On donne la valeur de l'identificateur de cette ligne à id
id = Sheets(FS).Cells(liFS, coId).Value
' recherche de id dans colonne coId de FM
Set objFM = Sheets(FM).Columns(coId).Find(id, , , xlWhole)
If (Sheets(FS).Cells(liFS, coDL).Value = Date Or Sheets(FS).Cells(liFS, coDL).Value = "") And Sheets(FS).Cells(liFS, coAA).Value = "" And Sheets(FS).Cells(liFS, coPL).Value = "" Then
If objFM Is Nothing Then
' si id non trouvé,
'copie de cet id dans FM
lifinFM = Sheets(FM).Cells(Rows.Count, 1).End(xlUp).Row
For coFM = 1 To cofinFM
Sheets(FS).Cells(liFS, TcoFS(coFM)).Copy
Sheets(FM).Cells(lifinFM + 1, coFM).PasteSpecial Paste:=xlPasteValues
Sheets(FM).Cells(lifinFM + 1, coFM).Interior.ColorIndex = coulFM
Next coFM
Else
' si id trouve modification+couleur éventuelle de cet id dans FM
' ligne de id dans FM
liobjFM = objFM.Row
' boucle sur les colonnes de FM
For coFM = 1 To cofinFM
' si données differentes on colorie la cellule
If Sheets(FS).Cells(liFS, TcoFS(coFM)).Value <> Sheets(FM).Cells(liobjFM, coFM).Value Then
Sheets(FM).Cells(liobjFM, coFM).Interior.ColorIndex = coulFM
End If
' on copie la cellule - dans tous les cas
Sheets(FS).Cells(liFS, TcoFS(coFM)).Copy
Sheets(FM).Cells(liobjFM, coFM).PasteSpecial Paste:=xlPasteValues
Next coFM
End If
End If
Next liFS
Next liFM
Application.ScreenUpdating = True
End Sub
ccm81
Messages postés
10851
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
16 avril 2024
2 404
Modifié par ccm81 le 19/06/2015 à 10:32
Modifié par ccm81 le 19/06/2015 à 10:32
Bonjour
Trois remarques
1. La colonne de date de livraison réelle est V et non W (liste des constantes) à moins que tu n'aies modifié la structure de ta feuille
2. Le bloc
est apparemment indépendant de la suite (il n'y a pas d'autres occurrences de liFM dans la suite) donc, le terminer avec Next liFM après le End if (et supprimer Next liFM après le Next liFS), ça fera plus propre
'On vide les valeurs inutiles du tableau MAJ et on enlève le fond coloré
3. En début de boucle
For liFM = lidebFM To lifinFM
liFM n'est pas connu donc vaut 0
> En simplifiant un peu, ça donne
Il y en a certainement d'autres
Cdlmnt
Trois remarques
1. La colonne de date de livraison réelle est V et non W (liste des constantes) à moins que tu n'aies modifié la structure de ta feuille
2. Le bloc
'On vide les valeurs inutiles du tableau MAJ et on enlève le fond coloré For liFM = lidebFM To lifinFM 'On enlève le fond coloré Range(liFM).Select Selection.Interior.ColorIndex = xlNone 'On enlève la ligne si date livraison<AUJOURDHUI If Sheets(FM).Cells(liFM, coDL).Value < Date Then Range(liFM).Select Selection.Delete Shift:=xlUp End If
est apparemment indépendant de la suite (il n'y a pas d'autres occurrences de liFM dans la suite) donc, le terminer avec Next liFM après le End if (et supprimer Next liFM après le Next liFS), ça fera plus propre
'On vide les valeurs inutiles du tableau MAJ et on enlève le fond coloré
For liFM = lidebFM To lifinFM 'On enlève le fond coloré Range(liFM).Select Selection.Interior.ColorIndex = xlNone 'On enlève la ligne si date livraison<AUJOURDHUI If Sheets(FM).Cells(liFM, coDL).Value < Date Then Range(liFM).Select Selection.Delete Shift:=xlUp End If Next liFM
3. En début de boucle
For liFM = lidebFM To lifinFM
liFM n'est pas connu donc vaut 0
> En simplifiant un peu, ça donne
' dernière ligne de la feuille FM lifinFM = Sheets(FM).Range(coId & Rows.Count).End(xlUp).Row 'On vide les valeurs inutiles du tableau MAJ et on enlève le fond coloré For liFM = lidebFM To lifinFM 'On enlève le fond coloré Rows(liFM).Interior.ColorIndex = xlNone 'On enlève la ligne si date livraison<AUJOURDHUI If Sheets(FM).Cells(liFM, coDL).Value < Date Then Rows(liFM).Delete End If Next liFM
Il y en a certainement d'autres
Cdlmnt
mstecluque
Messages postés
73
Date d'inscription
mardi 9 juin 2015
Statut
Membre
Dernière intervention
28 juillet 2015
19 juin 2015 à 11:47
19 juin 2015 à 11:47
Alors pour le premier point, c'est bien W, j'ai du ajouter une colonne pour une condition.
Par contre j'avais oublié de modifier mes numéros de colonnes dans TcoFS.
Pour le deuxième, je me suis rendue compte direct après mon post de mon oubli de déclaration.
Au tout début de mes essais j'avais bien rendu ce bloc indépendant, mais vu mon nombre d'échecs, j'ai essayé différemment.
Donc j'ai tout corrigé, comme il faut, et ça marche pour cette première partie de code.
La seule chose qui ne marche pas, c'est toujours ma condition :
J'ai modifié d'autres choses, donc je remets ma macro complète, si qqun a une idée de pourquoi ça ne veut pas marcher :
Par contre j'avais oublié de modifier mes numéros de colonnes dans TcoFS.
Pour le deuxième, je me suis rendue compte direct après mon post de mon oubli de déclaration.
Au tout début de mes essais j'avais bien rendu ce bloc indépendant, mais vu mon nombre d'échecs, j'ai essayé différemment.
Donc j'ai tout corrigé, comme il faut, et ça marche pour cette première partie de code.
La seule chose qui ne marche pas, c'est toujours ma condition :
If (Sheets(FS).Cells(liFS, coDL).Value = Date Or Sheets(FS).Cells(liFS, coDL).Value = "") And Sheets(FS).Cells(liFS, coAA).Value = "" And Sheets(FS).Cells(liFS, coPL).Value = "" Then
J'ai modifié d'autres choses, donc je remets ma macro complète, si qqun a une idée de pourquoi ça ne veut pas marcher :
Option Explicit
Option Base 1
Public Const FS = "Suivi des commandes"
Const lidebFS = 5
Const coId = "A"
Const coAA = "T" 'déclare comme constante la colonne W pour la colonne des Annulations AMCOR
Const coPL = "U" 'déclare comme constante la colonne W pour la colonne de Pas de livraison
Const coDL = "W" 'déclare comme constante la colonne W pour la colonne de Date de livraison réelle
Public Const FM = "Mise à Jour Commandes"
Public Const lidebFM = 3
Public Const cofinFM = 7
Const coulFM = 23
Public Sub MAJCommandes()
Dim liFS As Long, lifinFS As Long
Dim id As Long
Dim liFM As Long, lifinFM As Long, coFM As Long
Dim objFM As Object, liobjFM As Long
Dim TcoFS()
'Début de la macro
Application.ScreenUpdating = False
'liste des n° de colonnes dans FS qui sont dans FM
TcoFS = Array(1, 3, 6, 16, 17, 23, 24)
' dernière ligne de FM
lifinFM = Sheets(FM).Cells(Rows.Count, 1).End(xlUp).Row
'On parcourt le tableau FM
For liFM = lidebFM To lifinFM
'On enlève le fond coloré
Rows(liFM).Interior.ColorIndex = xlNone
'On enlève la ligne si date livraison>AUJOURDHUI
If Sheets(FM).Cells(liFM, coDL).Value > Date Then
Rows(liFM).Delete Shift:=xlUp
End If
Next liFM
' dernière ligne de FS
lifinFS = Sheets(FS).Cells(Rows.Count, 1).End(xlUp).Row
'On parcourt toutes les lignes de FS
For liFS = lidebFS To lifinFS
' On donne la valeur de l'identificateur de cette ligne à id
id = Sheets(FS).Cells(liFS, coId).Value
' recherche de id dans colonne coId de FM
Set objFM = Sheets(FM).Columns(coId).Find(id, , , xlWhole)
If (Sheets(FS).Cells(liFS, coDL).Value = Date Or Sheets(FS).Cells(liFS, coDL).Value = "") And Sheets(FS).Cells(liFS, coAA).Value = "" And Sheets(FS).Cells(liFS, coPL).Value = "" Then
' si id non trouvé
If objFM Is Nothing Then
'Do While (Cells(fin + 1, 1) <> "" And Cells(fin + 1, 1) = Cells(fin, 1))
'copie de cet id dans FM
lifinFM = Sheets(FM).Cells(Rows.Count, 1).End(xlUp).Row
For coFM = 1 To cofinFM
Sheets(FS).Cells(liFS, TcoFS(coFM)).Copy
Sheets(FM).Cells(lifinFM + 1, coFM).PasteSpecial Paste:=xlPasteValues
Sheets(FM).Cells(lifinFM + 1, coFM).Interior.ColorIndex = coulFM
Next coFM
' si id trouve modification+couleur éventuelle de cet id dans FM
Else
' ligne de id dans FM
liobjFM = objFM.Row
' boucle sur les colonnes de FM
For coFM = 1 To cofinFM
' si données differentes on colorie la cellule
If Sheets(FS).Cells(liFS, TcoFS(coFM)).Value <> Sheets(FM).Cells(liobjFM, coFM).Value Then
Sheets(FM).Cells(liobjFM, coFM).Interior.ColorIndex = coulFM
End If
' on copie la cellule - dans tous les cas
Sheets(FS).Cells(liFS, TcoFS(coFM)).Copy
Sheets(FM).Cells(liobjFM, coFM).PasteSpecial Paste:=xlPasteValues
Next coFM
End If
End If
Next liFS
Application.ScreenUpdating = True
End Sub
mstecluque
Messages postés
73
Date d'inscription
mardi 9 juin 2015
Statut
Membre
Dernière intervention
28 juillet 2015
22 juin 2015 à 15:41
22 juin 2015 à 15:41
Nouveau point sur ma macro :
le dernier problème que j'avais vendredi? un pb d'opérateur numérique tout simplement.
Aujourd'hui, c'est plus compliqué :
je me suis rendue compte que ma condition
ne risquait pas de marcher, puisque je prennais liFM dans la feuille FM et coDL dans la feuille FS.
Du coup c'est mon premier pb du jour. J'ai tenté de déclarer un autre nom pour cette variable, j'ai tenté de changé ma formule en
si date - date de liv > 0 alors on efface
J'ai tenté pleins de choses différentes, je patauge dans la semoule : je n'arrive pas à effacer la bonne ligne et j'ai planté plusieurs fois excel...
Deuxième problème du jour :
J'ai ajouté des conditions à la fin de mon code pour prendre en compte les annulations de l'entreprise ou la non livraison des fournisseurs.
Dès que les conditions sont vraies, à la mise à jour suivante, ça cafouille. Je pense que j'ai un problème de pointeur qui se décale à chaque tour.
Si qqun veut m'aider, je mettrai mon code et mon doc dans un prochain post. Sinon je continue mes pataugages et cafouillages...
le dernier problème que j'avais vendredi? un pb d'opérateur numérique tout simplement.
Aujourd'hui, c'est plus compliqué :
je me suis rendue compte que ma condition
'On enlève la ligne si date livraison>AUJOURDHUI
If Sheets(FM).Cells(liFM, coDL).Value > Date Then
Rows(liFM).Delete Shift:=xlUp
End If
ne risquait pas de marcher, puisque je prennais liFM dans la feuille FM et coDL dans la feuille FS.
Du coup c'est mon premier pb du jour. J'ai tenté de déclarer un autre nom pour cette variable, j'ai tenté de changé ma formule en
si date - date de liv > 0 alors on efface
J'ai tenté pleins de choses différentes, je patauge dans la semoule : je n'arrive pas à effacer la bonne ligne et j'ai planté plusieurs fois excel...
Deuxième problème du jour :
J'ai ajouté des conditions à la fin de mon code pour prendre en compte les annulations de l'entreprise ou la non livraison des fournisseurs.
Dès que les conditions sont vraies, à la mise à jour suivante, ça cafouille. Je pense que j'ai un problème de pointeur qui se décale à chaque tour.
Si qqun veut m'aider, je mettrai mon code et mon doc dans un prochain post. Sinon je continue mes pataugages et cafouillages...
mstecluque
Messages postés
73
Date d'inscription
mardi 9 juin 2015
Statut
Membre
Dernière intervention
28 juillet 2015
24 juin 2015 à 09:24
24 juin 2015 à 09:24
Bonjour à tous!
Un de mes derniers messages j'espère : ça y est ça marche!!
Sauf un tout petit pb évidemment : mon code ne respecte pas la condition de la ligne 90. Ca passe toujours pas l'autre côté.
Alors que la même chose fonctionne ligne 74.
Si qqun à une explication, je suis preneuse.
Merci d'avance.
Un de mes derniers messages j'espère : ça y est ça marche!!
Sauf un tout petit pb évidemment : mon code ne respecte pas la condition de la ligne 90. Ca passe toujours pas l'autre côté.
Alors que la même chose fonctionne ligne 74.
Si qqun à une explication, je suis preneuse.
Merci d'avance.
Option Explicit 'force la déclaration des variables
Option Base 1 'pour commencer l'index des tableaux à 1 au lieu de 0
Public Const FS = "Suivi des commandes" 'déclare comme constante FS pour Suivi de commandes
Const lidebFS = 5 'déclare comme constante la ligne 5 comme ligne de début de parcours pour la feuille FS
Const coId = "A" 'déclare comme constante la colonne A pour la colonne des identifiants
Const coDL = "W" 'déclare comme constante la colonne W pour la colonne de Date de livraison réelle
Const coProb = "Y" 'déclare comme constante la colonne Y pour la colonne de Problème à signaler
Const coProbA = "Z" 'déclare comme constante la colonne Z pour la colonne de Problème déjà affiché
Public Const FM = "Mise à Jour Commandes" 'déclare comme constante FM pour Mise à jour Commandes
Public Const lidebFM = 3 'déclare comme constante la ligne 3 comme ligne de début de parcours pour la feuille FM
Public Const codebFM = 1 'déclare comme constante la colonne 1 comme colonne de début de parcours pour la feuille FM
Public Const cofinFM = 8 'déclare comme constante la colonne 8 comme colonne de fin de parcours pour la feuille FM
Const coDLFM = "F"
Const coulNouv = 23 'déclare comme constante la couleur de fond bleu en cas de nouveauté
Const coulPb = 22 'déclare comme constante la couleur de fond rouge en cas de problème
Public Sub date_liv()
Dim liFS As Long 'déclare la variable liFS (incrément)
Dim lifinFS As Long 'déclare la variable ligne de fin de FS
Dim id As Long 'déclare l'identifiant
Dim liFM As Long 'déclare la variable liFM (incrément)
Dim lifinFM As Long 'déclare la variable ligne de fin de FM
Dim coFM As Long 'déclare la variable coFM (incrément)
Dim objFM As Object 'déclare l'objet FM
Dim liObjFM As Long 'déclare la variable liObjFM (incrément)
Dim TcoFS() 'déclare la variable TcoFS (tableau des colonnes FS)
'--Début de la macro
'Arrêt du rafraîchissement de l'écran (augmente la rapidité de la macro)
Application.ScreenUpdating = False
'Liste des n° de colonnes dans FS qui sont dans FM
TcoFS = Array(1, 3, 6, 16, 17, 23, 24, 25)
'Dernières lignes de FS et FM
lifinFS = Sheets(FS).Cells(Rows.Count, 1).End(xlUp).Row
lifinFM = Sheets(FM).Cells(Rows.Count, 1).End(xlUp).Row
'On appelle la fonction effacement
Call clear_tab
'On parcourt toutes les lignes de FS
For liFS = lidebFS To lifinFS
'On donne la valeur de l'identificateur de cette ligne à id
id = Sheets(FS).Cells(liFS, coId).Value
'Recherche de id dans colonne coId de FM
Set objFM = Sheets(FM).Columns(coId).Find(id, , , xlWhole)
If Sheets(FS).Cells(liFS, coProbA).Value = "" Then
'Si on ne trouve pas l'ID
If objFM Is Nothing Then
'Si la date de livraison est la date du jour ou une date postérieure
If Sheets(FS).Cells(liFS, coDL).Value = Date Or Sheets(FS).Cells(liFS, coDL).Value = "" Then
'On copie cet id dans FM
lifinFM = Sheets(FM).Cells(Rows.Count, 1).End(xlUp).Row
'Et pour chaque colonne de FM
For coFM = 1 To cofinFM
Sheets(FS).Cells(liFS, TcoFS(coFM)).Copy
Sheets(FM).Cells(lifinFM + 1, coFM).PasteSpecial Paste:=xlPasteValues
Next coFM
For coFM = 1 To cofinFM
If Sheets(FM).Cells(lifinFM + 1, cofinFM).Value = "" Then
Sheets(FM).Cells(lifinFM + 1, coFM).Interior.ColorIndex = coulNouv
Else
Sheets(FM).Cells(lifinFM + 1, coFM).Interior.ColorIndex = coulPb
End If
Next coFM
End If
' si id trouve modification+couleur éventuelle de cet id dans FM
Else
' ligne de id dans FM
liObjFM = objFM.Row
' boucle sur les colonnes de FM
For coFM = 1 To cofinFM
' si données différentes on colorie la cellule
If Sheets(FS).Cells(liFS, TcoFS(coFM)).Value <> Sheets(FM).Cells(liObjFM, coFM).Value Then
If Sheets(FM).Cells(liObjFM, cofinFM).Value <> "" Then
Sheets(FM).Cells(liObjFM, coFM).Interior.ColorIndex = coulPb
Else
Sheets(FM).Cells(liObjFM, coFM).Interior.ColorIndex = coulNouv
End If
End If
' on copie la cellule - dans tous les cas
Sheets(FS).Cells(liFS, TcoFS(coFM)).Copy
Sheets(FM).Cells(liObjFM, coFM).PasteSpecial Paste:=xlPasteValues
Next coFM
End If
If Sheets(FS).Cells(liFS, coProb).Value <> "" And Sheets(FS).Cells(liFS, coProbA).Value = "" Then
Sheets(FS).Cells(liFS, coProbA).Value = "Problème signalé"
End If
End If
Next liFS
'Redémarrage du rafraîchissement de l'écran
Application.ScreenUpdating = True
End Sub
'Fonction de nettoyage du tableau de FM
Sub clear_tab()
'Déclarations des données
Dim liFM As Long, lifinFM As Long
'Dernière ligne de FM
lifinFM = Sheets(FM).Cells(Rows.Count, 1).End(xlUp).Row
'On parcourt toutes les lignes de FM
For liFM = lidebFM To lifinFM
'On enlève le fond coloré
Rows(liFM).Interior.ColorIndex = xlNone
'On enlève la ligne si date livraison>AUJOURDHUI
If Sheets(FM).Cells(liFM, coDLFM).Value < Date And Sheets(FM).Cells(liFM, coDLFM).Value <> "" Then
Rows(liFM).Delete Shift:=xlUp
liFM = liFM - 1
End If
If Sheets(FM).Cells(liFM, cofinFM).Value <> "" Then
Rows(liFM).Delete Shift:=xlUp
liFM = liFM - 1
End If
Next liFM
End Sub
mstecluque
Messages postés
73
Date d'inscription
mardi 9 juin 2015
Statut
Membre
Dernière intervention
28 juillet 2015
1 juil. 2015 à 09:45
1 juil. 2015 à 09:45
Pour ceux que ça intéresserait, je mets ma macro terminée.
Merci à vous pour votre aide.
Merci à vous pour votre aide.
Option Explicit 'force la déclaration des variables
Option Base 1 'pour commencer l'index des tableaux à 1 au lieu de 0
Public Const FS = "Suivi des commandes" 'déclare comme constante FS pour Suivi de commandes
Const lidebFS = 5 'déclare comme constante la ligne 5 comme ligne de début de parcours pour la feuille FS
Const coId = "A" 'déclare comme constante la colonne A pour la colonne des identifiants
Const coDL = "W" 'déclare comme constante la colonne W pour la colonne de Date de livraison réelle
Const coProb = "Y" 'déclare comme constante la colonne Y pour la colonne de Problème à signaler
Const coProbA = "Z" 'déclare comme constante la colonne Z pour la colonne de Problème déjà affiché
Public Const FM = "Mise à Jour Commandes" 'déclare comme constante FM pour Mise à jour Commandes
Public Const lidebFM = 3 'déclare comme constante la ligne 3 comme ligne de début de parcours pour la feuille FM
Public Const codebFM = 1 'déclare comme constante la colonne 1 comme colonne de début de parcours pour la feuille FM
Public Const cofinFM = 8 'déclare comme constante la colonne 8 comme colonne de fin de parcours pour la feuille FM
Const coDLFM = "F"
Const coulNouv = 23 'déclare comme constante la couleur de fond bleu en cas de nouveauté
Const coulPb = 22 'déclare comme constante la couleur de fond rouge en cas de problème
Public Sub date_liv()
Dim liFS As Long 'déclare la variable liFS (incrément)
Dim lifinFS As Long 'déclare la variable ligne de fin de FS
Dim id As Long 'déclare l'identifiant
Dim liFM As Long 'déclare la variable liFM (incrément)
Dim lifinFM As Long 'déclare la variable ligne de fin de FM
Dim coFM As Long 'déclare la variable coFM (incrément)
Dim objFM As Object 'déclare l'objet FM
Dim liObjFM As Long 'déclare la variable liObjFM (incrément)
Dim TcoFS() 'déclare la variable TcoFS (tableau des colonnes FS)
'--Début de la macro
'Arrêt du rafraîchissement de l'écran (augmente la rapidité de la macro)
Application.ScreenUpdating = False
'Liste des n° de colonnes dans FS qui sont dans FM
TcoFS = Array(1, 3, 6, 16, 17, 23, 24, 25)
'Dernières lignes de FS et FM
lifinFS = Sheets(FS).Cells(Rows.Count, 1).End(xlUp).Row
lifinFM = Sheets(FM).Cells(Rows.Count, 1).End(xlUp).Row
'On appelle la fonction effacement
Call clear_tab
'On parcourt toutes les lignes de FS
For liFS = lidebFS To lifinFS
'On donne la valeur de l'identificateur de cette ligne à id
id = Sheets(FS).Cells(liFS, coId).Value
'Recherche de id dans colonne coId de FM
Set objFM = Sheets(FM).Columns(coId).Find(id, , , xlWhole)
If Sheets(FS).Cells(liFS, coProbA).Value = "" Then
'Si on ne trouve pas l'ID
If objFM Is Nothing Then
'Si la date de livraison est la date du jour ou une date postérieure
If Sheets(FS).Cells(liFS, coDL).Value = Date Or Sheets(FS).Cells(liFS, coDL).Value = "" Then
'On copie cet id dans FM
lifinFM = Sheets(FM).Cells(Rows.Count, 1).End(xlUp).Row
'Et pour chaque colonne de FM
For coFM = 1 To cofinFM
Sheets(FS).Cells(liFS, TcoFS(coFM)).Copy
Sheets(FM).Cells(lifinFM + 1, coFM).PasteSpecial Paste:=xlPasteValues
Next coFM
For coFM = 1 To cofinFM
If Sheets(FM).Cells(lifinFM + 1, cofinFM).Value = "" Then
Sheets(FM).Cells(lifinFM + 1, coFM).Interior.ColorIndex = coulNouv
Else
Sheets(FM).Cells(lifinFM + 1, coFM).Interior.ColorIndex = coulPb
End If
Next coFM
End If
' si id trouve modification+couleur éventuelle de cet id dans FM
Else
' ligne de id dans FM
liObjFM = objFM.Row
' boucle sur les colonnes de FM
For coFM = 1 To cofinFM
' si données différentes on colorie la cellule
If Sheets(FS).Cells(liFS, TcoFS(coFM)).Value <> Sheets(FM).Cells(liObjFM, coFM).Value Then
' on copie la cellule
Sheets(FS).Cells(liFS, TcoFS(coFM)).Copy
Sheets(FM).Cells(liObjFM, coFM).PasteSpecial Paste:=xlPasteValues
If Sheets(FM).Cells(liObjFM, cofinFM).Value <> "" Then
Sheets(FM).Range(Cells(liObjFM, 1), Cells(liObjFM, coFM)).Interior.ColorIndex = coulPb
Else
Sheets(FM).Cells(liObjFM, coFM).Interior.ColorIndex = coulNouv
End If
Else
' on copie la cellule, dans tous les cas
Sheets(FS).Cells(liFS, TcoFS(coFM)).Copy
Sheets(FM).Cells(liObjFM, coFM).PasteSpecial Paste:=xlPasteValues
End If
Next coFM
End If
If Sheets(FS).Cells(liFS, coProb).Value <> "" And Sheets(FS).Cells(liFS, coProbA).Value = "" Then
Sheets(FS).Cells(liFS, coProbA).Value = "Problème signalé"
End If
End If
Next liFS
'Redémarrage du rafraîchissement de l'écran
Application.ScreenUpdating = True
End Sub
'Fonction de nettoyage du tableau de FM
Sub clear_tab()
'Déclarations des données
Dim liFM As Long, lifinFM As Long
'Dernière ligne de FM
lifinFM = Sheets(FM).Cells(Rows.Count, 1).End(xlUp).Row
'On parcourt toutes les lignes de FM
For liFM = lidebFM To lifinFM
'On enlève le fond coloré
Rows(liFM).Interior.ColorIndex = xlNone
'On enlève la ligne si date livraison>AUJOURDHUI
If Sheets(FM).Cells(liFM, coDLFM).Value < Date And Sheets(FM).Cells(liFM, coDLFM).Value <> "" Then
Rows(liFM).Delete Shift:=xlUp
liFM = liFM - 1
End If
'On enlève la ligne s'il y a eu un pb signalé
If Sheets(FM).Cells(liFM, cofinFM).Value <> "" Then
Rows(liFM).Delete Shift:=xlUp
liFM = liFM - 1
End If
Next liFM
End Sub
15 juin 2015 à 15:45
Et merci pour le transfert
15 juin 2015 à 16:03
pour voir,fais moi une maquette simplifiée avec 2 tableaux(1 colonne id, 1 colonne valeurs) en précisant bien quel tableau subirat des changements (couleur, valeur, saut de ligne...)
15 juin 2015 à 16:31
J'ai supprimé toutes les valeurs inutiles. Mais j'ai laissé le nécessaire pour les macros.
Merci d'avance