Selectionner une boucle

Résolu
imis -  
 imis -
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

  1. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    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
    0
  2. imis
     
    bonjour Michel_m,

    Merci de ta réponce je vais essayer ça tout de suite....
    0
  3. imis
     
    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)
    0
    1. imis
       
      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
      0
  4. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    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...
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    Excuses, j'avais pas rafraichi...
    0
    1. imis
       
      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 ^^.
      0
  7. imis
     
    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
    0
  8. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    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)
    0
    1. imis
       
      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
      0
  9. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    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
    0
    1. imis
       
      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
      0
    2. imis
       
      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"?????
      0
    3. imis
       
      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.
      0