Conserver une boîte de dialogue ouverte au-dessus de toutes les feuilles Ex
Bonjour à tous,
Je travaille sur un code VBA dont l’objectif est de comparer deux tableurs Excel censés être « identiques sauf... ».
Après avoir comparé les deux classeurs, j’affiche une liste de différences dans une boîte de dialogue.
Ce que je cherche à faire : à chaque fois que je clique dans la liste, affiche la feuille et la zone contenant la différence (Range stockées dans rgDifferences).
Malheureusement, la boîte de dialogue s’affiche uniquement « au-dessus » du classeur contenant le code VBA et pas au-dessus du classeur contenant les différences que je souhaite afficher. Je ne peux donc pas voir à la fois la boîte de dialogue et les différences dans le classeur concerné.
Vous trouverez ci-dessous le code du UserForm en question.
Option Explicit
Const margeLatérale = 6
Dim rgDifferences() As Range
Public Sub RemplitLB(enreg() As Range, valeursOriginales As Variant)
Dim i As Integer
'Sauvegarde la liste des différences (tableau de Range)
rgDifferences = enreg
On Error GoTo Erreur
For i = 0 To UBound(enreg) - 1
With Me.lbDifferences
.AddItem enreg(i).Worksheet.Name
If enreg(i).Cells.Count = 1 Then
.List(i, 1) = enreg(i).Address
.List(i, 2) = enreg(i).Value
.List(i, 3) = valeursOriginales(i)
End If
End With
Next
Exit Sub
Erreur:
MsgBox "Erreur sur le traitement des différences !", vbCritical + vbOKOnly
End
End Sub
Private Sub btnFermer_Click()
End
End Sub
Private Sub lbDifferences_Click()
Dim i As Integer
'A chaque clique dans la liste, affiche la feuille et la cellule contenant la différence
With Me.lbDifferences
For i = 0 To .ListCount - 1
If .Selected(i) = True Then
rgDifferences(i).Parent.Parent.Activate
rgDifferences(i).Worksheet.Activate
rgDifferences(i).Select
Exit Sub
End If
Next
End With
End Sub
Private Sub UserForm_Initialize()
Dim i, x, y, l, nbCol As Integer
Dim lab As Variant
Dim stColonnes() As Variant
'Mets en place les en-têtes de colonne
stColonnes() = Array("Feuille", "Cellule", "Valeur", "Valeur originale")
x = Me.lbDifferences.Left + 8
y = Me.lbDifferences.Top - 12
l = Me.lbDifferences.Width / 4
For i = 0 To 3
Set lab = Me.Controls.Add("Forms.Label.1")
lab.Caption = stColonnes(i)
lab.Top = y
lab.Left = x
x = x + l
Next
End SubQue j’affiche la boîte de dialogue en modal ou non ne change rien.
L’un de vous a-t-il une idée ?
JipéV
Bonjour,
Utiliser un UserForm pour comparer 2 feuilles est plutôt inhabituel.
Le plus simple me semble être d'utiliser une copie de de la source ou du jumeau et de noter les différences avec des couleurs.
A+
Merci Galopin01.
C’est exactement ce que j’ai fait. J’utilise l’UserForm pour parcourir les différences mises en couleur.
J’en profite pour dire que j’ai trouvé ce que je voulais. Pour que l’UserForm apparaisse au-dessus du classeur comportant les différences, j’active ledit classeur avant d’afficher l’UserForm.
Merci à tous.
JipéV