[EXCEL] Comparaison de colonnes
Jean-Mikael
Messages postés
12
Statut
Membre
-
Thiby -
Thiby -
Bonjour à tous alors voilà mon problème j'aimerai effectuer une comparaison entre 2 colonnes selon un critère qui me posent problème pour réaliser ma macro.
Les Colonnes se présentent comme ceci :
Colonne1 Colonne2 Colonne3
2 3
5 0 Erreur
Je m'explique plus précisement, le but de cette comparaison étant d'analyser les cellules des 2 colonnes et du coup les comparer entre elles, dans l'exemple tant qu'il y a un chiffre dans la 1ère colonne et dans la 2ème il n'y a pas d'ereur, en revanche s'il y a un chiffre dans la première colonne et un 0 dans la 2ème là je souhaiterai afficher un message d'erreur, dernière précision s'il y a 0 dans la 1ère et dans la 2ème 0 il n'y pas d'erreur le truc c'est que dès qu'il y a un chiffre dans la 1ère il doit forcément yen avoir un dans la 2ème différent de 0.
Je vous envoie ma macro :
Sub control()
Dim rngA As Range
Dim rngB As Range
Set rngA = Range(Cells(1, "M"), Cells(Rows.Count, "M").End(xlUp))
Set rngB = Range(Cells(1, "U"), Cells(Rows.Count, "U").End(xlUp))
For Each cell In rngA
If Not IsError(Application.Match(cell.Value, rngB, 0)) Then
Cells(cell.Row, "AG").Value = "Erreur Détecté"
End If
Next
End Sub
J'espère avoir été précis sur mon problème merci d'avance pour vos futur réponses.
Les Colonnes se présentent comme ceci :
Colonne1 Colonne2 Colonne3
2 3
5 0 Erreur
Je m'explique plus précisement, le but de cette comparaison étant d'analyser les cellules des 2 colonnes et du coup les comparer entre elles, dans l'exemple tant qu'il y a un chiffre dans la 1ère colonne et dans la 2ème il n'y a pas d'ereur, en revanche s'il y a un chiffre dans la première colonne et un 0 dans la 2ème là je souhaiterai afficher un message d'erreur, dernière précision s'il y a 0 dans la 1ère et dans la 2ème 0 il n'y pas d'erreur le truc c'est que dès qu'il y a un chiffre dans la 1ère il doit forcément yen avoir un dans la 2ème différent de 0.
Je vous envoie ma macro :
Sub control()
Dim rngA As Range
Dim rngB As Range
Set rngA = Range(Cells(1, "M"), Cells(Rows.Count, "M").End(xlUp))
Set rngB = Range(Cells(1, "U"), Cells(Rows.Count, "U").End(xlUp))
For Each cell In rngA
If Not IsError(Application.Match(cell.Value, rngB, 0)) Then
Cells(cell.Row, "AG").Value = "Erreur Détecté"
End If
Next
End Sub
J'espère avoir été précis sur mon problème merci d'avance pour vos futur réponses.
Configuration: Windows 2000 Internet Explorer 6.0
5 réponses
-
Salut
J'ai écris une solution, elle est pas optimale mais peut être que tu pourras t'en inspirer...
Attention par contre elle n'est valable que s'il y a toujours quelque chose dans la première colonne.
Dim cur_row As Integer ' ligne courante cur_row = 2 ' commence à 2 pour ne pas prendre la ligne de titre ' tant qu'il y a quelque chose dans la premier colonne While Cells(cur_row, "A").Value <> "" ' la 2eme colonne ne contient rien If Cells(cur_row, "B").Value = "" Or Cells(cur_row, "B").Value = 0 Then Cells(cur_row, "C").Value = "Erreur" End If cur_row = cur_row + 1 Wend -
Merci beaucoup ! je test cette solution et je te tients au courant !
encore merci -
Merci thiby sa marche niquel le seul soucil c'est qu'il faudrait modifié le code à un niveau car si la colonne de référence et la colonne comparé sont toutes les deux à 0 le programme indique une erreur seulement
dans le cadre de mon programme il ne doit y avoir qu'une seule possibilité d'erreur à savoir la colonne de référence "A" si celle-ci est par exemple à 6 et la colonne comparé "B" à 0 là le programme indique une erreur mais uniquement dans ce cas de figure (6 n'étant pas un nombre fixe sa peut-etre n'importe quel chiffre même décimal), je te remercie d'avance si tu peux m'aidé d'avantage et merci quand meme beaucoup pour ce programme ! -
De rien Jean-Mikael :)
pour répondre au cas particulier que tu as énonçais, je compléterais la condition suivante dans le "while" :
If Cells(cur_row, "B").Value = "" Or Cells(cur_row, "B").Value = 0 Then Cells(cur_row, "C").Value = "Erreur" End If
en
If Cells(cur_row, "B").Value = "" Or (Cells(cur_row, "A").Value <> 0 And Cells(cur_row, "B").Value = 0) Then Cells(cur_row, "C").Value = "Erreur" End If
Cà alourdit un peu la condition mais j'ai testé et çà fonctionne :)
Petite remarque : cela n'est valide que pour des nombres bien sûr. :) -
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -