Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Probleme de comparaison entre deux cellules identiques

5 réponses
Avatar
GlamIs
Bonjour a tous,
J'ai un probleme lors de la comparaison entre deux feuilles qui contiennent
les mêmes valeurs, la première par formule et la seconde directement par
valeur.

Je compare ces deux feuilles cellule par cellule via le code suivant:

Code :

For Each oCell In Firstsheet.UsedRange
If oCell.Value <> SecondSheet.Range(oCell.Address).Value Then
different = True
MsgBox "Different sheets"
Exit For
End If
Next oCell
If Not different Then
MsgBox "Identical sheets"
End If
En executant ce code, vba detecte une cellule qui ne contient pas la même
valeur dans les deux feuilles.
Et quand je fais differents tests pour comparer ces deux cellules j'obtiens
ceci
Code :

?ocell.Value
100

?SecondSheet.Range(ocell.Address ).Value
100

?TypeName(ocell.Value)
Double

?TypeName(SecondSheet.Range(oCell.Address ).Value)
Double

?oCell.Value = 100
False

?oCell.Value = cstr(100)
True

?SecondSheet.Range(oCell.Address).Value = 100
True

?SecondSheet.Range(oCell.Address).Value = cstr(100)
True

?oCell.Value = SecondSheet.Range(oCell.Address ).Value
False

Je rappelle que la premiere feuille contient des formules la secondes des
valeurs.
Avez-vous une idée de ce qui se passe?
merci

5 réponses

Avatar
michdenis
Essaie quelque chose comme :

'-----------------------------------
Sub Test()
Dim DerLig As Long, DerCol As Integer
Dim Adr As String, Tblo1, Tblo2
With Worksheets("Feuil1") ' Nom à déterminer
DerLig = .Cells.Find(What:="*", _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Row
DerCol = .Cells.Find(What:="*", _
LookIn:=xlFormulas, _
SearchOrder:=xlByColumns, _
SearchDirection:=xlPrevious).Column

With .Range(.Range("A1"), .Cells(DerLig, DerCol))
Adr = .Address
Tblo1 = .Value
End With
End With

With Worksheets("Feuil2") ' Nom à déterminer
Tblo2 = .Range(Adr).Value
End With

For a = 1 To UBound(Tblo1, 1)
For b = 1 To UBound(Tblo1, 2)
If Tblo1(a, b) <> Tblo2(a, b) Then
MsgBox "Différence " & Cells(a, b).Address
End If
Next
Next
End Sub
'-----------------------------------




"GlamIs" a écrit dans le message de news:

Bonjour a tous,
J'ai un probleme lors de la comparaison entre deux feuilles qui
contiennent
les mêmes valeurs, la première par formule et la seconde directement par
valeur.

Je compare ces deux feuilles cellule par cellule via le code suivant:

Code :

For Each oCell In Firstsheet.UsedRange
If oCell.Value <> SecondSheet.Range(oCell.Address).Value Then
different = True
MsgBox "Different sheets"
Exit For
End If
Next oCell
If Not different Then
MsgBox "Identical sheets"
End If
En executant ce code, vba detecte une cellule qui ne contient pas la même
valeur dans les deux feuilles.
Et quand je fais differents tests pour comparer ces deux cellules
j'obtiens
ceci
Code :

?ocell.Value
100

?SecondSheet.Range(ocell.Address ).Value
100

?TypeName(ocell.Value)
Double

?TypeName(SecondSheet.Range(oCell.Address ).Value)
Double

?oCell.Value = 100
False

?oCell.Value = cstr(100)
True

?SecondSheet.Range(oCell.Address).Value = 100
True

?SecondSheet.Range(oCell.Address).Value = cstr(100)
True

?oCell.Value = SecondSheet.Range(oCell.Address ).Value
False

Je rappelle que la premiere feuille contient des formules la secondes des
valeurs.
Avez-vous une idée de ce qui se passe?
merci


Avatar
GlamIs
UA fait moi je n'est pas la main sur le code VBA, mais je peux changer les
feuilles.
Cependant je ne comprend pas pourquoi les deux valeurs ne sont pas
identiques pourtant quand je fais des tests j'obtiens ceci:
code:

?ocell.Value
100
?SecondSheet.Range(ocell.Address ).Value
100
?TypeName(ocell.Value)
Double
?TypeName(SecondSheet.Range(oCell.Address ).Value)
Double



"michdenis" wrote:

Essaie quelque chose comme :

'-----------------------------------
Sub Test()
Dim DerLig As Long, DerCol As Integer
Dim Adr As String, Tblo1, Tblo2
With Worksheets("Feuil1") ' Nom à déterminer
DerLig = .Cells.Find(What:="*", _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Row
DerCol = .Cells.Find(What:="*", _
LookIn:=xlFormulas, _
SearchOrder:=xlByColumns, _
SearchDirection:=xlPrevious).Column

With .Range(.Range("A1"), .Cells(DerLig, DerCol))
Adr = .Address
Tblo1 = .Value
End With
End With

With Worksheets("Feuil2") ' Nom à déterminer
Tblo2 = .Range(Adr).Value
End With

For a = 1 To UBound(Tblo1, 1)
For b = 1 To UBound(Tblo1, 2)
If Tblo1(a, b) <> Tblo2(a, b) Then
MsgBox "Différence " & Cells(a, b).Address
End If
Next
Next
End Sub
'-----------------------------------




"GlamIs" a écrit dans le message de news:

> Bonjour a tous,
> J'ai un probleme lors de la comparaison entre deux feuilles qui
> contiennent
> les mêmes valeurs, la première par formule et la seconde directement par
> valeur.
>
> Je compare ces deux feuilles cellule par cellule via le code suivant:
>
> Code :
>
> For Each oCell In Firstsheet.UsedRange
> If oCell.Value <> SecondSheet.Range(oCell.Address).Value Then
> different = True
> MsgBox "Different sheets"
> Exit For
> End If
> Next oCell
> If Not different Then
> MsgBox "Identical sheets"
> End If
> En executant ce code, vba detecte une cellule qui ne contient pas la même
> valeur dans les deux feuilles.
> Et quand je fais differents tests pour comparer ces deux cellules
> j'obtiens
> ceci
> Code :
>
> ?ocell.Value
> 100
>
> ?SecondSheet.Range(ocell.Address ).Value
> 100
>
> ?TypeName(ocell.Value)
> Double
>
> ?TypeName(SecondSheet.Range(oCell.Address ).Value)
> Double
>
> ?oCell.Value = 100
> False
>
> ?oCell.Value = cstr(100)
> True
>
> ?SecondSheet.Range(oCell.Address).Value = 100
> True
>
> ?SecondSheet.Range(oCell.Address).Value = cstr(100)
> True
>
> ?oCell.Value = SecondSheet.Range(oCell.Address ).Value
> False
>
> Je rappelle que la premiere feuille contient des formules la secondes des
> valeurs.
> Avez-vous une idée de ce qui se passe?
> merci





Avatar
michdenis
En principe, cela devrait fonctionner ...

Est-ce possible que tu aies des cellules avec des formats différents
(texte par exemple vs Standard)
Si certaines cellules contiennent du texte, la casse des caractères compte.

Il doit y avoir quelque chose que tu nous dis pas ! ;-)

PS- Définir une plage avec UsedRange a des fins d'une boucle
n'est pas la meilleure façon de le faire !




"GlamIs" a écrit dans le message de news:

UA fait moi je n'est pas la main sur le code VBA, mais je peux changer les
feuilles.
Cependant je ne comprend pas pourquoi les deux valeurs ne sont pas
identiques pourtant quand je fais des tests j'obtiens ceci:
code:

?ocell.Value
100
?SecondSheet.Range(ocell.Address ).Value
100
?TypeName(ocell.Value)
Double
?TypeName(SecondSheet.Range(oCell.Address ).Value)
Double



"michdenis" wrote:

Essaie quelque chose comme :

'-----------------------------------
Sub Test()
Dim DerLig As Long, DerCol As Integer
Dim Adr As String, Tblo1, Tblo2
With Worksheets("Feuil1") ' Nom à déterminer
DerLig = .Cells.Find(What:="*", _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Row
DerCol = .Cells.Find(What:="*", _
LookIn:=xlFormulas, _
SearchOrder:=xlByColumns, _
SearchDirection:=xlPrevious).Column

With .Range(.Range("A1"), .Cells(DerLig, DerCol))
Adr = .Address
Tblo1 = .Value
End With
End With

With Worksheets("Feuil2") ' Nom à déterminer
Tblo2 = .Range(Adr).Value
End With

For a = 1 To UBound(Tblo1, 1)
For b = 1 To UBound(Tblo1, 2)
If Tblo1(a, b) <> Tblo2(a, b) Then
MsgBox "Différence " & Cells(a, b).Address
End If
Next
Next
End Sub
'-----------------------------------




"GlamIs" a écrit dans le message de
news:

> Bonjour a tous,
> J'ai un probleme lors de la comparaison entre deux feuilles qui
> contiennent
> les mêmes valeurs, la première par formule et la seconde directement
> par
> valeur.
>
> Je compare ces deux feuilles cellule par cellule via le code suivant:
>
> Code :
>
> For Each oCell In Firstsheet.UsedRange
> If oCell.Value <> SecondSheet.Range(oCell.Address).Value
> Then
> different = True
> MsgBox "Different sheets"
> Exit For
> End If
> Next oCell
> If Not different Then
> MsgBox "Identical sheets"
> End If
> En executant ce code, vba detecte une cellule qui ne contient pas la
> même
> valeur dans les deux feuilles.
> Et quand je fais differents tests pour comparer ces deux cellules
> j'obtiens
> ceci
> Code :
>
> ?ocell.Value
> 100
>
> ?SecondSheet.Range(ocell.Address ).Value
> 100
>
> ?TypeName(ocell.Value)
> Double
>
> ?TypeName(SecondSheet.Range(oCell.Address ).Value)
> Double
>
> ?oCell.Value = 100
> False
>
> ?oCell.Value = cstr(100)
> True
>
> ?SecondSheet.Range(oCell.Address).Value = 100
> True
>
> ?SecondSheet.Range(oCell.Address).Value = cstr(100)
> True
>
> ?oCell.Value = SecondSheet.Range(oCell.Address ).Value
> False
>
> Je rappelle que la premiere feuille contient des formules la secondes
> des
> valeurs.
> Avez-vous une idée de ce qui se passe?
> merci







Avatar
GlamIs
non les deux cellules ont le meme format:
?TypeName(ocell.Value)
Double
?TypeName(SecondSheet.Range(oCell.Address ).Value)
Double



et c'est ce format qui pose problème. Je m'explique:
Comme le format de mes cellules est Double, il doit bien avoir un chiffre
apres la virgule qui existe mais que Excel ne peut afficher (je sais que
l'affichage est limité en terme de bits!)
Quand je force le passage en entier, dans les formules de ma première
feuille, je n'obtient plus d'erreur et Excel est aussi content que moi ^^
Donc je peux dire que mon problème est résolu par une solution de
contournement!

"michdenis" wrote:

En principe, cela devrait fonctionner ...

Est-ce possible que tu aies des cellules avec des formats différents
(texte par exemple vs Standard)
Si certaines cellules contiennent du texte, la casse des caractères compte.

Il doit y avoir quelque chose que tu nous dis pas ! ;-)

PS- Définir une plage avec UsedRange a des fins d'une boucle
n'est pas la meilleure façon de le faire !




"GlamIs" a écrit dans le message de news:

> UA fait moi je n'est pas la main sur le code VBA, mais je peux changer les
> feuilles.
> Cependant je ne comprend pas pourquoi les deux valeurs ne sont pas
> identiques pourtant quand je fais des tests j'obtiens ceci:
> code:
>
> ?ocell.Value
> 100
> ?SecondSheet.Range(ocell.Address ).Value
> 100
> ?TypeName(ocell.Value)
> Double
> ?TypeName(SecondSheet.Range(oCell.Address ).Value)
> Double
>
>
>
> "michdenis" wrote:
>
>> Essaie quelque chose comme :
>>
>> '-----------------------------------
>> Sub Test()
>> Dim DerLig As Long, DerCol As Integer
>> Dim Adr As String, Tblo1, Tblo2
>> With Worksheets("Feuil1") ' Nom à déterminer
>> DerLig = .Cells.Find(What:="*", _
>> LookIn:=xlFormulas, _
>> SearchOrder:=xlByRows, _
>> SearchDirection:=xlPrevious).Row
>> DerCol = .Cells.Find(What:="*", _
>> LookIn:=xlFormulas, _
>> SearchOrder:=xlByColumns, _
>> SearchDirection:=xlPrevious).Column
>>
>> With .Range(.Range("A1"), .Cells(DerLig, DerCol))
>> Adr = .Address
>> Tblo1 = .Value
>> End With
>> End With
>>
>> With Worksheets("Feuil2") ' Nom à déterminer
>> Tblo2 = .Range(Adr).Value
>> End With
>>
>> For a = 1 To UBound(Tblo1, 1)
>> For b = 1 To UBound(Tblo1, 2)
>> If Tblo1(a, b) <> Tblo2(a, b) Then
>> MsgBox "Différence " & Cells(a, b).Address
>> End If
>> Next
>> Next
>> End Sub
>> '-----------------------------------
>>
>>
>>
>>
>> "GlamIs" a écrit dans le message de
>> news:
>>
>> > Bonjour a tous,
>> > J'ai un probleme lors de la comparaison entre deux feuilles qui
>> > contiennent
>> > les mêmes valeurs, la première par formule et la seconde directement
>> > par
>> > valeur.
>> >
>> > Je compare ces deux feuilles cellule par cellule via le code suivant:
>> >
>> > Code :
>> >
>> > For Each oCell In Firstsheet.UsedRange
>> > If oCell.Value <> SecondSheet.Range(oCell.Address).Value
>> > Then
>> > different = True
>> > MsgBox "Different sheets"
>> > Exit For
>> > End If
>> > Next oCell
>> > If Not different Then
>> > MsgBox "Identical sheets"
>> > End If
>> > En executant ce code, vba detecte une cellule qui ne contient pas la
>> > même
>> > valeur dans les deux feuilles.
>> > Et quand je fais differents tests pour comparer ces deux cellules
>> > j'obtiens
>> > ceci
>> > Code :
>> >
>> > ?ocell.Value
>> > 100
>> >
>> > ?SecondSheet.Range(ocell.Address ).Value
>> > 100
>> >
>> > ?TypeName(ocell.Value)
>> > Double
>> >
>> > ?TypeName(SecondSheet.Range(oCell.Address ).Value)
>> > Double
>> >
>> > ?oCell.Value = 100
>> > False
>> >
>> > ?oCell.Value = cstr(100)
>> > True
>> >
>> > ?SecondSheet.Range(oCell.Address).Value = 100
>> > True
>> >
>> > ?SecondSheet.Range(oCell.Address).Value = cstr(100)
>> > True
>> >
>> > ?oCell.Value = SecondSheet.Range(oCell.Address ).Value
>> > False
>> >
>> > Je rappelle que la premiere feuille contient des formules la secondes
>> > des
>> > valeurs.
>> > Avez-vous une idée de ce qui se passe?
>> > merci
>>
>>
>>





Avatar
michdenis
Mon dernier message sur ce fil !

Un format de cellule pour les nombres ne modifie pas
le contenu de la cellule mais permet d'afficher seulement
les chiffres "significatifs" que l'on désire

Lors d'une boucle sur la valeur des cellules en vba,
la propriété value retourne ce que la cellule contient
nonobstant son format (sauf texte) En conséquence,
peu importe le format (sauf texte) des cellules, cela n'affecte
pas ta boucle.




"GlamIs" a écrit dans le message de news:

non les deux cellules ont le meme format:
?TypeName(ocell.Value)
Double
?TypeName(SecondSheet.Range(oCell.Address ).Value)
Double



et c'est ce format qui pose problème. Je m'explique:
Comme le format de mes cellules est Double, il doit bien avoir un chiffre
apres la virgule qui existe mais que Excel ne peut afficher (je sais que
l'affichage est limité en terme de bits!)
Quand je force le passage en entier, dans les formules de ma première
feuille, je n'obtient plus d'erreur et Excel est aussi content que moi ^^
Donc je peux dire que mon problème est résolu par une solution de
contournement!

"michdenis" wrote:

En principe, cela devrait fonctionner ...

Est-ce possible que tu aies des cellules avec des formats différents
(texte par exemple vs Standard)
Si certaines cellules contiennent du texte, la casse des caractères
compte.

Il doit y avoir quelque chose que tu nous dis pas ! ;-)

PS- Définir une plage avec UsedRange a des fins d'une boucle
n'est pas la meilleure façon de le faire !




"GlamIs" a écrit dans le message de
news:

> UA fait moi je n'est pas la main sur le code VBA, mais je peux changer
> les
> feuilles.
> Cependant je ne comprend pas pourquoi les deux valeurs ne sont pas
> identiques pourtant quand je fais des tests j'obtiens ceci:
> code:
>
> ?ocell.Value
> 100
> ?SecondSheet.Range(ocell.Address ).Value
> 100
> ?TypeName(ocell.Value)
> Double
> ?TypeName(SecondSheet.Range(oCell.Address ).Value)
> Double
>
>
>
> "michdenis" wrote:
>
>> Essaie quelque chose comme :
>>
>> '-----------------------------------
>> Sub Test()
>> Dim DerLig As Long, DerCol As Integer
>> Dim Adr As String, Tblo1, Tblo2
>> With Worksheets("Feuil1") ' Nom à déterminer
>> DerLig = .Cells.Find(What:="*", _
>> LookIn:=xlFormulas, _
>> SearchOrder:=xlByRows, _
>> SearchDirection:=xlPrevious).Row
>> DerCol = .Cells.Find(What:="*", _
>> LookIn:=xlFormulas, _
>> SearchOrder:=xlByColumns, _
>> SearchDirection:=xlPrevious).Column
>>
>> With .Range(.Range("A1"), .Cells(DerLig, DerCol))
>> Adr = .Address
>> Tblo1 = .Value
>> End With
>> End With
>>
>> With Worksheets("Feuil2") ' Nom à déterminer
>> Tblo2 = .Range(Adr).Value
>> End With
>>
>> For a = 1 To UBound(Tblo1, 1)
>> For b = 1 To UBound(Tblo1, 2)
>> If Tblo1(a, b) <> Tblo2(a, b) Then
>> MsgBox "Différence " & Cells(a, b).Address
>> End If
>> Next
>> Next
>> End Sub
>> '-----------------------------------
>>
>>
>>
>>
>> "GlamIs" a écrit dans le message de
>> news:
>>
>> > Bonjour a tous,
>> > J'ai un probleme lors de la comparaison entre deux feuilles qui
>> > contiennent
>> > les mêmes valeurs, la première par formule et la seconde directement
>> > par
>> > valeur.
>> >
>> > Je compare ces deux feuilles cellule par cellule via le code
>> > suivant:
>> >
>> > Code :
>> >
>> > For Each oCell In Firstsheet.UsedRange
>> > If oCell.Value <> SecondSheet.Range(oCell.Address).Value
>> > Then
>> > different = True
>> > MsgBox "Different sheets"
>> > Exit For
>> > End If
>> > Next oCell
>> > If Not different Then
>> > MsgBox "Identical sheets"
>> > End If
>> > En executant ce code, vba detecte une cellule qui ne contient pas la
>> > même
>> > valeur dans les deux feuilles.
>> > Et quand je fais differents tests pour comparer ces deux cellules
>> > j'obtiens
>> > ceci
>> > Code :
>> >
>> > ?ocell.Value
>> > 100
>> >
>> > ?SecondSheet.Range(ocell.Address ).Value
>> > 100
>> >
>> > ?TypeName(ocell.Value)
>> > Double
>> >
>> > ?TypeName(SecondSheet.Range(oCell.Address ).Value)
>> > Double
>> >
>> > ?oCell.Value = 100
>> > False
>> >
>> > ?oCell.Value = cstr(100)
>> > True
>> >
>> > ?SecondSheet.Range(oCell.Address).Value = 100
>> > True
>> >
>> > ?SecondSheet.Range(oCell.Address).Value = cstr(100)
>> > True
>> >
>> > ?oCell.Value = SecondSheet.Range(oCell.Address ).Value
>> > False
>> >
>> > Je rappelle que la premiere feuille contient des formules la
>> > secondes
>> > des
>> > valeurs.
>> > Avez-vous une idée de ce qui se passe?
>> > merci
>>
>>
>>