VBA détection d'écarts entre deux feuilles

océanne

XLDnaute Occasionnel
Bonjour mon forum préféré !

J'ai essayé d'assembler différents morceaux de codes que j'ai trouvé sur ....xld biensûr, pour parvenir à mon objectif.
J'y suis presque, mais j'ai un petit point qui coïnce, je m'explique :

Je veux restituer sur la feuille "Histo" les lignes en écart, entre les feuilles "source (sauv)" et "source" (quand la feuille source est mise à jour, je lance ma macro pour recenser les écarts avec la feuille source sauv)
Ma macro tourne pas tout à fait comme je le souhaite, il y a une condition que j'ai du mal paramétrer :

Quand j'apporte une modification sur la ligne x, mais que la date dans la colonne S de la ligne x n'est pas renseignée, je ne souhaite pas retenir la ligne traitée en écart dans la feuille "Histo"

If IsEmpty(Range("S" & Ligne).Value) Then <---- c'est là que ça va pas.
Range(Colonnes(i) & Ligne).Interior.ColorIndex = 8

Je vous joins un extrait de mon fichier avec ma macro, si une âme sensible avait la gentillesse de se pencher sur mon code.
D'avance merci
Océanne.
 

Pièces jointes

  • Gestion Historique Ecarts.xlsm
    43.1 KB · Affichages: 59

Hervé

XLDnaute Barbatruc
Re : VBA détection d'écarts entre deux feuilles

bonjour océanne:)

empty est utilisé pour vérifier si une variable est bien initialisée, exemple :

Code:
Dim a As String

MsgBox IsEmpty(a)'renvoi faux
MsgBox IsEmpty(b)'renvoi vrai

on l'utilise rarement pour tester une cellule, on lui préfère le grand classique range("A1")<>""

isempty renvoi vrai si la variable n'est pas initialisé, ce qui est ton cas puisque la cellule est vide.
donc ton test "If IsEmpty(Range("S" & Ligne)) Then" est vrai et le code se poursuit.

il te faut donc inversé la condition du if...then

If not IsEmpty(Range("S" & Ligne)) Then

je te conseillerai d'utiliser If Range("S" & Ligne) <> ""

a plus

ps : J'ai été clair ?
 

océanne

XLDnaute Occasionnel
Re : VBA détection d'écarts entre deux feuilles

Merci pour cette précision Hervé, effectivement la cellule en question n'est plus retournée avec un fond bleu.
Mais au delà de la couleur, j'attendais à ce que la ligne en question ne soit pas retournée du tout dans ma feuille "Histo"....ce qui malheureusement et le cas.
Je reformule, même si un correctif a été apporté sur la ligne x , à partir du moment ou sur cette ligne, la cellule Sx est vide, je néglige cette modification et ne souhaite pas qu'elle soit retournée comme écart dans la feuille "Histo"
J'espère avoir été claire.
Bonne soirée à tous.
 

Hervé

XLDnaute Barbatruc
Re : VBA détection d'écarts entre deux feuilles

re océanne :)

je viens d'ouvrir ta pièce jointe, j'aurais du le faire avant :)

joli code mais pas facile à lire de prime abord

2 choses :

la cellule de la colonne S que l'on test ici : If IsEmpty(Range("S" & Ligne).Value) Then doit être sur la feuille source ?

car là on lit celle de la feuille "écarts", en effet, tu sélectionnes cette feuille en début de code afin d'effacer les données, mais on ne retourne pas sur la feuille source, normal ?

la variable ligne lorsque ton code arrives sur la ligne posant souci, est initialisé à 3, je pense que ton ligne=ligne +1 est mal placé dans la boucle, mais j'ai pas été capable de corriger.

voici pour des premières pistes à tester.

j'essaye de te corriger tout ca, mais je te promet rien

a plus
 

océanne

XLDnaute Occasionnel
Re : VBA détection d'écarts entre deux feuilles

Merci pour ton retour aussi rapide sur ce fil Hervé.
Comme je l'ai expliqué dans mon premier message, j'ai assemblé différents bouts de code pour produire celui-ci et je t'avoue que j'ai du mal à bien maitriser l'ensemble, mais grosso-modo ça marche.
Après réflexion, si il te semble difficile d'apporter les correctifs attendus, ne perd pas ton temps sur mon code, d'autres "forumeurs" ont besoin de ton expertise.
J'ai la possibilité de mettre une évènementielle sur la feuille "écarts" avec If IsEmpty(Range("S" & Ligne).Value) ou plutôt If Range("S" & Ligne) <> "" comme tu me le conseilles plus haut.
Très bonne soirée à toi et encore merci
O.
 

Hervé

XLDnaute Barbatruc
Re : VBA détection d'écarts entre deux feuilles

re océanne

d'autres "forumeurs" ont besoin de ton expertise

tu parles d'un expert :D

je pense qu'il faut revoir ton code spaghetti (sans aucune critique de ma part, vu que j'en suis un spécialiste moi même)en profondeur. il est difficile de construire un code lisible en partant d'un patchwork, dur à relire et à maintenir dans l'avenir.

donne nous ton cahier des charges et on t'aidera avec plaisir, on est là pour ca

en plus je pense que tu n'est pas loin de ton résultat attendu, as tu regarder cette histoire de feuille active ?

a plus
 

océanne

XLDnaute Occasionnel
Re : VBA détection d'écarts entre deux feuilles

Bonjour le forum, bonjour Hervé,

Cahier des charges étant un peu présomptueux au regard de mon petit projet, voici plus en détails mon objectif :
La feuille « source » qui contient les données de travail, va vivre et l’utilisateur peut être amené à réaliser 3 types d’évolutions :
  • des créations de lignes (saisie de données dans les cellules des colonnes A à AH)
  • des suppressions de lignes
  • des modifications dans les cellules des lignes existantes pour les colonnes ("C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "Y", "Z", "AA", "AB")

La finalité étant de parvenir à identifier ces évolutions entre l’ouverture et la fermeture du fichier et à les lister dans une feuille « Histo »

  • Pour les créations en affichant la ligne complète créée et ajouter en cellule « AI » de cette ligne « création réalisée le XX/XX/XXXX à XXhXX » (le nom de l’utilisateur associée à la date et l’heure serait un plus)

  • Pour les suppression en affichant la ligne complète supprimée et ajouter en cellule « AI » de cette ligne « suppression réalisée le XX/XX/XXXX à XXhXX (le nom de l’utilisateur associée à la date et l’heure serait un plus)

  • Pour les modifications afficher selon les restrictions suivantes :
1) afficher toute modification réalisées dans les colonnes "C", "D", "E", "Y", "Z", "AA", "AB" et identifiée la ou les cellules modifiées sur fond jaune​
2) afficher seulement si une valeur est renseignée en colonne S, les modifications réalisées dans les colonnes "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T" et identifiée la ou les cellules modifiées sur fond bleu​
3) pour chaque modification listée, comme pour les créations et suppressions ajouter en cellule AI « modification réalisée le XX/XX/XXXX à XXhXX (le nom de l’utilisateur associée à la date et l’heure serait un plus)​

Voici Hervé, j’espère avoir été claire, merci pour ton investissement et pour ta patience.
N’hésite pas à si tu as besoin d’autres précisions
A noter : La méthode que j’ai adoptée dans la V1 de mon projet (dupliquer la feuille source pour effectuer l’inter-comparaison, transition par une feuille "écarts" avant incrémentation de la feuille "Histo") peut être complètement remise en cause si tu vois quelque chose de plus simple à mettre en œuvre.
O.
 

Discussions similaires

Statistiques des forums

Discussions
312 201
Messages
2 086 171
Membres
103 152
dernier inscrit
Karibu