XL pour MAC (RESOLU) Macro Pour Contrôler cohérence cellules

  • Initiateur de la discussion Initiateur de la discussion luno123
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

luno123

XLDnaute Occasionnel
Bonjour,

J'ai un contrôle récurrent que j'effectue sur des données importées (onglet BASE) de notre ERP. Des soucis d'affectation peuvent exister. Pour un contrôle rapide et efficace `, je souhaiterais:
- 1. j'alimente l'onglet BASE
- 2. Je lance un contrôle automatique qui vérifiera à partir de la feuille REFERENCE, que toutes les lignes de la colonne C (Analytique Tiers Articles) de BASE ont été codifiées selon la feuille REFERENCE. Par exemple si dans BASE, une ligne de 1ENERGIE comporte en ANALYTIQUE TIERS ARTICLES autres que les codifications PRAMBOPO; PRINBOGC; PRAMBBCH; PRRCBOGC; PRSCBBCH , toute la ligne sera colorée en rouge.
Ainsi, je n'aurai qu'à sélectionner toutes les lignes en rouge pour modifier l'erreur.
NB: il faudrait se garder la possibilité de rajouter ou supprimer des lignes dans la feuille REFERENCE sans perturber la macro.

Merci d'avance pour votre aide précieuse.

Luno
 

Pièces jointes

Inspecteur Columbo, il s'agit sans doute d'une erreur.
C'est aussi peut être ce que recherche à voir Luno.
Je mets le fichier (à voir si ok)
Bruno
@ Bruno

Comme l'inspecteur m'a mis sur la piste, j'ai effectué un petit contrôle.
Pour alimenter la feuille REFERENCE, j'ai fait copie-coller des colonnes B (SEGMENTS) et D (Reference) de l'onglet Base.
Donc normalement, quand je lance la macro, je ne devrais avoir aucune cellule jaune. Et pourtant, j'en ai. S'agit-il des doublons?
 
Bonjour Luno&Bruno,
J'ai compris qu'on devait mettre en couleur les lignes de l'onglet Base lorsqu'il ne trouve pas la combinaison Segment+Référence.
Je rejoins Luno, lorsqu'on lance la macro, elle devrait retourner aucun résultat coloré pour cet exemple car toutes les combinaisons de l'onglet Base sont présentes dans l'onglet Référence.
 
Bonjour Luno&Bruno,
J'ai compris qu'on devait mettre en couleur les lignes de l'onglet Base lorsqu'il ne trouve pas la combinaison Segment+Référence.
Je rejoins Luno, lorsqu'on lance la macro, elle devrait retourner aucun résultat coloré pour cet exemple car toutes les combinaisons de l'onglet Base sont présentes dans l'onglet Référence.
Effectivement inspecteur,et pour s'assurer que la macro fonctionne bien, on peut s'amuser à modifier dans l'onglet BASE, une ou deux références qu'on pourrait nommer BRUNO & COLUMBO sur deux lignes, que la macro ne devrait pas trouver dans la feuille REFERENCE
 
Bonjour Bruno&Luno,
Merci pour le code, il fonctionne bien.
Un petit détail : lorsque je fais une modif sur les lignes 2, 3, 4, 5, 6 de l'onglet Base, la couleur se met bien en orange.
Par contre lorsque je fais une modif en plein milieu, la couleur ne se met pas à jour sur les lignes modifiées.
 
Luno, Bruno,
Je précise que je ne suis pas un spécialiste de VBA.
Voici le code que j'ai réussi à modifier (avec mes notions).
@Bruno, je rencontre un problème pour mettre les lignes en couleurs :
Lorsque toutes les références sont dans les 2 onglets, toutes les cellules vides de l'onglet base se mettent en orange.
Lorsque je modifie la ligne 2 et à partir de la ligne 190 jusqu'à la fin pour qu'elles tombent en #N/A, elles ne sont pas toutes mises en couleur.
Range("A2:G2", Range("A2:G2").End(xlDown)).Interior.Color = RGB(255, 192, 0)
J'ai l'impression que le "End(xlDown))" ne fait pas son travail correctement.
Est-ce que tu as une idée de pourquoi la macro réagit de cette manière?
Merci
 

Pièces jointes

Bravo Bruno, le code fonctionne très bien.
Lorsque je parlais de faire des tests en plein milieu, il s'agit de modification que j'apportais au mileu de l'onglet Base de manière à forcer la macro à mettre en couleur.
Quand je vais dire ça à ma femme 🙂
 
Ben Columbo pour tes 1er messages chapeau....
Inscrit depuis seulement hier . . .
Très belle enquête menée digne de la série TV
Donc bienvenu sur XLD , je souhaite encore te voir dévoiler les mystères de ce qui nous échappe.
Au plaisir de te retrouver sur d'autres post.
Bruno
 
Re, bonjour les amis,
Hier soir j'ai écris la macro dans la précipitation sans trop réfléchir.
Je remets le fichier avec une macro performante.
J'utilise le dictionnaire de vba.
Je laisse le soin à Columbo de décortiquer le code.
Bruno
ici le code modifié
VB:
Sub test()
Set dico = CreateObject("Scripting.Dictionary")
With Feuil2
bas = .[B65000].End(3).Row
For k = 2 To bas
tx = .Cells(k, 1) & .Cells(k, 2)
 dico.Item(tx) = dico.Item(tx)
Next
End With
For k = 2 To [B65000].End(3).Row
tx = Cells(k, 2) & Cells(k, 4)
If Not dico.Exists(tx) Then Range("A" & k & ":E" & k).Interior.Color = 49407
Next
Range("A1:E" & bas).AutoFilter Field:=3, Criteria1:=RGB(255, _
        192, 0), Operator:=xlFilterCellColor
End Sub
 

Pièces jointes

Re, bonjour les amis,
Hier soir j'ai écris la macro dans la précipitation sans trop réfléchir.
Je remets le fichier avec une macro performante.
J'utilise le dictionnaire de vba.
Je laisse le soin à Columbo de décortiquer le code.
Bruno
ici le code modifié
VB:
Sub test()
Set dico = CreateObject("Scripting.Dictionary")
With Feuil2
bas = .[B65000].End(3).Row
For k = 2 To bas
tx = .Cells(k, 1) & .Cells(k, 2)
dico.Item(tx) = dico.Item(tx)
Next
End With
For k = 2 To [B65000].End(3).Row
tx = Cells(k, 2) & Cells(k, 4)
If Not dico.Exists(tx) Then Range("A" & k & ":E" & k).Interior.Color = 49407
Next
Range("A1:E" & bas).AutoFilter Field:=3, Criteria1:=RGB(255, _
        192, 0), Operator:=xlFilterCellColor
End Sub
Bonjour Bruno, Bonjour Columbo,

il y a une erreur quand je lance la macro sur cette partie:
Set dico = CreateObject("Scripting.Dictionary")
With Feuil2
bas = .[B65000].End(3).Row
For k = 2 To bas
tx = .Cells(k, 1) & .Cells(k, 2)
dico.Item(tx) = dico.Item(tx)
Next
End With
For k = 2 To [B65000].End(3).Row
tx = Cells(k, 2) & Cells(k, 4)
If Not dico.Exists(tx) Then Range("A" & k & ":E" & k).Interior.Color = 49407
Next
Range("A1:E" & bas).AutoFilter Field:=3, Criteria1:=RGB(255, _
192, 0), Operator:=xlFilterCellColor
End Sub
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Retour