MaJ de données d'une feuille en comparant à une autre feuille

Résolu/Fermé
framel2324 Messages postés 46 Date d'inscription mardi 23 juin 2009 Statut Membre Dernière intervention 29 septembre 2015 - 11 mai 2015 à 21:55
 framel2324 - 18 mai 2015 à 19:10
Bonjour,

Ayant une mise a jour quotidienne de prévision, je fais appel a vos services.
pour être honnête, le problème est complexe et comporte de multiples requêtes. Je ne sais même pas si vba peut faire ce dont j'ai besoin.
Bref, voici la problématique :

J'ai du personnel en feuille 1, les mouvements prévisionnels en feuille 2 et les régions secondaires en feuille 3.
Les données à mettre à jour sont dans la feuille 1
Les nouvelles données que je reçois sont dans la feuille 2
Les éléments de la feuille 3 sont fixes

Les noms dans la colonne A de la feuille 1 ne peuvent pas être organisés par ordre alphabétique et ne sont pas tous les jours dans le même ordre.
Les noms de la feuille 2 ne sont également pas tous les jours dans le même ordre.
Voilà comment se présente le fichier :
Feuille 1
Ligne 1
Col A : Noms
Col B : Région
Col C : Véhicule
Col D : Région secondaire
Col E : Prévisions

Feuille 2
Ligne 1
Col A : Noms
Col B : Aujourd'hui
Col c : Aujourd'hui + 1
Col D : Aujourd'hui + 2
Col E : Aujourd'hui + 3
Col F : Aujourd'hui + 4
Col G : Véhicule

Feuil 3
Ligne 1
Col A : Régions Secondaires (valeurs forcément différentes de Région)

j'ai commence à écrire un bout de code, spécifiant que chaque cellule comportant un "-" soit remplacé par la valeur de la cellule située à sa gauche.
Ce qui donne ceci (il y a surement mieux, mais vu mes piètres connaissances en vba, cela a l'avantage de fonctionner)

For ligne = 1 To Sheets("Feuil2").Range("A1").End(xlDown).Row
For ligne2 = ligne + 1 To Sheets("Feuil2").Range("A1").End(xlDown).Row
If Sheets("Feuil2").Range("C" & ligne2).Value = "-" Then
Range("C" & ligne2).Value = Range("B" & ligne2).Value
End If
If Sheets("Feuil2").Range("D" & ligne2).Value = "-" Then
Range("D" & ligne2).Value = Range("C" & ligne2).Value
End If
If Sheets("Feuil2").Range("E" & ligne2).Value = "-" Then
Range("E" & ligne2).Value = Range("D" & ligne2).Value
End If
If Sheets("Feuil2").Range("F" & ligne2).Value = "-" Then
Range("F" & ligne2).Value = Range("E" & ligne2).Value
GoTo Suite
End If
If Sheets("Feuil2").Range("B" & Ligne2).Value = "" Then
GoTo Suite1
End If

Suite1:
Next Ligne2
GoTo Fin

Suite:
Next ligne

Fin:

Le problème vient après.
J'ai 5 possibilités de mouvement que j'ai indiquées dans la feuille 2.

Possibilité 1 :

En feuille 1
COL A : Thomas (ligne 5)
COL B : 2
Col C : Moto
Col D :
Col E :

En feuille 2
Col A : Thomas (ligne 3)
Col B : 2
Col C : 1/Voiture (il va donc changer de région et de véhicule)
Col D : -
Col E : -
Col F : 21
Col G : Moto

On voit que Thomas, en J+1, va de la région 2 a la région 1 et qu'il aura une voiture.
Il faut indiquer , à la ligne de Thomas, la valeur "1" dans la feuille 1 colonne B mais également "voiture"dans la colonne C
On peut voit également que Thomas va en région 21 mais après J + 1.
Comme région 21 est une valeur de la colonne A de la feuille 3, je dois indiquer "arrivée a Région 21 le 14 mai (valeur de la date en ligne 1 / feuille 2)" dans la feuille 1 a la ligne de Thomas, colonne E

Possibilité 2 :
En feuille 1
Col A : Henri (ligne 6)
Col B : 1
Col C : Scooter
Col D :
Col E :

En feuille 2
Col A : Henri (ligne 2)
Col B : 1
Col C : -
Col D : 2 (il change de région)
Col E : 22 (Arrivée en région secondaire)
Col F : -
Col G : Scooter

Avec mon début de macro, comme il y a un "-" a J+1, c'est qu'il reste dans la même région demain. Comme la valeur ne correspond pas a une valeur de la colonne Région secondaire de la feuille 3, on ne touche pas , dans la feuille 1 à la ligne de Henri, à la valeur de la colonne B.
Par contre dans la feuille 2, on peut voit également que Henri va en région secondaire 21 mais après J + 1. On ne tient pas compte d'un changement de région "principale"
Comme région 21 est une valeur de la colonne A de la feuille 3, je dois indiquer "arrivée à Région 21 le 13 mai (valeur de la date en ligne 1 de la feuille 2)" dans la feuille 1 a la ligne de Henri, colonne E.

Possibilité 3 :
En feuille 1
COL A : Jef (ligne 3)
COL B : 3
Col C : Voiture
Col C :
Col D :

En feuille 2
Col A : Jef (ligne 4)
Col B : 2
Col C : -
Col D : -
Col E : 1
Col F : -
Col G : Voiture

Avec mon début de macro, comme il y a un "-" a J+1, c'est qu'il reste dans la même région demain. Par contre, aucun déplacement d'ici J+4 dans une région secondaire. Donc, on ne change aucune donnée a la feuille 1 ligne de Jef

Possibilité 4 :
COL A : Alain (ligne 2)
COL B :
Col C : Voiture
Col D : 23 (Région secondaire)
Col E :

En feuille 2
Col A : Jef (ligne 4)
Col B : 2
Col C : -
Col D : -
Col E : 1
Col F : -
Col G : Voiture
Avec mon début de macro, comme il y a un "-" a J+1, c'est qu'il reste dans la même région demain.
Comme la région appartient a la colonne A de la feuille 3, on indique sur la feuille 1 a la ligne de Alain, la valeur 23 en colonne D
Également, on voit qu'il va en région principale (n'appartenant pas a la colonne A feuille 3) après J+1.
Donc il faut indiquer en feuille 1 a la ligne de Alain "jusqu'au 13 Mai (valeur de la date en ligne 1 / feuille 2)

Possibilité 5 :
COL A : Louis (ligne 7)
COL B : 1
Col C : Voiture
Col D :
Col E :

En feuille 2
Col A : Louis (ligne 7)
Col B : 1
Col C : -/Moto
Col D : -
Col E : -
Col F : -
Col G : Voiture
On voit que Louis, en J+1, ne change pas de région mais qu'il aura une moto.
Il faut indiquer , à la ligne de Louis, la valeur "moto" dans la feuille 1 colonne C et ne pas toucher à la colonne B.

Je bloque déjà car je n'arrive pas a intégrer la recherche d'une valeur en fonction d'une variable (comparer Sheets("Feuil2").Range("B") & Ligne2.Value avec une valeur de la colonne A de la feuille 3)
Ensuite; je ne sais pas comment, lorsqu'il y a changement dans une ligne de la feuille 2, affecter le changement à la ligne pour le même nom dans la feuille 1

Vous l'aurez compris, je débute vraiment en vba

Ce serait donc avec grand plaisir que je prendrai votre aide et vos conseils pour avancer sur le sujet.

S'il y a un moyen de vous transmettre le fichier, dites-moi comment faire.
Encore mille excuses pour ces explications longues et je l'espère pas trop compliquées, mais je n'ai pas trouvé de meilleur moyen pour vous l'exposer

Bonne soirée et encore merci par avance

A voir également:

4 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 310
12 mai 2015 à 08:59
Bonjour
S'il y a un moyen de vous transmettre le fichier, dites-moi comment faire.
Mettre le classeur sans données confidentielles en pièce jointe sur https://www.cjoint.com/
et coller le lien proposé dans le message de réponse

0
framel2324 Messages postés 46 Date d'inscription mardi 23 juin 2009 Statut Membre Dernière intervention 29 septembre 2015 2
Modifié par framel2324 le 12/05/2015 à 10:02
Voila le fichier de test en question.

https://www.cjoint.com/c/EEmkiXcYd3i

J'ai avance par rapport a hier soir, en trouvant comment recuperer le nom de la feuille 2 et modifier une donnee de ce nom dans la feuille 1

Dans la macro, j'ai ecrit en commentaire une partie de mon probleme.
Il y a des commandes aue je ne connais pas, raison pour laquelle ce sont des commentaires :)

je continue de me creuser la tete et vous donnerai un fichier a our si je trouve quelque chose

Merci pour votre aide en tout cas
0
framel2324 Messages postés 46 Date d'inscription mardi 23 juin 2009 Statut Membre Dernière intervention 29 septembre 2015 2
13 mai 2015 à 08:13
Bonjour,

apres quelques recherches, j'ai trouve la methode Find.
Sachant que je veux comparer les cellules d'une ligne de la feuille 2 avec les cellules de la colonne A de la feuille 3, et si il y a une concordance, recuperer cette valeur, j'ai ecrit ces lignes, mais ca ne fonctionne pas :

Set Creg1 = Sheets("Feuil2").Range("C" & Ligne2).Find(Sheets("Feuil3").Columns("A"))
Set Creg2 = Sheets("Feuil2").Range("D" & Ligne2).Find(Sheets("Feuil3").Columns("A"))
Set Creg3 = Sheets("Feuil2").Range("E" & Ligne2).Find(Sheets("Feuil3").Columns("A"))
Set Creg4 = Sheets("Feuil2").Range("F" & Ligne2).Find(Sheets("Feuil3").Columns("A"))

Je pensais que, comme a la cellule E2, j'ai la valeur 22 (donc appartenant a la colonne 3 de la feuille 3), Creg3 serait egal a 22, mais non.
Pouvez-vous m'expliquer la ou je me trompe svp ?

L'idee etant de recuperer la valeur en Creg1x et la copier dans une cellule de la feuille 1

Merci pour votre aide
0
framel2324 Messages postés 46 Date d'inscription mardi 23 juin 2009 Statut Membre Dernière intervention 29 septembre 2015 2
14 mai 2015 à 09:09
Bonjour,
j'ai reussi a pondre une grosse partie du code en srcutant moultes pages internet expliquant les differentes commandes dont j'avais besoin.
J'imagine qu'il doit y avoir plus simple et plus propre mais ca fonctionne.

Je vous mets donc un fichier excel en pj.

https://www.cjoint.com/c/EEojsoxsdpp

Me reste deux derniers problemes que, malgre toutes mes recherches, je n'arrive pas a solutionner.

1 / Si une cellule ( en feuille 2) contient un "_", je voudrais recuperer la partie a gauche du "_" et la copier en feuille 1, soit en colonne 2, soit en colonne 4, en fonction de sa valeur, et prendre la partie a droite du "_" et la copier dans la colonne C.

2/ Si la case en feuille 1, colonne E a ete modifiee, alors colorier toute la ligne en jaune, sinon, ne colorier la ligne que jusqu'a la colonne D.

J'espere que vous pourrew m'aider car je tourne en rond et ne sais pas du tout comment gerer ces 2 problematiques

Bonne journee
0
framel2324 Messages postés 46 Date d'inscription mardi 23 juin 2009 Statut Membre Dernière intervention 29 septembre 2015 2
14 mai 2015 à 16:59
J'ai reussi a gerer la problematique 1
Pour la deuxieme, je n'y arrive decidement pas

J'arrive a colorier une cellule grace a la commande
Sheets("Feuil1").Cells(Name1, 1).Interior.Color = 65585

Mais pour en colorier plusieurs de la meme ligne, pas moyen, malgre les tests tous les tests que j'ai fait (ci-dessous)
Sheets("Feuil1").Range("LigneAna:A" & "LigneAna:J").Interior.Color = 65585

Sheets("Feuil1").Range(Cells(Name1, 1), Cells(Name1, 5)).Interior.Color = 65585

Range("A" & Name1 & ":E" & Name1).Interior.Color = 65585

Sheets("Feuil1").Range(Cells(Name1, 1) & Cells(Name1, 10)).Interior.Color = 65585

Sheets("Feuil1").Range(LigneAna & 1).Interior.Color = 65585

Sheets("Feuil1").Range(Cells(LigneAna, A) & Cells(LigneAna, J)).Interior.Color = 65585

Sheets("Feuil1").Range("LigneAna & A" & "LigneAna & J").Interior.Color = 65585

Sheets("Feuil1").Range(Name1 & LigneAna).Row.Interior.Color = 65585

A chaque fois, j'ai droit a une erreur. Ou est-ce que je rate le coche ??
De l'aide serait vraiment la bienvenue

Merci d'avance
0
Bonsoir,

apres de multiples prises de cerveau et de recherches en tout genre, j'ai resolu mon probleme.
Vous pouvez donc clore le sujet.
Merci et bonne soiree
0