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 Sub

Que 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

Rechercher des sujets similaires à "conserver boite dialogue ouverte dessus toutes feuilles"