récuperer .Name ou .Caption d'une page d'une multipage pour condition

listerla

XLDnaute Nouveau
Bonjour,

Je suis actuellement confronté a un problème sur vba/excel : je n'arrive pas a récuperer la valeur du caption ou le nom d'une page spécifique d'une multipage, pour ensuite utiliser cette valeur dans une boucle conditions.

Voici le description de mon programme :
Lorsque que je lance mon userform, j'ai un choix multiples à faire dans un listbox situé dans la page 1(=index 0). comprenant plusieurs nom différents.

Lorsque que j'ai fait mes x selections, je les valide via un bouton. Ceci me creer x autres pages (avec le caption et nom définis) dans la même multipages via ce code la:

For i = 1 To ListBox1.ListCount

nom = Sheets("Feuil1").Range("B" & i + 1)

If ListBox1.Selected(i - 1) = True Then
j = j + 1

Set m = Me.MultiPage1.Pages.Add
With m
.Name = nom
.Caption = nom
.Index = j
End With

End if
Next


Ce que je veux faire c'est que : si on oublie de selectionner un nom dans la page 1 (et donc indice 0), lorsque je re clic sur le bouton (en ayant sélectionner le nom manquant), SEUL la page (du nouveau nom) se creer. Ceci afin de ne pas avoir de pages doublon.

Au départ j'ai mis le code ci-dessous en début de programme (donc avant le code de creation des pages ) :


If MultiPage1.Pages.Count > 1 Then
iPage_max = MultiPage1.Pages.Count
'For iPage = 1 To iPage_max-1
'Me.MultiPage1.Pages.Remove (1)
'Next
Else
End If


Dans l'idée cela marche car il me supprime toutes les pages d'indice supérieur à 0 avant d'effectuer le code qui me (re)créer les pages suivant ma nouvelle selection.

SAUF que dans chaque page créer, on demande d'effectuer un nouvelle selection via une listbox. (on a donc une listbox sur chaque pages). Et lorsqu'on efface les pages, si on a eu le malheur de commencer nos nouvelles selections (sur les pages créées) et bien on devra donc tout recommencer.


Du coup je voudrais faire un truc du type :

Pour chaque pages de mon multipage, si le nom de la page (ou le caption) est différentes du nom (ou caption) de ma nouvelle page qui sera creer, alors on créer la nouvelle page. Sinon on ne la créer pas.

Dans l'idée ca donne ceci :

Dim z as string

For ipage = 0 To .Pages.Count - 1
z= Me.MultiPage1.Pages(ipage).Caption

If z <> nom Then

Set m = Me.MultiPage1.Pages.Add
With m
.Name = nom
.Caption = nom
.Index = j
End With

Else
Next


Seulement la ligne z= Me.MultiPage1.Pages(ipage).Caption bug.

et je vois vraiment pas (et étant absolument débutant dans le VBA/userform) ca m'aide encore moins.

Du coup je m'en remet a vous.


après de la même manière j'aimerais que si on déselectionne un nom et qu'on reclick sur le bouton, seul la page liée au nom soit supprimer. Mais ceci étant le modèle inverse à mon problème ca ca ne devrai pas me poser trop de soucis une fois mon problèeme résolu.


En vous remerciant par avance
 

Papou-net

XLDnaute Barbatruc
Re : récuperer .Name ou .Caption d'une page d'une multipage pour condition

Bonjour lister0077, et bienvenue à toi,

Pour obtenir l'index de la page sélectionnée :

Code:
MultiPage1.Value
et pour récupérer le nom de la page sélectionnée :

Code:
MultiPage1.SelectedItem.Caption
A partir de ces précisions, tu devrais pouvoir continuer ta programmation sans difficulté.

Espérant avoir aidé.

Cordialement.
 

listerla

XLDnaute Nouveau
Re : récuperer .Name ou .Caption d'une page d'une multipage pour condition

Merci c'est exactement ce qu'il me falait.

Nénamoins j'ai deux autre petites question un peu plus éthique :

Première question :
Si je met mon code d'ajout des pages dans une macro secondaire (contenant des variable/données établis dans ma macros principale).
Losque je fait appel a cette dernière dans ma macro principale par call macro_secondaire, les variables calculer dans la principale ne sont pas retranscris dans la secondaire.

Exemple :
macro_principale :
for i=1 to 10
z= range("A"&i).value
call macro_secondaire

avec pour macros_secondaire :
Set m = Me.MultiPage1.Pages.Add
With m
.Name = z
.Caption = z.
End With

le z calculer dans la principale ne sera pas défini dans la secondaire. Et donc j'aurais pas de nom ou de cpation de ma pages. puisque z vaudra "".
Est il possible d'y remedier?

Deuxième question :
Lors du calcul d'un variable x avec un boucle for
cette dernière prendre donc plusieur valeurs

Est il possible de faire un test de comparaison sur toute les valeurs calculer et non une a une
Par exemple :

for i = 0 to Pages.Count - 1 '(peut aller jusqu'a plus de 100 pages)
MultiPage1.Value = i
z = MultiPage1.SelectedItem.Caption
next

if caption = à au moins une des valeur de z (de l'ensemble des valeurs calculer) then
xxxxxx
else
yyyyyy
endif

j'ai une bonne idée de comment faire, mais ca me nécéssite de stocker chaque valeur de z sur une feuille de calcul.
Est il possible d'éviter ca et donc de faire autrement ?

En te remerciant
 

Papou-net

XLDnaute Barbatruc
Re : récuperer .Name ou .Caption d'une page d'une multipage pour condition

RE :

Sans connaître la structure VBA de ton projet, je peux tout de même tenter de t'aider.

Question 1 : passer le nom de la page (z) en paramètres dans la macro secondaire. Ex :

Code:
Sub Macro principale
For i=1 To 10
call macro_secondaire Range("A" & i).Value
...
End Sub

Sub Macro secondaire(z As String)
Set m = Me.MultiPage1.Pages.Add
   With m
.Name = z
.Caption = z.
End With
...
End Sub
Question 2 : si tu ne veux pas écrire le nom des plages dans une feuille, tu peux utiliser un tableau :

Code:
Dim Tabl() As String
Private Sub UserForm_Click()
For i = 0 To MultiPage1.Pages.Count - 1 '(peut aller jusqu'a plus de 100 pages)
  ReDim Preserve Tabl(i)
  Tabl(i) = MultiPage1.Pages(i).Caption
Next

End Sub

Sub TaMacro()
For z = 0 To UBound(Tabl)
  If Tabl(z) = Caption Then
    xxxx
    Else
    yyyy
  End If
Next
End Sub
Tout ceci bien sûr si j'ai compris les questions, ce qui n'est pas évident sans fichier.

Restant à ton écoute.

Cordialement.
 
Dernière édition:

listerla

XLDnaute Nouveau
Re : récuperer .Name ou .Caption d'une page d'une multipage pour condition

Effectivement je n'avais pas joint de fichier.

Voila qui est fait.


En fait je n'arrive toujours pas à faire en sorte que seule les pages nouvellement selectionnées s'ajoutent et que les autres restent.
Et vice versa.

Ceci est géré par la macro Private Sub CommandButton1_Click() dont le caption est "ajouter adresse" :

Tu trouveras en vert (commentaire) ce que j'ai tenté de faire.

Et entre les deux blocs verts, c'est le morceau de code que j'aimerais faire appel en le mettant dans une macro secondaire pour que cela soit plus lisible. (mais ca c'est vraiment secondaire/pour l'éthique)

Si tu lances la macros comme ca, les pages sont ajoutées tout comme il faut, mais si tu reclic sur le bouton, celles déja sélectionnées sont dupliquées. (ce que je ne veux pas).

En te remerciant pour ta patience et ton aide

Cordialement,
 

Pièces jointes

  • Classeur1 - Copie.xlsm
    27.4 KB · Affichages: 68
  • Classeur1 - Copie.xlsm
    27.4 KB · Affichages: 81
  • Classeur1 - Copie.xlsm
    27.4 KB · Affichages: 90
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 203
Messages
2 086 196
Membres
103 153
dernier inscrit
SamirN