Selectionner une boucle

Résolu
Bonjour à vous tous,

Je suis débutant sur VBA et j'ai un petit souci de code. Voilà j’ai créé des listeBox , ComboBox,TextBox sur un UserForm pour saisir des données, ces données sont ensuite rangées dans un tableau sur une feuille Excel via un bouton de commande (bouton9). Mes lignes de code sont les suivantes :

Private Sub CommandButton9_Click()
Sheets("Feuil2").Cells(6, 1) = TextBox2
Sheets("Feuil2").Cells(6, 5) = ComboBox1
etc.(y'en a 16^^)

Donc pas de problème les informations s’inscrivent bien dans ces cellules, mais ce que je souhaite maintenant c’est quand un utilisateur lambda vient ressaisir et réactiver le bouton 9 ses données se réinscrivent sans effacer les précédentes. A force de recherche j’ai trouvé une boucle qui est la suivante:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Range ("A6").Select
Do While IsEmpty(ActiveCell)= False
Selection.Offset(1,0)Select
Loop

Je l'ai mise sur la feuille en question et effectivement elle marche, mais seulement si j’écris directement sur la feuille du classeur elle même et non automatiquement après avoir cliqué sur le bouton 9.
Là ou je veux en venir (et il est temps^^), quel code me permettrait de relier les deux (bouton9-boucle) ou même à la rigueur désigner la cellule active (au lieu de .Cells(6,1) ) pour toutes mes lignes.

MERCI D'AVANCE
Configuration: Windows XP
Internet Explorer 6.0

8 réponses

  • Votes
  • Date
  • Date décroissante
  1. Contributeur
    bonjour,

    pour trouver la dernière ligne utilisée d'une colonne +1 (+1:donc, la vide)

    dim lig as long

    lig=range("A65536").end(xlup).row +1
    Sheets("Feuil2").Cells(lig, 1) = TextBox2
    1. bonjour Michel_m,

      Merci de ta réponce je vais essayer ça tout de suite....
      1. Bonjour,

        Bah me revoilà, j'ai effectué la dermache suivante:

        Private Sub CommandButton9_Click()

        dim lig as long
        lig = Range("A65536").End(xlUp).Row + 1
        Sheets("Feuil2").Cells(lig, 1) = TextBox2
        Sheets("Feuil2").Cells(lig, 2) = TextBox1
        Sheets("Feuil2").Cells(lig, 3) = TextBox3
        Sheets("Feuil2").Cells(lig, 4) = TextBox4
        Sheets("Feuil2").Cells(lig, 5) = ComboBox1
        Sheets("Feuil2").Cells(lig, 6) = ComboBox2
        Sheets("Feuil2").Cells(lig, 7) = ComboBox3
        Sheets("Feuil2").Cells(lig, 8) = ComboBox4
        Sheets("Feuil2").Cells(lig, 9) = TextBox5
        Sheets("Feuil2").Cells(lig, 10) = TextBox6
        Sheets("Feuil2").Cells(lig, 11) = TextBox7
        Sheets("Feuil2").Cells(lig, 12) = TextBox8
        Sheets("Feuil2").Cells(lig, 13).NumberFormat = TextBox9
        Sheets("Feuil2").Cells(lig, 13).NumberFormat = "# ###0,00€"
        Sheets("Feuil2").Cells(lig, 14) = TextBox10
        Sheets("Feuil2").Cells(lig, 15) = TextBox11
        Sheets("Feuil2").Cells(lig, 16) = ComboBox7
        Sheets("Feuil2").Cells(lig, 18) = ComboBox6

        End Sub

        et maintenant rien ne s'inscrit dans mon tableau :( , je suis vraiment débutant donc dsl d'être aussi nul j'essaye d'assimiler les codes ^^ mais j'ai du mal (la preuve)
        1. Bonjour,

          Autant pour moi, oh la boulette, oui le code fonctionne parfaitement, sauf qu'il me rempli les cases intitulé de mon tableau ^^, je n'ai plus qua définir la cellule à partir de laquelle il doit remplir ^^.

          Merci michel_m
      2. Contributeur
        Curieux, je viens de vérifier
        XL<2007
        lig = Range("A65536").End(xlUp).Row + 1
        fonctionne

        sélectionne lig et demande un espion (débogage-ajouter un espion)
        la m^chose pour textbox2

        mets un point d'arret au niveau de lig (clique dans le bandeau vertical à gauche)

        lance ton usf mets des valeurs et appuie sur ton bouton

        la macro s'arr^te sur sur ... la ligne du point d'arrêt
        continue en pas à pas (F8)
        et regarde la valeur de lig puis de textbox2

        autre chose pour allèger ton code:

        With Sheets("Feuil2")
        .Cells(lig, 1) = TextBox2
        .Cells(lig, 2) = TextBox1
        ....
        End With

        tu me tiens au courant...
        1. Contributeur
          Excuses, j'avais pas rafraichi...
          1. Pas d'excuses celui qui ne réfléchi pas ici c'est moi ^^, bon alors non seulement en plus d'être un boulet je pollue le forum car je n'avais pas fait attention mais vous m'avez répondu ^^. Donc DSL.
            Alors votre code marche absolument, le seul problème c'est qu'il m'inscrit mes données dans l'intitulé de mon tableu et non dans les case adéquates. Pour faire simple la première ligne à remplie comme à la cellule A6 les précédentes étant reservées aux intitulés.
            J'ai effectué la dermarche avec les espions et tout concorde pour les lignes. SAUF le fait qu'il commence à la ligne A2 au lieu de A6.

            Merci pour le conseil de racourcir mon code c'est bien plus clair ^^.
        2. Bonjour,

          J’ai crié trop hâtivement victoire car ce code en veux qu’à mes intitulés ^^ , et ça malgré toutes mes tentatives. Mon tableau commence à la cellule A6 et pourtant il me rempli dès la cellule A2 à savoir en plein titre de mon tableau.
          Je vous saurais gré de bien vouloir m’aider car je suis vraiment perdu et le pire c’est que je sais que le code de michel_m marche puisqu’il est posté sur plusieurs codes dans le forum et de surcroit marche sur mon tableau.

          Ma question est donc la suivante:
          -comment lui (code) dire de commencer à la cellule A6 et ensuite qu’il enchaîne sur le code de michel_m afin qu'il puisse remplir à chaque fois les champs vides.

          Merci d’avance
          1. Contributeur
            lig = Range("A65536").End(xlUp).Row

            if lig<6 then
            lig=6
            else
            lig=lig+1
            end if

            en saisissant un espace ou un point ou... en A5, tu pourrais garder
            lig = Range("A65536").End(xlUp).Row + 1
            sans le test

            a toi de voir ( le test est + prudent car à l'abri d'une saisie malencontreuse en A6)
            1. Bon alors là chouette les informations sont bien inscrites dans les bonnes cases, mais le point négatif malgré toute cette précieuse aide, c'est que je retourne à mon 1er problème à savoir qu'il m'efface la ligne qui vient juste d'être écrite si je réitère l'opération. voilà mon code pour voir où ça coince et vraiment merci:

              Private Sub CommandButton9_Click()

              Dim lig As Long
              lig = Range("A65536").End(xlUp).Row
              If lig < 6 Then
              lig = 6
              Else
              lig = lig + 1
              End If
              With Sheets("Feuil2")
              .Cells(lig, 1) = TextBox2
              .Cells(lig, 2) = TextBox1
              .Cells(lig, 3) = TextBox3
              .Cells(lig, 4) = TextBox4
              .Cells(lig, 5) = ComboBox1
              .Cells(lig, 6) = ComboBox2
              .Cells(lig, 7) = ComboBox3
              .Cells(lig, 8) = ComboBox4
              .Cells(lig, 9) = TextBox5
              .Cells(lig, 10) = TextBox6
              .Cells(lig, 11) = TextBox7
              .Cells(lig, 12) = TextBox8
              .Cells(lig, 13).NumberFormat = TextBox9
              .Cells(lig, 13).NumberFormat = "# ###0,00€"
              .Cells(lig, 14) = TextBox10
              .Cells(lig, 15) = TextBox11
              .Cells(lig, 16) = ComboBox7
              .Cells(lig, 18) = ComboBox6
              End With

              Unload UserForm2
              Unload UserForm3
              Unload UserForm1

              End Sub
          2. Contributeur
            je viens d'essayer cette macro test et ca marche

            Sub fff()
            Dim lig As Long
            lig = Range("A65536").End(xlUp).Row
            If lig < 6 Then
            lig = 6
            Else
            lig = lig + 1
            End If
            With Sheets(1)
            .Cells(lig, 1) = "toto"
            End With
            End Sub
            1. Roohh c'est dingue bah chez moi pas d'amélioration il m'efface toujours la ligne précedente mais la je réfléchis à partir de la ligne 5 :

              1)Private Sub CommandButton9_Click()
              2)Dim lig As Long
              3)lig = Range("A65536").End(xlUp).Row
              4)If lig < 6 Then
              5)lig = 6
              6)Else
              7)lig = lig + 1
              8)End If

              SI j'ai bien compris le principe si lors de sa boucle il trouve une case vide plus petite que A6 il se met automatiquement à la ligne 6. ensuite il met la valeurs dans lig+1.
              Je supose quelque chose: pour lui il le mettra tjrs à lig6+1 soit la ligne 7 donc il le mettra tjrs sur la même ligne (dis moi si mon raisonnement n'a aucun sens) d'où l'effacement perpetuelle.

              donc je suis en train de travailler sur le code et je te tiens au courant
            2. ah bah y'a encore plus dingue, ton code fonctionne à merveille comme tu me l'as dis et j'ai pu le vérifier en refaisant un nouveau fichier excel, et de surcroit il répond exactement à ce que je souhaite.

              Ma question est ALORS pourquoi dans mon "logiciel il ne fonctionne PAS"?????
            3. j'ai identifier mon problème, au départ je croyais que dès que je rajoutais un chiffre le code ne marchais pas. Le problème est que tant que l'on utilise des TextBox y'a pas de problème mais dès que l'on utilise un Combobox les données sont obligatoirement placées sur la première ligne.

              Je sais identifier le problème mais pas le régler ^^ donc je demande de l'aide SVP mais là ça deviens un autre problème alors je vais peut être me permettre de lancer un autre question.

              Merçi pour ton aide précieuse michel_m elle m'a aidée et une fois que j'aurais résolu ma dernière question grâce à toi j'aurai terminé mon programme.