USF, Remplissage Textbox à partir de plusieurs feuilles

GBI

XLDnaute Occasionnel
Bonjour les XLnautes,

Je travailles actuellement sur un projet de USF et je rencontre un problème. J'ai trouvé une méthode pour afficher les valeurs que je recherchai dans des textbox mais je n'arrive pas à mettre à jour ce tableau dès lors que la feuille qui contient les donnees sources n'est pas active.
Cela me pose problème dans la mesure ou je souhaiterai extraire des informations de plusieurs feuilles à afficher dans ce USF

Afin de vous éclairer un peu plus j'ai mis un screenshot de mon USF en PJ

Voici le code que j'utilise pour afficher les données dans mes textbox

Code:
Sub Modification_affichage()
Dim C As Range
Set C = Sheets("V1_Donnees").Range("V:V").Find(What:=ComboBox1)
    If Not C Is Nothing Then
    TextBox100.Value = C.Offset(, 1)
    TextBox200.Value = C.Offset(, 2)
End If
Dim Variable(1 To 4) As String
Dim Ope(1 To 14) As String
Dim S As String

Ope(1) = "objet1"
Ope(2) = "objet2"
Ope(3) = "objet3"
Ope(4) = "objet4"
Ope(5) = "objet5"
Ope(6) = "objet6"
Ope(7) = "objet7"
Ope(8) = "objet8"
Ope(9) = "objet9"
Ope(10) = "objet10"
Ope(11) = "objet11"
Ope(12) = "objet12"
Ope(13) = "objet13"
Ope(14) = "objet14"

For i = 1 To 14
Variable(1) = ComboBox1.Value 'Définit le nom de la ville comme critère de sélection
Variable(2) = ComboBox2.Value 'Définit le mois comme critère de sélection
Variable(3) = Ope(i) 'Définit l'objet comme critère de sélection
Variable(4) = "PREV" 'Définit l'option prévisionnel ou réalisé comme critère de sélection (j'ai une feuille pour chaque variable de ce type : "PREV", "PREV ACH", "REAL")

For Each C In Range("A2", Range("A2").End(xlDown).Address) 'Pour chaque C dans l'ensemble des données
      If C.Value = Variable(3) Then 'Si la valeur de C répond au critère de la variable ope(i) alors
        If C.Offset(0, 3).Value = Variable(1) Then 'Si la ville de la ligne est identique à la combobox1 alors
            If C.Offset(0, 9).Value = Variable(4) Then 'S'il s'agit de données prévisionnelles alors
                If C.Offset(0, 8).Value = Variable(2) Then 'S'il s'agit de données du mois choisi alors
                    Me.Controls("TextBox" & i) = Format(C.Offset(0, 6).Value, "##,##0.00000") 'On ajoute le cout unitaire dans la ligne correspondante et on passe à la ligne suivante
                End If
            End If
        End If
      End If
    Next 
Next i

J'ai tenté un
Code:
For Each C In Range("V1_Donnees!A2", Range("V1_Donnees!A2").End(xlDown).Address)
"V1_Donnees" étant le nom de la feuille où se trouvent les données
Mais cela ne fonctionne pas :(

Si qlq saurait m'expliquer pourquoi ca merde au niveau de la syntaxe et encore mieux: si qlq pouvait m'aider à trouver une solution :)
Vous remerciant d'avance du temps que vous m'accorderez
Cdt
 

Pièces jointes

  • Sans titre.jpg
    Sans titre.jpg
    52.2 KB · Affichages: 95
  • Sans titre.jpg
    Sans titre.jpg
    52.2 KB · Affichages: 110
  • Sans titre.jpg
    Sans titre.jpg
    52.2 KB · Affichages: 101
Dernière édition:
G

Guest

Guest
Re : USF, Remplissage Textbox à partir de plusieurs feuilles

bonjour,

Pas trop compris ta demande mais il y a une erreur dans la ligne:

Code:
For Each C In Range("V1_Donnees!A2", Range("V1_Donnees!A2").End(xlDown)[COLOR=red][B].Address[/B][/COLOR])

Remplacer par:

Code:
For Each C In Range("V1_Donnees!A2", Range("V1_Donnees!A2").End(xlDown))

Mais avec ce genre de code si tu n'as pas de données sous A2 tu riques de te retrouver avec une plage de cellules d'au moins 65535 pour une version excel <2007 et 1048575 lignes pour 2007.

Utilise plutôt:
Code:
 Range("V1_Donnees!A2:A", Range("V1_Donnees!A" & Rows.Count).End(XlUp).Row)

Et Ta boucle:

Code:
For Each C In Range("A2", Range("A2").End(xlDown).Address) 'Pour chaque C dans l'ensemble des données
      If C.Value = Variable(3) Then 'Si la valeur de C répond au critère de la variable ope(i) alors
        If C.Offset(0, 3).Value = Variable(1) Then 'Si la ville de la ligne est identique à la combobox1 alors
            If C.Offset(0, 9).Value = Variable(4) Then 'S'il s'agit de données prévisionnelles alors
                If C.Offset(0, 8).Value = Variable(2) Then 'S'il s'agit de données du mois choisi alors
                    Me.Controls("TextBox" & i) = Format(C.Offset(0, 6).Value, "##,##0.00000") 'On ajoute le cout unitaire dans la ligne correspondante et on passe à la ligne suivante
                End If
            End If
        End If
      End If
    Next 
Next i

Peut être avantageusement remplacer par:

Code:
For Each C In Range("A2", Range("A2").End(xlDown).Address) 'Pour chaque C dans l'ensemble des données
    If C.Value = Variable(3) And _
                  C.Offset(0, 3).Value = Variable(1) And _
                  C.Offset(0, 9).Value = Variable(4) And _
                  C.Offset(0, 8) = Variable(2) Then
         Me.Controls("TextBox" & i) = Format(C.Offset(0, 6).Value, "##,##0.00000")
    End If
Next i

[Edit] hello MasterDico et Requin

A+
 

GBI

XLDnaute Occasionnel
Re : USF, Remplissage Textbox à partir de plusieurs feuilles

bonjour


pas de fichier pour tester + neurones en surchauffe + pas la forme
voici un essai
à tester

Je sais que travailler sans le fichier c'est compliqué, je suis en train d'essayer de tout "anonymiser"
Ta solution ne semble malheureusement pas fonctionner :(

EDIT: Bonjour à tous je n'avais pas vu la quantité de réponses entre les deux posts je regardes ca de suite ! je vous ai mis le fichier en PJ si ca peut en éclairer qlq uns
 

Pièces jointes

  • GBI.zip
    17.6 KB · Affichages: 58
  • GBI.zip
    17.6 KB · Affichages: 70
  • GBI.zip
    17.6 KB · Affichages: 66
Dernière édition:
G

Guest

Guest
Re : USF, Remplissage Textbox à partir de plusieurs feuilles

Bonjour GBI,

GBI dans post #1 à dit:
Cela me pose problème dans la mesure ou je souhaiterai extraire des informations de plusieurs feuilles à afficher dans ce USF

Quelles informations de quelle (s) feuille(s) ? La feuille active si son nom finit par "Donnees" ?

Une question bien posée amène plus rapidement des réponses.

A+
 

GBI

XLDnaute Occasionnel
Re : USF, Remplissage Textbox à partir de plusieurs feuilles

Bonjour GBI,



Quelles informations de quelle (s) feuille(s) ? La feuille active si son nom finit par "Donnees" ?

Une question bien posée amène plus rapidement des réponses.

A+

Bonjour Hasco :)
Je pense faire en sorte que les informations soient effectivement issues de feuilles dont le nom serait "V*_Donnees" et de format identique
Mais je souhaites pouvoir afficher des informations de la feuille V1_Donnees, V2_Donnees et V3_Donnees sur le meme userform d'où mon problème, le USF que j'ai créé ne peut afficher que les données de la feuille active
 
G

Guest

Guest
Re : USF, Remplissage Textbox à partir de plusieurs feuilles

Re,

Mais je souhaites pouvoir afficher des informations de la feuille V1_Donnees, V2_Donnees et V3_Donnees sur le meme userform d'où mon problème,
En même temps?

le USF que j'ai créé ne peut afficher que les données de la feuille active
C'est faux: les information ne viennent pas de la feuille active mais de "V1_Donnees"

Toujours pas très clair?

M'enfin si tu souhaite afficher les informations de la feuille active (quelque soit son nom) lorsque tu lances le UserForm,

1 - mets en tête de module(avant toute procédure ou fonction)

Code:
Private Feuille As WorkSheet
2 - Dans UserForm Initialize mets quelque chose comme ceci (en début de procédure ou après les déclarations de variable):

Code:
If ActiveSheet.Name Like "V*_Donnees" Then
        Set Feuille = ActiveSheet
Else
       Msgbox "Vous êtes sur la mauvaise feuille, sélectionnez une feuille de données et recommencez"
      unLoad Me.
 End If
3 - dans toutes les procédures et fonction tu changes les références à WorkSheets("V1_Donnees") par Feuille exemple:

Code:
WorkSheets("V1_Donnees").Range("A1") '-> Feuille.RAnge("A1")
 
Range("V1_Donnees!A2") '-> Feuille.Range("A2")
Ou par Bloc

Code:
 With Feuille
     .Range("A2")= trucmachinchouette
     .Cells(0,i)= BiduleChose
     for each C in .Range("A2", .Range("A2").End(xlDown))
          c.offset(0,i) = chose
     next 
 End With
A+
 

GBI

XLDnaute Occasionnel
Re : USF, Remplissage Textbox à partir de plusieurs feuilles

Re,


Mais je souhaites pouvoir afficher des informations de la feuille V1_Donnees, V2_Donnees et V3_Donnees sur le meme userform d'où mon problème,

En même temps?

Tout d'abord, merci de tes efforts pour me comprendre je sais que j'ai du mal à m'exprimer clairement.

Pour répondre à ta premiere question de ce message je souhaites effectivement pouvoir lancer mon userform dans une feuille "notice" (par exemple) et afficher dans le meme USF les informations des feuilles:
-V1_Donnees
-V2_Donnees
-Realise

A l'heure actuelle, si ma feuille active n'est pas celle dans laquelle les textbox vont chercher les données je n'ai aucune valeur
As-tu vu mon fichier joint?
Les trois premieres colonnes de textbox de mon USF sont issues de V1_Donnees, la 4eme et la 5eme sont issues de V2_Donnees par exemple
 
G

Guest

Guest
Re : USF, Remplissage Textbox à partir de plusieurs feuilles

Re,

Les trois premieres colonnes de textbox de mon USF sont issues de V1_Donnees, la 4eme et la 5eme sont issues de V2_Donnees par exemple

C' est par exemple ou je choisis au hasard ou c'est ce qu'il de faut?

Trajectoire_ACH et Budget_ACH correspondent à quelles données de quelles colonnes. Ta feuille V2_Donnees est quasi vide ou les titres de colonnes ne correspondent pas aux titre de colonnes du usf?

C'est quand même pas à moi de deviner.

De toute façon tel que le code est ecrit tu peux essayer de le faire tout seul.

Reviens avec tes essais et plus de précisions.

A+
 

GBI

XLDnaute Occasionnel
Re : USF, Remplissage Textbox à partir de plusieurs feuilles

.

De toute façon tel que le code est ecrit tu peux essayer de le faire tout seul.

Reviens avec tes essais et plus de précisions.

A+

J'ai trouvé une solution à mon problème. C'est l'offset qui semble poser problème, je l'ai résolu en passant par des range

Code:
For n = 2 To Range("V1_Donnees!A65536").End(xlUp).Row
      If Range("V1_Donnees!A" & n).Value = Variable(3) Then
        If Range("V1_Donnees!D" & n).Value = Variable(1) Then
            If Range("V1_Donnees!J" & n).Value = Variable(4) Then
                If Range("V1_Donnees!I" & n).Value = Variable(2) Then
                    Me.Controls("Textbox" & i) = Format(Range("V1_Donnees!G" & n).Value, "##,##0.00000")
                End If
            End If
        End If
      End If
    Next n
J'ai conservé cette méthode car celle que tu m'avais présenté (Cf. ton premier post) ralentissait considérablement le fonctionnement des opérations

Merci à tous pour votre aide précieuse
Cdt
 
G

Guest

Guest
Re : USF, Remplissage Textbox à partir de plusieurs feuilles

Re,

Tant mieux si tu as trouvé ta solution.

Personnellement je ne vois pas en quoi elle est en relation avec ta demande puisque tu travaille toujours sur la feuille V1_donnees!?

A+
 

Discussions similaires

Réponses
11
Affichages
280
Réponses
6
Affichages
227
Réponses
4
Affichages
191