IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

[VBA-E] Une ScrollBar pour deux TextBox


Sujet :

Macros et VBA Excel

  1. #21
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    106
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 106
    Par défaut
    1) :

    Citation:
    puisque VBA gère le retour à la ligne en cas de débordement.


    Non ! relis ce que j'ai écrit : ne pas confondre retour à la ligne "réel" avec gestion d'affichage.
    Oui, oui, j'ai bien compris, un retour à la ligne réel est un Chr(13) ou un vbCrLf. Un retour à la ligne non "réel" se produit quand le nombre de caractères dépasse TextBox1.width.
    Donc, il y a bien un vbCrLf entre chaque ligne de TextBox2.

    Et pour TextBox1, je peux toujours modifier le code et écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    For i=1 to Len(TextBox1) Step 1
    If i Mod 48 = 0 then
    TextBox1=Textbox1 + vbCrLf
    Next
    Ca résout le problème non ?

  2. #22
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    pour ce qui est du nombre de ligne d'un contôle TextBox MsFOrms. (VBA..) .. je me suis apperçu ( hier ) ... qu'il existait tout simplement la propriété LineCount qui renvoi le nombre de ligne du dit textbox.. que ces lignes soient dues as des caractéres retours à la ligne ( Touche entrée..) ou des retours en fin de TextBox...! (nota: La propriété LineCount s'applique aussi au ComboBox et RefEdit)

  3. #23
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Par défaut
    Non, pas vraiment !... vraiment pas....
    La longueur d'un texte, genre laine(chaine), est un nombre cde caractères, pas une largeur d'affichage, y compris si la police est TrueType des 2 côtés...

    Si tu te moques maintenant de l'affichage et que ce que tu veux, c'est faire avancer simultanément des lignes séparées par un vrai vbcrlf, c'est possible (tu les verras avancer ensemble jusqu'au prochain vbcrlf réel de chacune, mais sans que celà ne corresponde forcément à un même avancement de ligne d'affichage, qui est autre chose, une fois de plus...)

    Tu choisis et tu dis, en voulant bien comprendre qu'il n'y a comme choix possibles que ce que je t'ai déjà fonné ou cette dernière proposition..
    ..

    A toi de choisir entre les deux .
    Si tu gardes la 1ère, tu l'as déjà
    si tu préfères la 2ème, je te la fais après la sieste.

    Il n'y en aura pas d'autre, sauf à "faire dans de l'à peu près" non souhaitable.

  4. #24
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Par défaut
    La propriété linecount n'existe pas sous VB, Bbil, et je ne sais ce qu'elle renvoie sous VBA.
    Mais si elle se contente de "renvoyer", elle ne servira pas ici, hélàs, car il ne faut pas faire un état des lieux mais déplacer un texte en fonction de la valeur d'une scrollbar !

  5. #25
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    106
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 106
    Par défaut
    Merci Bbil pour cette précision.
    J'essaie de voir ce que je peux tirer de la propriété LineCount mais je suis intéressé par la deuxième solution dont tu parles jmfmarques.
    Je verrais ce que ça donne pour l'affichage, mais l'essentiel est que les lignes des deux TextBox défilent en même temps.

    Merci

  6. #26
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Par défaut
    A ce soir, donc
    Bonne sieste à ceux qui vont la faire, comme moi

  7. #27
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    oui en plus de LineCount il y as CurLine qui permet d'afficher le numéro de ligne courante, mais aussi de le modifier si le contrôle à le focus...

    ?on doit pouvoir faire quelque-chose avec cela... en Mettant au ScrollBar en Max = au Lingecount le plus grand.. puis en effectuant un curLine=Scrollbar sur changement d'état...

  8. #28
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Par défaut
    Pas de curline non plus sous VB...

    A toi de jouer donc, Bbil...

    si ces 2 trucs là existent sous VBA, ce que tu as écrit est parfaitement et facilement réalisable.

    Je te lirai après ma sieste...

  9. #29
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Par défaut
    Ben...
    Vous n'avez rien fait avec linecount et curline ?

    Bon, je vais m'y mettre alors avec vbcrlf
    (encore ensommeillé, mais...)

    A tout de suite

  10. #30
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Par défaut
    Allez !
    Bâclé mais doit marcher :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    Private Sub Form_Initialize()
      comptecar Text1.Text, vbCrLf, nblignes1
      comptecar Text1.Text, vbCrLf, nblignes2
      If nblignes1 >= nblignes2 Then
        VScroll1.Max = nblignes1
      Else
        VScroll1.Max = nblignes2
      End If
    End Sub
     
    Private Sub VScroll1_Change()
      Text1.SelStart = 0
      pos1 = 0
      Text2.SelStart = 0
      pos2 = 0
      For i = pos1 To VScroll1.Value
        pos1 = pos1 + InStr(pos1 + 1, Text1.Text, vbCrLf)
      Next
      For i = 0 To VScroll1.Value
        pos2 = pos2 + InStr(pos2 + 1, Text1.Text, vbCrLf)
      Next
      Text1.SelStart = pos1
      Text2.SelStart = pos2
    End Sub
     
    Private Sub VScroll1_Scroll()
      VScroll1_Change
    End Sub
     
     
    Public Sub comptecar(chaine, car, nbcar)
      nbcar = 0: chaine1 = chaine: pos = InStr(chaine1, car)
      While pos > 0
        nbcar = nbcar + 1
        chaine1 = Mid(chaine1, pos + 1)
        pos = InStr(chaine1, car)
      Wend
    End Sub
    Qui essaye et me dit ?

    EDIT : je viens d'ajouter le Vscroll1.scroll (que j'avais oublié...)

  11. #31
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    106
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 106
    Par défaut
    Allez !
    Bâclé mais doit marcher :
    Ben ça marche pas pour moi

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pos1 = pos1 + InStr(pos1 + 1, Text1.Text, vbCrLf)
    J'avais pensé à ce code et je l'avais même écrit mais au fur et à mesure qu'on appuie sur les flèches, le nombre de lignes qui défilent augmente.

    Je ne réussis pas à trouver un bout de code qui repérerait le début de chaque ligne (càd trouver le vbCrLf et ajouter 2) et incrémenter (ou décrémenter) ce nombre quand on appuie sur les flèches.

    Quelqu'un peut me mettre sur la piste ?
    Merci

  12. #32
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Par défaut
    Je ne comprends pas Ender, car il n'y a en principe à ce niveau aucune différence entre VB et VBA... et ce code marche parfaitement sous VB

    Montre-moi alors la totalité de ton code, car je pense que tu as fait une erreur ici ou là... et souhaite voir !

  13. #33
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    tiens pour l'autre direction avec CurLigne et LigneCount...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
     
    '
    ' Init Maxi...
    '
    Private Sub UserForm_Initialize()
    Dim i1 As Integer
    Dim i2 As Integer
    TextBox2.SetFocus
    i2 = TextBox2.LineCount
    TextBox2.CurLine = 0
     
    TextBox1.SetFocus
    i1 = TextBox1.LineCount
    TextBox1.CurLine = 0
    If i1 > i2 Then
       ScrollBar1.Max = i1
    Else
       ScrollBar1.Max = i2
    End If
    ScrollBar1.Value = 0
    End Sub
     
    Private Sub ScrollBar1_Change()
     Dim NeWPos As Integer
     Dim MemoFoc
     NeWPos = ScrollBar1.Value - 1
     TextBox1.SetFocus
     If NeWPos < TextBox1.LineCount Then
       TextBox1.CurLine = NeWPos
     Else
       TextBox1.CurLine = TextBox1.LineCount - 1
     End If
     TextBox2.SetFocus
     If NeWPos < TextBox2.LineCount Then
      TextBox2.CurLine = NeWPos
     Else
      TextBox2.CurLine = TextBox2.LineCount - 1
     End If
     ScrollBar1.SetFocus
    End Sub

  14. #34
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    106
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 106
    Par défaut
    Salut,

    J'ai essayé le code de bbil et il fonctionne farpaitement. Merci beaucoup bbil et jmfmarques pour votre aide.
    Je n'aurais pas réussi une aussi bonne utilisation de curLine qui aide bien à résoudre le problème.

    Merci encore

    Ender

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. [XL-2003] Signer une macro pour deux développeurs
    Par soazig dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 19/05/2009, 11h26
  2. [Perl/Tk] scrollbar pour deux champs textes
    Par VinnieMc dans le forum Modules
    Réponses: 2
    Dernier message: 10/03/2007, 17h48
  3. Une session pour deux hébergement
    Par hugo69 dans le forum Langage
    Réponses: 5
    Dernier message: 11/12/2006, 17h53
  4. [VBA excel] une variable pour 2 classeurs
    Par totoche dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 05/01/2006, 10h42
  5. [FLASH MX] Une scrollbar pour plusieurs champs texte
    Par ffmlgraphics dans le forum Flash
    Réponses: 1
    Dernier message: 08/08/2005, 17h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo