Afficher feuille depuis valeur Combobox/Listbox

Bonsoir XCellus,

Merci pour votre retour, cependant j'ai un code d’erreur lorsque je clique sur le bouton trié que ce soit en Listbox1,2,3,4. Pas vous ? Mon Excel qui ne sait pas gérer cela ?

Je souhaite, si possible, maintenir ce que je souhaite faire depuis le départ, c'est à dire récupérer les valeurs de la listbox5 pour m'en servir pour mon autre code de copier/coller avec VBA;

Dans le code ci-dessous, comment travailler avec la 1ère donnée de la listbox5 puis la suivante...jusqu'à la dernière?

Private Sub Cmb1_Click()
On Error GoTo ErrSelect
L = ListBox5.ListIndex
V = ListBox5.List(L, 0)
Sht = Application.WorksheetFunction.Choose(ListBox5.List(L, 1), "IE", "IT", "IE2", "IT2")
On active la 1ère feuille de la listbox5
Sheets(Sht & "_" & Left(V, 3)).Activate
Call Copie_colle 'on fait le copier-coller en appelant la macro
ListBox5.Selected(L) = False
'Quoi mettre ici si on veut activer la seconde feuille présente dans la listbox5 ?
Unload Me
Exit Sub
ErrSelect:
MsgBox "Aucune sélection"
End Sub

Merci encore XCellus, mon projet prend forme !

Bonne soirée

JB

Bonsoir JeanBaptisteP,

cependant j'ai un code d’erreur lorsque je clique sur le bouton trié que ce soit en Listbox1,2,3,4.

Cela dépend du message d'erreur. Normalement en utilisant la feuille DEBUT, (colonne R) pour Lister puis Trier et (colonne Q) pour le nombre de villes.

Et dans le module 1, macro sub Trivilles()

Cela arrive sur le fichier que tu as téléchargé ou que tu as adapté?

Ensuite que fait ceci

Call Copie_colle 'on fait le copier-coller en appelant la macro

Bonsoir XCellus,

Le message d'erreur apparait sur le fichier que vous avez posté. Voici le message d'erreur:

image

"Ensuite que fait ceci" => L'utilisateur vient ouvrir fichier EXCEL depuis une boite de dialogue, on copie la feuille dans le classeur ouvert par la boite de dialogue puis j'aimerais faire la même manip pour la deuxième feuille si elle est présente dans le listbox5

Ex: NANTES et PARIS apparaissent dans listbox5. On choisit le fichier EXCEL à ouvrir, on copie la feuille IE_NAN dans le classeur actif et on la colle dans le classeur ouvert par boite de dialogue puis on fait de même pour la feuille IE_PAR, on la copie dans le classeur actif et on la colle dans le classeur ouvert par boite de dialogue. et ainsi de suite

Pour cela que je veux scruter toutes les feuilles de la listbox5

Merci XCellus

JB

A nouveau,

Je suppose que le débogage surligne la macro Trivilles.

Car sur Excel 2016 il est possible qu'il n'accepte pas

Worksheets("DEBUT").Sort.SortFields.Add2

mais Add plutôt que Add2. A vérifier s'il bugge ici.

Ensuite pour le copie-colle. Il n' y a qu'un classeur à ouvrir et c'est sur ce 2ième classeur venant d'être ouvert que les feuilles du classeur Actif (Nantes et Paris) vont être copiées. C'est cela?

;suite,

Comme le second classeur est ouvert après le classeur actif contenant le formulaire et la ListBox5.

C'est effectivement possible d'automatiser la copie des feuilles cibles présentes en ListBox5 vers le second classeur.

Je posterais demain soir la macro adaptée.

Bonne fin de soirée.

A nouveau XCellus,

Merci beaucoup, pour résumer, je souhaite juste savoir comment passer à la deuxième feuille après avoir traité la première dans la macro Private Sub Cmb1_Click()

.Pour le copier/coller j'ai déjà mon code ne vous inquiétez pas.

Merci encore !

Bonne fin de soirée XCellus

Suite,

Si le click se fait sur la première ville de la ListBox5, voire même sans cliquer dessus si le but est de boucler sur toutes les villes de cette ListBox5

Il faut faire une boucle qui va du premier index au dernier présent.

Donc le début sera ainsi et ne pas oublier de fermer la boucle L

Private Sub Cmb1_Click()
On Error GoTo ErrSelect
Nv = ListBox5.ListCount-1
For L = 0 to Nv
V = ListBox5.List(L, 0)

et

ListBox5.Selected(L) = False
Next L
'Voir Unload Me pour quitter définitivement au lieu de Me.Hide
Me.Hide

Bonjour XCellus,

Un grand merci pour le temps passé sur mes différentes problématiques, j'arrive à copier coller certaines de mes feuilles avec les index présents dans la listbox5

Par contre je rencontre un souci malgré tout. Certaines feuilles se nomment SS_AFFRIQUE, SS_PAIR.S.MER, SS_ALBAN et lorsque je fais figurer la valeur A1 en listbox5 pour les traiter ensuite, le code VBA cherche SAI pour: SAINT-AFFRIQUE, SAINT PAIR SUR MER, SAINT ALBAN en nom de feuille. En fait le nom de la feuille n'est pas systématiquement composé des 3 premiers caractères de la valeur en cellule A1

Ne serait-il pas plutôt préférable de réaliser, au préalable un tableau avec 2 colonnes pour chaque type de feuille: IT; IE... en faisant apparaitre valeur cellule A1 et nom de la feuille ? Je poste en pièce jointe un type de ficher que l'on pourrait créer pour se repérer entre les noms de feuilles et leurs valeurs respectives en A1

Peut-être avez-vous une meilleure idée et je suis preneur car je ne connais pas suffisamment VBA pour savoir si l'on peut procéder plus simplement.

Merci beaucoup en tout cas !

JB

Bonjour JeanBaptisteP,

Tu n'as pas bien lu mon message du dernier Dimanche 14:06

Certaines feuilles se nomment SS_AFFRIQUE, SS_PAIR.S.MER, SS_ALBAN

Tu n'as présenté que IE_ ,IT_, IE2_, IT2_ pour remplir les 4 ListBox. Il manque donc SS_

Ensuite il serait préférable de nommer les feuilles AFFRIQUE-Saint ou AFFRIQUE-ST. Et idem pour les autres.

Sinon, pour les villes, avec tous les SAINTS que compte la France, il n'y a que le bon DIEU qui comprendrait.

Car faire un tableau supplémentaire alors que les Listbox font le même travail, c'est faire double emploi.

Mais bon, à voir...

Bonjour XCellus,

Je suis passé à côté de cette annotation je m'en excuse. J'ai dû me résoudre à créer une feuille en parallèle qui décortique le nom de tous mes onglets et où je peux récupérer le nom exact de mes feuilles à partir de la valeur obtenue par le biais de votre macro: (Sht & "_" & V)

Voici le code que je pensais développer mais je n'arrive pas à identifier le problème

Private Sub Cmb1_Click()
Dim celluletrouvee As Range
Dim ligne As Range
Dim valeur As String

On Error GoTo ErrSelect
Nv = ListBox5.ListCount - 1
For L = 0 To Nv
V = ListBox5.List(L, 0)
Sht = Application.WorksheetFunction.Choose(ListBox5.List(L, 1), "IE", "IT", "IE2", "IT2")
resultat = (Sht & "_" & V)
Set celluletrouvee = Worksheets("Extraction").Range("D1:D300").Find(resultat, lookat:=xlWhole) 'on cherche le nom de l'onglet issu de la variable resultat dans la feuille "Extraction"

    If celluletrouvee Is Nothing Then
        MsgBox ("pas trouvé")
        Else
        ligne = celluletrouvee.Select 'on sélectionne en colonne D la cellule qui contient le mot exact de la variable resultat 
        ActiveCell.Offset(, -3).Select ' on décale en colonne A pour récupérer le nom de feuille exacte
        valeur = ActiveCell 'on mémorise la valeur de la cellule en A pour savoir sur quelle feuille on va travailler ensuite
    End If
Sheets("valeur").Activate
ListBox5.Selected(L) = False
Next L
Unload Me
Exit Sub
ErrSelect:
MsgBox "Aucune sélection"
End Sub

Voici une copie d'écran de la feuille "Extraction" (c'est un exemple):

image

Auriez-vous une piste à me proposer s'il vous plait ?

Merci

JB

Bonsoir JeanBaptisteP,

Car faire un tableau supplémentaire alors que les Listbox font le même travail, c'est faire double emploi.

J'ai préféré passer par les ListBox plutôt qu'insérer un tableau supplémentaire qui ajouterait trop d'échanges.

Voir ci-dessous le fichier et ses modifications dans les macros ListBox présentes.

J'ai laissé en commentaires les anciennes lignes de code. Si jamais il y avait d'autres feuilles ou autres trucs bizarres.

13jb-v4mod4.xlsm (55.60 Ko)

Bonsoir XCellus,

Merci pour votre retour, je vais tester votre macro mais surement plus efficace et moins fastidieuse que de passer par un tableau.

Aussi, j'ai bien réussi à filtrer les listbox par ordre alphabétique en remplaçant Add2 par Add. Par contre est-ce possible de le faire automatiquement et systématiquement dès que l'utilisateur clique sur "<" ? Faut-il appeler la macro Triville dans le code du bouton "<" ?

Merci encore !

JB

Bonjour JeanBaptisteP,

J'ai oublié de modifier le Tri des villes, cela induira un bug, après une opération de tri.

Donc corrigé avec le fichier ci-dessous.

17jb-v4mod4.xlsm (58.83 Ko)

Bonjour XCellus,

C'est parfait, mon projet prend forme, et en grande partie grâce à vous, merci beaucoup!

Dans le fichier que vous avez posté, le tri est fait à l'ouverture du USF c'est bien ça ?

Par contre, si je glisse un index vers la listbox5 et que je le renvoie vers ça listbox d'origine il revient en bas, c'est à ce moment là que je vais devoir cliquer sur l'icone de tri A->Z pour refaire le tri.

Est-ce possible d'automatiser le tri de toutes les listbox dès lors qu'on clique sur le bouton de couleur pastel "<" ?

Merci encore XCellus !!

JB

A nouveau,

Voilà, c'est encore gagné... H _________ H

Est-ce possible d'automatiser le tri de toutes les listbox dès lors qu'on clique sur le bouton de couleur pastel "<" ?

Oui, c'est possible, mais il ne faut pas oublier qu'en quittant le formulaire, donc un RAZ des villes, et après relance du formulaire le tri sera initialisé.

Le seul intérêt est quand l'utilisateur s'est trompé dans la sélection d'une ville ou de plusieurs. Et qu'il souhaite toujours avoir des listbox triés.

Donc, si c'est dans ce but. Voilà ci-dessous:

        End If
    Next iCtr

'TRI des villes sur sortie de la ListBox5
For K = 1 To 4
LBtri
Next K
End Sub

Cela à la fin de la macro Private Sub BTN_MoveSelectedLeft_Click()

La boucle K lancera l'opération pour les 4 listbox.

Merci Xcellus, je vais tester votre code de suite.

Par contre je bloque sur une condition que j'ai voulu mettre en place: Lorsque j'ouvre mon fichier destination via la boite de dialogue, je vérifie que la valeur dans A2 de la feuille "Sommaire" est identique à celle de la feuille "Sommaire" du classeur actif. Si ce n'est pas vrai, alors je ferme le classeur. J'ai un message d'erreur qui surligne en jaune cette ligne: If Wbd.Sheets("Sommaire").Range("A2").Value <> Wbs.Sheets("Sommaire").Range("A2").Value

Private Sub Cmb1_Click()
 Dim Wbs As Workbook, Wbd As Workbook
  Dim CheminFichier As String
  Dim dLigD As Long
  Dim dLigS As Long

Application.ScreenUpdating = False
On Error GoTo ErrSelect

' Définir le classeur source
  Set Wbs = ThisWorkbook
  ' Demander à l'utilisateur le fichier à ouvrir
  CheminFichier = Application.GetOpenFilename( _
    FileFilter:="Fichiers Excel (*.xlsm*), *.xlsm*", _
    Title:="Sélectionner le fichier destination", _
    MultiSelect:=False)
   ' Si demande annulée, sortir
    If CheminFichier = "Faux" Then GoTo FinSub
    ' Définir le classeur de destination
    Set Wbd = Workbooks.Open(CheminFichier, 0, ReadOnly:=False)

    If Wbd.Sheets("Sommaire").Range("A2").Value <> Wbs.Sheets("Sommaire").Range("A2").Value Then
    MsgBox "Fichier non identique"
    Wbd.Close False

    Else
'mon code pour copier mes données...
end if
end sub

Auriez-vous une piste ? Car j'ai essayé ce code sur un fichier vierge et ça fonctionne... :/

Bonne soirée

JB

Suite,

Sur le fichier portant les Listbox, c'est la cellule A1 qui détient les noms des villes.

Ensuite il n'y a pas besoin de value à la fin du Range. Une ville, qui plus est, est textuelle.

Place un Msgbox avant la condition If pour lire les valeurs des Range

X=Wbd.Sheets("Sommaire").Range("A2").Value Y=Wbs.Sheets("Sommaire").Range("A2").Value
Msgbox "valeur 1= " & X & "valeur 2= " & Y

Bonjour XCellus,

Merci, je me sers de la valeur de A2 pour savoir si le fichier choisi est identique à celui sur lequel je travaille. Pour résumer, si le texte placé en A2 du classeur destination n'est pas identique à celui en A2 du classeur source, alors je mets un msgbox "erreur, fichier différent"

J'ai appliqué votre conseil, si les 2 fichiers sont identiques la suite de la macro se déroule bien. Si ce n'est pas le cas, j'obtiens un message d'erreur EXCEL:

image

Là j'avoue je ne comprends pas...

Auriez-vous une idée ?

JB

Bonjour JeanBaptisteP,

Voici une proposition.

Private Sub Cmb1_Click()
Dim Wbs, Wbd As Workbook
Set Wbs = ThisWorkbook
ChemFich = Application.GetOpenFilename(FileFilter:="Fichier XL (*.xlsm),*.xlsm")
If ChemFich = False Then E = 1: GoTo ErrFich
Set Wbd = Workbooks.Open(ChemFich, 0, ReadOnly:=False)
If Wbd.Sheets(1).Range("A2") <> Wbs.Sheets(1).Range("A2") Then E = 2: GoTo ErrFich
'Suite du code pour tout traitement
MsgBox "Lancement du traitement"
'
End
ErrFich:
MsgBox IIf(E = 1, "Fichier Inaccessible", "Erreur valeur")
End Sub

Note: Dans ton code If CheminFichier = "Faux" n'est pas une ligne correcte. Le résultat n'est pas textuel mais doit être le booléen False.

En effet, par le choix sur le bouton Annuler, aucun nom de fichier est sélectionné, donc aucun texte disponible.

Rechercher des sujets similaires à "afficher feuille valeur combobox listbox"