Je coince...

Résolu
Bonjour,

Comment dois-je faire pour insérer à partir d'un combobox sur un userform, le numéro contenu dans ce combobox dans une colonne d'une feuille excel à son emplacement classé par ordre croissant (vous suivez ) ?

Le combobox reçoit sa listindex de la ("feuil1").
Je souhaiterai coller cette valeur dans la ("colonneA") de la ("feuil2") à son emplacement classé si celui-ci a été supprimé.

exemple :

combobox.listindex = 1 2 3 4 5 6 7 8 9 10 ,etc
("feuil2").("colonneA") = 1 2 3 7 8 10,...

Si je sélectionne le 4 dans la combo, est-il possible de remettre ce 4 dans la ("feuil2") entre le 3 et le 7 en sélectionnant le 7, puis en décalant la ligne avec "Selection.EntireRow.Insert" et en mettant la valeur dans la ligne vide ainsi créé ?
Je ne sais pas comment faire pour sélectionner la valeur supérieure à celle recherchée. Je sais le faire en collant dans la dernière cellule vide de la colonne puis en triant, mais je souhaiterai avancer un peu dans mon apprentissage.

J'espère être assez clair

Cordialement

2 réponses

  • Votes
  • Date
  • Date décroissante
  1. Bonjour,

    Merci pilas31 pour ta réponse, mais aussi tes explications qui permettent d'en apprendre un peu plus.
    Je vais mettre ça en application et si j'ai un souci je reviendrai...

    Merci à toi.
    1. Contributeur
      Bonjour,

      Deux syntaxes possibles :

      une boucle for :
      maxlig = Sheets("Feuil2").Range("A65535").End(xlUp).Row
      For lig = 1 To maxlig
          If CInt(ComboBox1.Value) < Cells(lig, 1) Then
              Sheets("Feuil2").Rows(lig).Insert Shift:=xlDown
              Sheets("Feuil2").Cells(lig, 1) = ComboBox1.Value
              Exit For
          End If
      Next lig
      


      Une boucle While plus simple :

      lig = 1
      While CInt(ComboBox1.Value) > Cells(lig, 1)
          lig = lig + 1
      Wend
      Sheets("Feuil2").Rows(lig).Insert Shift:=xlDown
      Sheets("Feuil2").Cells(lig, 1) = ComboBox1.Value
      


      Plusieurs remarques :
      Attention car ComboBox.Value renvoie un string et pour comparer avec un entier il faut convertir (d'ou le CInt).
      Penser aussi au traitement si le chiffre existe déjà
      Penser aussi au cas ou c'est le plus grand. Le while l'ajoute à la fin, le for ne fait rien...

      Voila à adapter

      A+