Faire défiler les cellules dans un textbox

tittle -  
 tittle -
Bonjour,

j'ai commencé les révisions en vue d'un DS sur excel-vba et je suis bloqué sur un exercice.

Sur un fichier excel sont données ligne par ligne les informations sur les ventes d'un employé. Grace a un userform il faut que les différentes cellules liés a cette personne (civilité, nomprénom, région, chiffre d'affaire) apparaissent dans des textbox et en appuyant sur le bouton de commande "suivant" je puisse voir les informations de l'employé sur la ligne suivante.

Je vous montre ce que j'ai commencé a faire:

Private Sub btsuivant_Click()

i = 2
Sheets("ventes").Cells(i, 2) = Fenetre.TextBox2
i = i + 1
Fenetre.TextBox2 = Sheets("ventes").Cells(i, 2)

End Sub

Pourtant quand je clique sur le bouton suivant la premiere cellule apparait mais je ne peux pas passer a la suivante.

Je vous remercie d'avance pour l'aide que vous voudrez bien m'apporter.
Configuration: Windows Vista
Internet Explorer 7.0

3 réponses

  1. Polux31 Messages postés 7219 Statut Membre 1 204
     
    Bonjour,

    Déclare i en variable globale dans ton module. Au chargement de la UserForm initialise i à la première ligne de données, dans ton exemple i = 2.

    Ensuite:
    Private Sub btsuivant_Click() 
    If i = 2 Then
      MsgBox "Premier élément de la liste"
      Exit Sub
    Else
      Call AfficheZones
      i = i + 1
    End If
    End Sub
    
    Private Sub AfficheZones()
    Fenetre.TextBox2 = Sheets("ventes").Cells(i, 2)
    Fenetre.TextBox3 = Sheets("ventes").Cells(i, 3)
    ... etc
    End Sub

    Utilise le même principe pour le bouton btprécédent en testant que la ligne contient bien des données avant de l'afficher.

    ;o)

    polux
    0
    1. tittle
       
      merci Polux pour votre aide,

      malheureusement le programme ne fonctionne pas encore.
      voila tel que je l'ai rentré dans son intégralité (en prenant ce que vous m'avez donné). Avez vous une idée de ce qui cloche?

      Private Sub Fenetre_Initialize()
      i = 2
      Call AffichesZones
      End Sub


      Private Sub btsuivant_Click()
      If i = 2 Then
      MsgBox "Premier élément de la liste"
      Exit Sub
      Else
      Call AfficheZones
      i = i + 1
      End If
      End Sub

      Private Sub AfficheZones()
      Fenetre.TextBox2 = Sheets("ventes").Cells(i, 2)
      End Sub
      0
  2. Polux31 Messages postés 7219 Statut Membre 1 204
     
    Ce n'est pas dans fenêtre_Initialize mais dans Sub UserForm_Initialize(), de plus la procédure d'affichage c'est AfficheZones et non AffichesZones.

    Il faut déclarer en début de module : Private i As Long. Ce qui donne un module comme ça
    Option Explicit
    
    Private i As Long
    
    Private Sub UserForm_Initialize() 
       i = 2 
       Call AfficheZones 
    End Sub 
    
    
    Private Sub btsuivant_Click() 
       If i = 2 Then 
          MsgBox "Premier élément de la liste" 
          Exit Sub 
       Else 
          Call AfficheZones 
          i = i + 1 
       End If 
    End Sub 
    
    Private Sub AfficheZones() 
       Fenetre.TextBox2 = Sheets("ventes").Cells(i, 2) 
    End Sub


    ;o)

    polux
    0
  3. tittle
     
    oui cette fois-ci c'est bon
    merci beaucoup!
    0