Comparaison

Résolu
fne67 Messages postés 17 Date d'inscription samedi 29 septembre 2007 Statut Membre Dernière intervention 19 septembre 2009 - 19 sept. 2009 à 07:04
cs_Ayr Messages postés 221 Date d'inscription mercredi 9 avril 2003 Statut Membre Dernière intervention 13 décembre 2009 - 19 sept. 2009 à 15:16
Un grand bonjour à tous
J'ai fais 2 programme pour me permettre de comparer 2 colonnes de 2 classeurs et rechercher les différences, 1 fonctionne l'autre pas et je ne sais pas pourquoi, quelqu'un aurait-il une idée pourquoi la première comparaison ne fonctionne pas, je cherche depuis 8 jours sans succès
merci d'avance
La version qui ne fonctionne pas :

Sub comparer1()
Dim i As Variant, j As Variant
Dim nbl As Variant
nbl = Range("a65536").End(xlUp).Row
For i = 1 To nbl
If Workbooks("classeur11.xls").Worksheets("feuil1").Range("c" & i).Value <> Workbooks("classeur2a.xls").Worksheets("feuil1").Range("c" & i).Value Then
Workbooks("classeur11.xls").Worksheets("feuil1").Range("b" & i).Interior.Color = RGB(255, 234, 102)
End If
Next i
End Sub
La version qui fonctionne mais un peut lourd si on doit traiter 1000 lignes:

Sub comparer()
Dim nbl As Variant
Dim i As Variant, j As Variant
Application.ScreenUpdating = False
nbl = Range("a65536").End(xlUp).Row
Columns("C:C").Select
Selection.Insert Shift:=xlToRight
For i = 1 To nbl
Columns("C:C").Select
Selection.NumberFormat = "0"
Range("c" & i).FormulaR1C1 = "=SUM(RC[-2]+RC[-1])"
Next i
Columns("C:C").Select
Selection.Copy
Windows("Classeur2a.xls").Activate
Columns("C:C").Select
Selection.Insert Shift:=xlToRight
Selection.PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Windows("Classeur11.xls").Activate
Range("C1").Select
Application.CutCopyMode = False
For j = 1 To nbl
If Workbooks("classeur11.xls").Worksheets("feuil1").Range("c" & j).Value <> Workbooks("classeur2a.xls").Worksheets("feuil1").Range("c" & j).Value Then
Workbooks("classeur11.xls").Worksheets("feuil1").Range("b" & j).Interior.Color = RGB(255, 234, 102)
End If
Next j
Columns("C:C").Select
Selection.Delete Shift:=xlToLeft
Windows("Classeur2a.xls").Activate
Columns("C:C").Select
Selection.Delete Shift:=xlToLeft
Range("B1").Select
Windows("Classeur11.xls").Activate
Range("B1").Select
End Sub
Il y a aussi des cases vides c'est pourquoi je part d'en bas pour trouver le nombre de ligne
Encore merci d'avance

5 réponses

cs_Ayr Messages postés 221 Date d'inscription mercredi 9 avril 2003 Statut Membre Dernière intervention 13 décembre 2009 2
19 sept. 2009 à 15:16
Merci pour les infos supplémentaires

Alors voilà ce que j'ai compris et relevé d'erreur potentielle dans ta sub comparer1()

01. Sub comparer1() 
02.   Dim i As Long, j As Long
03.   Dim nbl As Long
04.   nbl =  Range("a65536").End(xlUp).Row
05.   For i = 1 To nbl
06.     If Workbooks("classeur11.xls").Worksheets("feuil1").Range("a" & i).Value & Range("b" & i).Value <> Workbooks("classeur2a.xls").Worksheets("feuil1").Range("c" & i).Value & Range("b" & i).Value Then 
07.         Workbooks("classeur11.xls").Worksheets("feuil1").Range("b" & i).Interior.Color = RGB(255, 234, 102) 
08.     End If 
09.   Next i
10. End Sub


[list]
- Ligne 04 : La valeur de nbl est calculée par rapport au classeur actif puisqu'il n'y à pas de qualification à l'objet Range.
Ce n'est pas important si systèmatiquement les deux feuilles contiendront le même nombre de lignes mais pas précis tout de même. Tu peux qualifier l'objet explicitement ou bien activer le bon classeur avant le calcul.

- Ligne 06 : Même problème que précédemment mais cette fois ci ça pose un réèl problème puisque des deux côté de la comparaison on prend la colonne B toujours dans le même classeur, celui actif au lancement de la macro.

- Ligne 06 : Dans la partie droite de la comparaison tu concatène la colonne C et la colonne B (A et B dans la partie gauche), est-ce bien celà que tu veux faire ou bien A et B à chaque fois dans les deux classeurs comme indiqué dans ton exemple ?

PS : l'opérateur & n'additionne pas mais concatène. Ce qui veux dire que pour 43000490 et 10 on obtient 4300049010 et non 43000500. Pour ton problème ce n'est pas un problème. Il est d'ailleurs plus judicieux, je trouve, de concatener que d'additionner. C'est juste pour être sur que c'est ce que tu voulais faire au départ.
/list

Partant de ces constatations et en supposant que les valeurs à comparer se trouvent dans les colonnes A et B à chaque fois, comme dans ton exemple, voilà une Sub qui fonctionne :
Sub comparer1()
  Dim i As Long
  Dim j As Long
  Dim Feuil1 As Worksheet
  Dim Feuil2 As Worksheet
    
  Set Feuil1  = Workbooks("classeur11.xls").Worksheets("feuil1")
  Set Feuil2 = Workbooks("classeur2a.xls").Worksheets("feuil1")
  For i = 1 To Feuil1.Range("A65536").End(xlUp).Row
    If Feuil1.Range("A" & i).Value & Feuil1.Range("B" & i).Value <> Feuil2.Range("A" & i).Value & Feuil2.Range("B" & i).Value Then
        Feuil1.Range("B" & i).Interior.Color = RGB(255, 234, 102)
    End If
  Next i
  Set Feuil1 = Nothing
  Set Feuil2 = Nothing
End Sub


Je n'est pas utilisé nbl mais directement le calcul du nombre de lignes car dans une boucle for le nombre de fin de boucle n'est évalué qu'une fois. Mais tu peux laisser le calcul séparé, ça ne change rien au résultat.
Les deux objets WorkSheet ne sont là que pour rendre le code plus lisible.

Problème sur ma macro, les objets range sont qualifiés explicitement dans le code par le nom de classeur et le nom de feuille. Si un de ceux-ci vennait à changer, il faudrait modifier la macro.

Est-ce que cette solution va bien dans ton sens ?

A+
3
cs_Ayr Messages postés 221 Date d'inscription mercredi 9 avril 2003 Statut Membre Dernière intervention 13 décembre 2009 2
19 sept. 2009 à 10:07
Bonjour,

Ta Sub comparer1(), fonctionne correctement chez moi

Difficile de t'aider car tu ne nous dis pas en quoi elle ne fonctionne pas chez toi

Est-ce que ça plante et sur quelle ligne - bon là c'est limité mais vaut mieux toujours le dire - ou est-ce que le résultat n'est pas celui que tu attends ?

Dans le premier, cas pas trop de possibilités, ça devrait être en rapport avec le nom des classeurs référencés. Mais à vérifié. N'oublie pas que si un classeur n'a jamais été enregistré son nom n'est pas "Classeurn.xls" mais "Classeurn" tout court.

Dans le deuxième cas, vérifie que nbl contient bien le nombre de ligne désirées. Sinon le problème viendrait plus probablement des valeurs dans les cellules. par exemple la casse pour le texte. Des espaces qui trainent en fin de texte aussi, donc invisibles à l'oeil nu... etc.

Dernière possibilité, je fais complètement fausse route

Je te conseil de remplacer tes "Variant" par des "Long" aussi.

Petite info pour le nombre max de lignes, il passe à 1048576 pour Excel 2007. Tu as l'air d'être avec une version antèrieure mais à y penser en cas de migration puisque la valeur est donnée en dur dans ton code.

A+
0
fne67 Messages postés 17 Date d'inscription samedi 29 septembre 2007 Statut Membre Dernière intervention 19 septembre 2009
19 sept. 2009 à 12:18
bonjour Ayr,
je m'excuse mais je me suis trompé de fichier, j'ai fais tellement de test que je m'emmêle avec ses macro, donc le bon :
Sub comparer1()
Dim i As Long, j As Long
Dim nbl As Long
nbl = Range("a65536").End(xlUp).Row
For i = 1 To nbl
If Workbooks("classeur11.xls").Worksheets("feuil1").Range("a" & i).Value & Range("b" & i).Value <> Workbooks("classeur2a.xls").Worksheets("feuil1").Range("c" & i).Value & Range("b" & i).Value Then
Workbooks("classeur11.xls").Worksheets("feuil1").Range("b" & i).Interior.Color = RGB(255, 234, 102)
End If
Next i

End Sub
le but additionner la cellule A avec la cellule B et de faire la comparaison avec l'addition de la deuxième feuille et de marquer les cellules qui ne sont pas identiques.
je fais cette addition pour la simple raison que dans les cellules A il peut y avoir plusieurs fois le même nombre mais pas dans la cellule B donc en les additionnant je peut voir si le résultat diverge avec le résultat de la feuille 2 et ainsi marquer la différence.
Merci de t'intéresser a mon problème c'est sympas de ta part
A+
0
cs_Ayr Messages postés 221 Date d'inscription mercredi 9 avril 2003 Statut Membre Dernière intervention 13 décembre 2009 2
19 sept. 2009 à 12:35
Encore quelques petites précisions... :
[list]
[*] Que contiennent les cellules A et B ? Texte ? Nombres ?
[*] Les Colonnes A et B sont-elles dans le même classeur/Feuille ?
[*] Peux-tu donner un exemple (fictif) du contenu de A, B, C sur la même ligne ?
[*] Et éventuellement, si le contenu des cellules est spécifique, un exemple quand le
résultat doit être identique et un quand il est différent ?/list
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
fne67 Messages postés 17 Date d'inscription samedi 29 septembre 2007 Statut Membre Dernière intervention 19 septembre 2009
19 sept. 2009 à 13:00
Re bonjour Ayr
j'avais oublié que je travail sur Excel2007
en fait je fais une comparaison de chiffre
Exemple :
classeur 1/feuille 1
dans les cellules "A" j'ai des références et dans les cellules "B" des positions
en A : 43000490 - en B : 10
en A : 43000490 - en B : 20 <-- faire le marquage ici
en A : 43000595 - en B : 30
en A : 43001000 - en B : 10
en A : 43001590 - en B : 120
classeur 2/feuille 1
dans les cellules "A" j'ai des références et dans les cellules "B" des positions
en A : 43000490 - en B : 10 <-- identique
en A : 43000490 - en B : 30 <-- différent
en A : 43000595 - en B : 30
en A : 43001000 - en B : 20
en A : 43001590 - en B : 120

la comparaison se fais en associant A+B et vérifier que B n'a pas changé sinon il faut marquer le changement, les classeurs étant au préalable préparer pour avoir exactement la même configuration
A+
0
Rejoignez-nous