Lister dans une fenêtre

  • Initiateur de la discussion Initiateur de la discussion apt
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

apt

XLDnaute Impliqué
Bonjour à tous,

J'ai des données dans trois feuilles.

Quand ma saisie dans la colonne A de Fueil1 se termine par un double tiret "--", je devrais avoir une liste selon un mot dans une fenêtre ramenée depuis Feuil2

Quand ma saisie se termine par un "-+", la liste dans la fenêtre sera alimentée depuis Feuil3.

Je sais que ce n'est pas très explicite, mais de cette discussion à commencer ici

Mon dernier fichier que j'ai élaboré, en pièce jointe.

Voulant organiser mon travail, j'ai tout englober dans une procedure affichagefen() et puis la faire appelée depuis le WorsheetChange.

Mais il y'a encore des erreurs et peut être des lignes inutiles !

Merci à vous tous.
 

Pièces jointes

Re : Lister dans une fenêtre

Bonjour skoobi,

Dans mon exemple, je saisi dans la colonne A, du texte sous forme de :

xx-zz-yy

ou yy est toujours représenté par un nombre qui s'incremente selon le changement des valeurs numérique en colonne C de chaque yy

Par exemple :

Si dans la colonne C on a 50, dans la colonne A je saisirais :

Bi-Bio-1

S'il y'a une autre valeur que 50, pour la même chaîne Bio, j'écris dans A :

Bi-Bio-2

Dans Feuil2, il y'a une récapitulation de ce qui est saisie pour une même chaîne ("Bio" ici).

Bi-Bio-1 ---> Bio ---> 50
Bi-Bio-2 ---> Bio ---> 48
...

Parfois, en bas de la page, avant de saisir mon texte, j'aimerais savoir si la valeur 52 par exemple (Colonne C) existe déjà pour la chaîne Bio.

Alors en saisissant deux fois de suite le tiret (--) comme ça à la fin de mon texte :

Bi-Bio--

Une fenêtre (comme celle des commentaires) viendra s'ouvrir pour me lister toutes les lignes déjà récapitulées dans la feuil2 pour la chaîne Bio.

De la même façon, une fois dans la colonne une saisie est terminée par ces deux caractéres "-+", une fenêtre s'ouvrira pour afficher une liste alimentée cette fois depuis Feuil3.

La grande partie de ce travail est réalisé, seulement j'ai un problème de detection des SHAPES qui restent parfois supperposées (ceux qui sont deja crées n'ont pas été pas supprimées) et quelques bugs dans le code à corriger ainsi peut-être quelques lignes inutiles à s'en passer.

Voila, j'espere que j'ai bien exposé le problème.

Merci à tous.
 
Re : Lister dans une fenêtre

Re,

j'ai un problème de detection des SHAPES qui restent parfois supperposées (ceux qui sont deja crées n'ont pas été pas supprimées) et quelques bugs dans le code à corriger

1- ajoute "Activesheet." devant chaque "Shapes".

2- en vert à ajouter en rouge à enlever:

Code:
        'ajoute la liste depuis Fauil2 et l'adapte au texte
        Set Fenetre = ActiveSheet.Shapes.AddShape(msoShapeRoundedRectangle, Gauche, Haut, 1, 1)
[B][COLOR="Green"]Fenetre.Name = "Commentaire"[/COLOR][/B]
        With Fenetre
 [B][COLOR="Red"]           .Name = "Commentaire"[/COLOR][/B]

Voilà.
 
Re : Lister dans une fenêtre

Bonsoir skoobi,

Pour le Activesheet ça marche. Merci

Pour ce qui est en rouge, il est utile pour les lignes qui suivent :

Code:
With Fenetre
            .Name = "Commentaire"

            With .TextFrame
                If Len(Texte) > 0 Then
                    .Characters.Text = Left(Texte, Len(Texte) - 1)
                Else: .Characters.Text = "Mot introuvable"
                End If
                .AutoSize = True
            End With

            .Visible = True
            .Fill.Visible = msoTrue
            .Fill.ForeColor.SchemeColor = 65
            .Fill.BackColor.SchemeColor = 13
            .Fill.TwoColorGradient msoGradientHorizontal, 2
        End With

Je crois, a ma connaissance, qu’il n’y a pas de problème de laisser la ligne "rouge" a ça place.

Par contre le problème de superposition des fenêtres et encore présent.

1 – en A9, je teste avec :


La fenêtre affiche :
Mot introuvable

2 – toujours en A9, j'écris :

La fenêtre "Mot introuvable" n'est pas supprimée

3 – en A10, je saisi :

Une fenêtre s'ouvre me listant depuis Feuil2 les occurrences trouvées. Mais sans supprimer la fenêtre déjà ouverte auparavant !

A l’écran, j’ai deux fenêtres affichées en superposition l'une sur l'autre !

Comment régler ce problème?

Merci.
 
Re : Lister dans une fenêtre

Re,

et bien tu supprimes systématiquement le commentaire existant avant la création du nouveau non?

en rouge à supprimer, en vert à ajouter:

Code:
Public Sub affichagefen(ByVal Target As Range)
    Dim sht2, sht3 As Worksheet
    Dim Fenetre, shp As Shape
    Dim Haut As Single
    Dim Gauche As Single
    Dim Texte, ch, Motrech, ActiveFen As String
    Dim Cel As Range
    Dim Lst1, Lst2 As String
[B][COLOR="Green"]On Error Resume Next
ActiveSheet.Shapes(1).Delete
On Error GoTo 0[/COLOR][/B]
    Set sht2 = Sheets("feuil2")
    Set sht3 = Sheets("feuil3")
    Texte = ""
    Motrech = ""
    If Target.Column = 1 And Target.Count = 1 Then
[B][COLOR="Red"]        For Each shp In ActiveSheet.Shapes
            If Not Intersect(shp.TopLeftCell, Target.Offset(, 1)) Is Nothing Then
                MsgBox "Nom Cadre / Target : " & shp.Name
                MsgBox "Suppr. ? " & shp.Name
                shp.Delete
            End If
        Next
        '----------------------
        If Right(Target.Value, 2) <> "--" And Right(Target.Value, 2) <> "-+" Then

            'supprime la fenetre si le texte dans la cellule
            'active ne se termine pas par "--" ou "-+"
            On Error Resume Next
            Set Fenetre = ActiveSheet.Shapes("Commentaire")
            If Err.Number = 0 Then Fenetre.Delete
            On Error GoTo 0
        End If[/COLOR][/B]
 
Re : Lister dans une fenêtre

Bonjour skoobi,

Je crois aussi que la fenêtre est générée quelque soit le texte saisi dans la colonne A, par cette ligne, après le test des deux sous chaînes "--" et "-+" du la saisie :

Code:
Set Fenetre = ActiveSheet.Shapes.AddShape(msoShapeRoundedRectangle, Gauche, Haut, 1, 1)

Alors comment dire à Excel de ne créer une fenêtre que si la fin du texte saisi dans Colonne A est soit "--" ou "-+" et faire supprimer cette dernière si elle existe ?

J'ai pensé à intégrer ces lignes dans une procédure et l'appelée dans nos deux seuls cas de besoin, mais je n'ai pas réussi.

Merci.
 
Re : Lister dans une fenêtre

re,

Voila la procédure :

Code:
Public Sub listefenetre(ByVal Taregt As Range, Fenetre As Object, Texte As String)
    With Target
        Haut = .Top + 4
        Gauche = .Left + .Width + 6
    End With

    'ajoute la liste depuis Fauil2 et l'adapte au texte
    Set Fenetre = ActiveSheet.Shapes.AddShape(msoShapeRoundedRectangle, Gauche, Haut, 1, 1)

    With Fenetre
        .Name = "Commentaire"

        With .TextFrame
            If Len(Texte) > 0 Then
                .Characters.text = Left(Texte, Len(Texte) - 1)
            Else: .Characters.text = "Mot introuvable"
            End If
            .AutoSize = True
        End With

        .Visible = True
        .Fill.Visible = msoTrue
        .Fill.ForeColor.SchemeColor = 65
        .Fill.BackColor.SchemeColor = 13
        .Fill.TwoColorGradient msoGradientHorizontal, 2
    End With
    Set Fenetre = Nothing
End Sub

Et son appel dans les Select/Case :

Code:
Call listefenetre(Target, Fenetre, Texte)

Mais ce me donne une erreur sur Fenetre :

Type d'argument Byref incompatible

Voilà !
 
Re : Lister dans une fenêtre

bonjour,

petite erreur de frappe ici
Code:
Public Sub listefenetre(ByVal [COLOR=Red]Taregt [/COLOR]As Range, Fenetre As Object, Texte As String)
cordialement

EDIT bonjour ChTi160 je n'ai pas fait attention à ta réponseb🙄
 
Re : Lister dans une fenêtre

bonjour,

premièrement , il faudrait mettre un peu d'ordre dans tes variables

Code:
   Dim Texte,ch, Motrech, ActiveFen As String
Avec ce code, tu initialises ActiveFen en String et les autres variables en Variant.

en second, lorsque tu appelles ta procédure
Code:
Call listefenetre(Target, Fenetre, Texte)
seul Target est défini, il faut que tu places par exemple avant l'appel
Code:
Set Fenetre = UnObjetQuelconque

Texte = "blabla"
'Call listefenetre(Target, Fenetre, Texte)
listefenetre(Target, Fenetre, Texte)
edit Pour une compatibilité avec Excel 2007, remplace
Code:
 'For Each Cel In sht2.Range("B2", sht2.Range([COLOR=Red][B]"[/B][B]B65536[/B][/COLOR]").End(xlUp))
par
Code:
  For Each Cel In sht2.Range("B2", sht2.Range([B][COLOR=Red]"B" & Application.Rows.Count[/COLOR][/B]).End(xlUp))
@+
 
Dernière édition:
Re : Lister dans une fenêtre

re apt
pourrais tu ,m'expliquer le but et la démarche moi je suis dur de la comprenette

tu veux taper en colonne A de la feuille Feuil1
Bi-- ou Bi-+ (mets moi les autres posibilités)
et tu veux via la fonction RechercheMot récupérer la syllabe Bi pour ensuite faire une recherche dans la feuille Feuil2 colonne B afin de voir si on trouve cette syllabe
c'est ça ???
j'ai modifié mais sans savoir si j'ai compris la Function RechercheMot ainsi
Code:
Public Function RechercheMot(ByVal Target As Range) As String
    Dim Str As String
       G = Split(Target, "-")
    For a = 0 To UBound(G)
     If G(a) <> "" Then
          Str = Str & G(a)
     End If
    Next
     RechercheMot = Str
End Function
dans l'attente (pour ce soir ce sera tout LOL, car moi je vais attendre le père Noël de Pieds fermes)
Bonne fin de Journée
Bonnes Fêtes de fin D'Année
 
Dernière édition:
Re : Lister dans une fenêtre

Salut,

fred65200 à dit:
premièrement , il faudrait mettre un peu d'ordre dans tes variables

J'ai redeclaré chaque variable avec son type.

en second, lorsque tu appelles ta procédure
Code:
Call listefenetre(Target, Fenetre, Texte)
seul Target est défini, il faut que tu places par exemple avant l'appel
Code:
Set Fenetre = UnObjetQuelconque
Texte = "blabla"
'Call listefenetre(Target, Fenetre, Texte)
listefenetre(Target, Fenetre, Texte)

J'ai ajouté :

Code:
On Error Resume Next
    Set Fenetre = ActiveSheet.Shapes("Commentaire")
    If Err.Number = 0 Then Fenetre.Delete
    On Error GoTo 0

Pour la variable Texte elle est déja définie par un blanc "".

La procédure doit être appelée par Call sinon il y'a une erreur !
 
Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

D
Réponses
8
Affichages
2 K
J
Réponses
7
Affichages
1 K
MickaëlLEVIONNOIS
M
Retour