Multiplier par 1 une range
Bonsoir à tous !
Afin de contextualiser, j'ai plusieurs feuilles dont je dois analyser les 1 et les 0 compris dans les mêmes cellules.
Le code demande donc de définir la plage en question et va ensuite vérifier les données de cette plage dans les autres feuilles afin de voir si elles correspondent.
Si c'est le cas, super pas d'erreur. Si ce n'est pas le cas, erreur.
Sauf que malheureusement, j'ai sur certaines feuilles des "1" qui sont en type texte, et qui ne correspondent donc pas au "1'" en type nombre.
Je souhaiterai donc que ma macro, lorsqu'elle sélectionne la range, multiplie également les cellules comprises dans cette range et dans toutes les feuilles par 1.
En multipliant par 1 toutes les cellules à checker, ces "1" en type texte deviendront type nombre.
J'ai pensé utiliser "Operation:=xlMultiply" mais j'ai du mal à l'incrémenter dans mon code.
Auriez-vous des idées ?
Merci d'avance et bonne soirée.
Sub checkDifferences()
Dim wS1 As Worksheet, wS2 As Worksheet, rge As Range
Dim x1 As Integer, x2 As Integer, y1 As Integer, y2 As Integer
Dim i As Integer, j As Integer, k As Integer, nbSheets As Integer
Dim errors() As Integer, totalErrors As Integer, result As String
nbSheets = ThisWorkbook.Sheets.Count
ReDim errors(nbSheets) ' On va stocker dans un tableau le nb d'erreurs par feuille
'récupération de la plage à tester
On Error GoTo ERR
Set rge = Application.InputBox("", "Select the range to verify", , , , , , 8)
If rge.Cells.Count <= 1 Then
GoTo ERR
End If
On Error GoTo 0
With rge
x1 = .Column ' Gauche
x2 = x1 + rge.Columns.Count - 1 ' Droite
y1 = .Row ' Haut
y2 = y1 + rge.Rows.Count - 1 ' Bas
End With
' Triple boucle
Application.ScreenUpdating = False
Set wS1 = Sheets("Base") ' Feuille de base
For k = 2 To nbSheets
Set wS2 = Sheets(k)
For i = x1 To x2
For j = y1 To y2
'ajout colorcoding du résultat
If wS1.Cells(j, i) <> wS2.Cells(j, i) Then
wS2.Cells(j, i).Interior.Color = 255
wS1.Cells(j, i).Interior.Color = 12961221
errors(k) = errors(k) + 1
totalErrors = totalErrors + 1
Else
wS2.Cells(j, i).Interior.Color = 12961221
wS1.Cells(j, i).Interior.Color = 12961221
End If
Next j
Next i
Next k
Application.ScreenUpdating = True
' Rapport d'erreurs
result = "ERRORS FOUND : " & totalErrors
If totalErrors = 0 Then
result = result & " :) !" & vbCrLf
Else
For i = 2 To nbSheets
If errors(i) > 0 Then result = result & vbCrLf & "- " & Sheets(i).Name & " : " & errors(i) & " error(s)."
Next i
End If
MsgBox result, vbInformation
Exit Sub
ERR:
MsgBox "Unvalide selection, select your range !", vbExclamation, "Error"
End SubQue donne
If val(wS1.Cells(j, i)) <> val(wS2.Cells(j, i)) ThenCela fonctionne, merci beaucoup ! Vous êtes génial.
Génial...génial...la médaille du chien fidèle, oui !