Retour en VBA

Hicsygrek

XLDnaute Occasionnel
Bonjour à tous,

Ca me dérange un peu de poster un sujet pour ma demande, mais je ne veux pas monopoliser une personne non plus ... :eek:

Voici un peu moins d'une semaine que je bidouille du code vba par rapport à un userform.
Et là, il m'arrive de créer des situations où l'utilisation de l'usf nécessite un "come back" dans l'exécution du code. J'ai donc trouvé une solution qui est la suivante :

Code:
Dim TV As Variant, L As Long, C As Long
Target = CboPerso1
Set ShtS = Sheets("Polyvalence")
TV = ShtS.Range("A:A").Find(What:=Target).EntireRow.Value
LstBComp1.Clear
For C = 3 To 54
   If TV(1, C) <> "" Then
        LstBComp1.Visible = True
        IntMachine1.Visible = True
        IntPost1.Visible = True
        IntNiv1.Visible = True
        IntFormation1.Top = 174
        LstBFormation1.Top = 186
        LstBComp1.AddItem: L = LstBComp1.ListCount - 1
        LstBComp1.List(L, 0) = Feuil3.Cells(1, C).MergeArea(1, 1).Value
        LstBComp1.List(L, 1) = Feuil3.Cells(2, C).Value
        LstBComp1.List(L, 2) = TV(1, C)
    ElseIf LstBComp1.ListCount = 0 Then
        LstBComp1.Visible = False
        IntMachine1.Visible = False
        IntPost1.Visible = False
        IntNiv1.Visible = False
        IntFormation1.Top = 120
        LstBFormation1.Top = 132
    End If
   Next C

Ceci est un extrait d'une exécution suite à un combobox change. La listbox va chercher des infos dans un tableau et les affiche sur 3 colonnes, bref.

Il peut cependant arriver que cette listbox soit vide, j'ai donc décidé de la masquer LstBComp1.Visible = False ainsi que des intitulés qui s'y rapportent et de déplacer la listebox suivante à sa place :

IntFormation1.Top = 120
LstBFormation1.Top = 132

(partie après Else If)

Chouette ça fonctionne ! Mais si je reviens sur la combobox et sélectionne une autre personne ayant des informations dans ListBComp1, les objets ne reprennent pas la position initiale et ces infos n'apparaissent pas !
J'ai testé Ctrl + Z mais ça n'annule pas la disparition de ma listbox.

Bon, bon, j'adapte à nouveau mon code en écrivant l'effet inverse au début de la procédure, c'est à dire afficher ListBComp1 et entrer les coordonnées de ListBFormation1. Yahoo ! Ca tourne comme sur des roulettes :cool: mais ...

Ma question est la suivante : Est-ce possible de n'avoir qu'une ou deux lignes qui me permettraient de ne pas avoir a entrer la "situation initiale" à chaque niveau de mon code en exécutant une sorte de retour en arrière ... :confused:

J'ai songé à Do Loop mais ça m'fait planter excel (j'm'y prends surement mal !):mad:

Sinon, autre question tout à fait HS, j'ai lu qu'on pouvait placer des balises, qu'est-ce que c'est ? Comment les mettre ?

Merci d'avance pour vos réponses !
 

fhoest

XLDnaute Accro
Re : Retour en VBA

Bonjour,
pas sur d'avoir tout compris,mais tu peut utiliser une sous routine dans un modules ou un sub différents dans le code générale du usf.
il suffirait du fichier pour pouvoir comprendre mieux le problème ou d'un simple extrait de fichier sans données confidentielles bien sur.
le do loop et bon si il est bien conditionné ou alors la boucle do while...wend.
A+
Edit :eek: Mj13 salut.
 

Hicsygrek

XLDnaute Occasionnel
Re : Retour en VBA

Bonjour MJ13 et fhoest

Voici en pièce jointe un fichier simplifié mais qui montre grossièrement ce qui se passe avec mon fichier (confidentiel) :eek:

Quand vous sélectionnez n'importe lequel des personnages, vous voyez apparaitre la machine qu'il maitrise, son poste sur celle-ci ainsi que le niveau reconnu (1 à 4).

Seul Oui-Oui ne maitrise aucun élément du tableau et quand on le sélectionne, la première listbox s'efface et laisse place à la deuxième ...
Si l'on sélectionne par exemple Babar, alors la première listbox refait son apparition.

Ma question est simplement de savoir s'il est possible de simplifier le code :)
 

Pièces jointes

  • ExempleRetour-VBA.xlsm
    18.9 KB · Affichages: 45

MJ13

XLDnaute Barbatruc
Re : Retour en VBA

Re

Bon, j'ai pas trop compris le problème :eek:, mais si cela fonctionne, il ne faut pas trop se poser de questions.

De plus ton code n'est quand même pas très long.

La seule question qu'il faut te poser, c'est est-ce que j'ai des risques bugs? Si tu n'en a pas, tu continues, sinon, il faut voir dans quel cas cela se produit :).
 

Discussions similaires

Réponses
4
Affichages
234

Statistiques des forums

Discussions
312 500
Messages
2 089 013
Membres
104 004
dernier inscrit
mista