XL 2019 copier la valeur de cellule d une autre feuille

SPGoder

XLDnaute Occasionnel
Bonjour
Je suppose que c'est un problème basique, mais en cherchant sur le forum, je n'ai pas trouvé. Ma femme dirait que je ne sais pas chercher....
Je sais qu'il faut éviter de rendre active des feuilles pour rien d'où ma question
VB:
Private Sub ComboBox1_Change()

If ComboBox1.Value <> "" Then

Dim ligne As Long, i As Integer, Var2 As Variant, lig As Long, j As Integer

    'initialise combobox6 "Code Bien"
         With ComboBox6
            For Var2 = 2 To Worksheets("Biens").Range("A" & Rows.Count).End(xlUp).Row
               .AddItem Worksheets("Biens").Range("A" & Var2)
            Next Var2
            ligne = Var2
        End With

        For i = 2 To ligne
            If Range("F" & i).Value = ComboBox1.Value Then
                If Range("B" & i).Value = ComboBox4.Value Then
                lig = i
                End If
            End If
         Next i
  With WsBI
        For j = 1 To 3
        Me.Controls("TextBox" & j) = Worksheets("Biens").Cells(lig, j + 2)
        Next j
            Me.ComboBox6 = Worksheets("Biens").Cells(lig, 1)
  End With
End If
     
End Sub

J'ai mis toute le code de la macro, et elle fonctionne bien
Si la feuille "biens" n'est pas active, j'ai un message d'erreur
sur la ligne
Me.Controls("TextBox" & j) = Worksheets("Biens").Cells(lig, j + 2)

Pourtant je lui indique bien que je veux utiliser la feuille "bien" avec With WsBI
( Set WsBI = Worksheets("Biens") dans initialise() et Dim WsBI As Worksheet dans option explicite)

Si je mets WsBi.activate en début de code , cela fonctionne, mais peut on l'éviter?
 
Dernière édition:

_Thierry

XLDnaute Barbatruc
Repose en paix
Bonsoir @SPGoder , le Forum

Quand je lis ceci :
Pourtant je lui indique bien que je veux utiliser la feuille "bien" avec With WsBI
( Set WsBI = Worksheets("Biens") dans initialise() et Dim WsBI As Worksheet dans option explicite)

Je pense que tu n'as pas saisi la portée des variables et la façon d'utiliser des objets déclarés avec un Set.

Dans cette partie :
VB:
        For i = 2 To ligne
            If Range("F" & i).Value = ComboBox1.Value Then
                If Range("B" & i).Value = ComboBox4.Value Then
                lig = i
                End If
            End If
         Next i

En stipulant simplement "Range", VBA ne sait pas que tu parles de la Feuille "Bien", mais de la Feuille active.... (Le lig doit avoir une valeur farfelue qui plante ensuite ton " Me.Controls("TextBox" & j) = Worksheets("Biens").Cells(lig, j + 2) "

Si tu as vraiment fait correctement la déclaration de WsBI en Variable Globale en Top de Module (en dessous de Option Explicit) et si tu as bien fait le Set dans le UserForm_Initialize, normalement ton code devrait ressembler à ceci :

VB:
Option Explicit

Private WsBi As Worksheet


Private Sub UserForm_Initialize()
Set WsBi = Worksheets("Biens")

End Sub



Private Sub ComboBox1_Change()

If ComboBox1.Value <> "" Then

Dim ligne As Long, i As Long, Var2 As Long, lig As Long, j As Integer

    'initialise combobox6 "Code Bien"
         With ComboBox6
            For Var2 = 2 To WsBi.Range("A" & Rows.Count).End(xlUp).Row
               .AddItem WsBi.Range("A" & Var2)
            Next Var2
            ligne = Var2
        End With

        For i = 2 To ligne
            If WsBi.Range("F" & i).Value = ComboBox1.Value Then
                If WsBi.Range("B" & i).Value = ComboBox4.Value Then
                lig = i
                End If
            End If
         Next i
  With WsBi
        For j = 1 To 3
        Me.Controls("TextBox" & j) = WsBi.Cells(lig, j + 2)
        Next j
            Me.ComboBox6 = WsBi.Cells(lig, 1)
  End With
End If
    
End Sub

(Non testé, sur UserForm)

Bonne nuit
@+Thierry
 

SPGoder

XLDnaute Occasionnel
je pense que tu n'as pas saisi la portée des variables et la façon d'utiliser des objets déclarés avec un Set
Tu as tout a fait raison. Pourtant, c'est pas faute de passer du temps. j'ai même acheté un livre, mais j'ai multitudes de question au fur et à mesure . (car j'ai du mal à faire la différence entre telle ou telle chose, car il faut du concret et aussi des contres exemples)Alors je cherche sur le net, avec plus ou moins de succès. Comme on dit, je tâtonne.
Par contre l'explication que tu donnes, j'aurais du le trouver moi même, car évidente. Manque de rigueur et d'autre chose....
J'avais bien déclaré WsBi comme il faut.
Et évidement, ton code fonctionne.
Je te remercie de prendre le temps de m'expliquer mes erreurs, c'est instructif.
Du coup, si tu as une petite explication sur le "set", je ne suis pas contre.
 

Discussions similaires

Réponses
11
Affichages
280
Réponses
0
Affichages
137