Boucle dans une macro

Résolu
Bonjour,

Je fais appel à vous, car je ne sais pas comment introduire dans la boucle le remplissage de mes cellules.
Avec en plus, une condition s'il y a 4 ou 5 lignes...

Je traite ce type de données :
A*Z_000000_V0_0
A*Z_000000_V0_0_A
A*Z_000000_V0_0_B
A*Z_000000_(A*Z)_V0_0
A*Z_000000_(A*Z)_V0_0_R
A*Z_000000_(A*Z)_V0_0_V

Mais tout cela fonctionne comme je le souhaite dans le début de la macro.
Peut-être est-il possible de simplifier le post séquençage, mais c'est secondaire.

C'est la fin où je cale...

Sub Séquençage_Cellule_F2()

    Dim Cellule_de_Départ As String
    Dim Post_Séquençage As String
    Dim Valeur_à_Séquencer As String
    Dim Séquence() As String

        Cellule_de_Départ = Cells(2, 6).Value

        Post_Séquençage = Replace(Cellule_de_Départ, "_V", "_")
        Post_Séquençage = Replace(Post_Séquençage, "_R", "_")
        Post_Séquençage = Replace(Post_Séquençage, "_A", "_")
        Post_Séquençage = Replace(Post_Séquençage, "_B", "_")
        Post_Séquençage = Replace(Post_Séquençage, "_", " ")
        Post_Séquençage = Replace(Post_Séquençage, "(", "")
        Post_Séquençage = Replace(Post_Séquençage, ")", "")
        Post_Séquençage = Trim(Post_Séquençage)

        Valeur_à_Séquencer = Post_Séquençage
        Séquence() = Split(Valeur_à_Séquencer)

    For i = LBound(Séquence) To UBound(Séquence)
      Liste = Liste & vbNewLine & "Séquence " & i & " = " & Séquence(i)
    Next i

MsgBox Liste

' Si liste = 4 lignes

    Cells(2, 1) = Liste 'Séquence 0
    Cells(2, 2) = Liste 'Séquence 1
    Cells(2, 3) = Liste 'Séquence 2
    Cells(2, 4) = Liste 'Séquence 3

' Si liste = 5 lignes

    Cells(2, 1) = Liste 'Séquence 0
    Cells(2, 2) = Liste 'Séquence 1
    Cells(2, 3) = Liste 'Séquence 3
    Cells(2, 4) = Liste 'Séquence 4
    Cells(2, 5) = Liste 'Séquence 2

End Sub


Lo.

4 réponses

  1. Merci beaucoup, c'est parfait !

    Bon WE
    Lo.
    0
    1. Re,

      Sub Séquençage_Cellule_F2()
          Dim Cellule_de_Départ As String
          Dim Post_Séquençage As String
          Dim Valeur_à_Séquencer As String
          Dim Séquence() As String
      
              Cellule_de_Départ = Worksheets("feuil1").Cells(2, 6).Value
              Post_Séquençage = Replace(Cellule_de_Départ, "_V", " ")
              Post_Séquençage = Replace(Post_Séquençage, "_R", " ")
              Post_Séquençage = Replace(Post_Séquençage, "_A", " ")
              Post_Séquençage = Replace(Post_Séquençage, "_B", " ")
              Post_Séquençage = Replace(Post_Séquençage, "_", " ")
              Post_Séquençage = Replace(Post_Séquençage, "(", "")
              Post_Séquençage = Replace(Post_Séquençage, ")", "")
              Post_Séquençage = Trim(Post_Séquençage)
      
              Valeur_à_Séquencer = Post_Séquençage
              Séquence() = Split(Valeur_à_Séquencer)
      
          For i = LBound(Séquence) To UBound(Séquence)
            Liste = Liste & vbNewLine & "Séquence " & i & " = " & Séquence(i)
          Next i
      
      MsgBox Liste
      
          ' Affichage sequence
          With Worksheets("feuil1")
              .Cells(2, 1).Resize(, 5).ClearContents
              If UBound(Séquence, 1) < 4 Then
                  .Cells(2, 1).Resize(, UBound(Séquence, 1) + 1) = Séquence
              Else
                  .Cells(2, 1) = Séquence(0) 'Séquence 0
                  .Cells(2, 2) = Séquence(1) 'Séquence 1
                  .Cells(2, 3) = Séquence(3) 'Séquence 3
                  .Cells(2, 4) = Séquence(4) 'Séquence 4
                  .Cells(2, 5) = Séquence(2) 'Séquence 2 <------ !!!
              End If
          End With
      End Sub
      0
      1. Merci f894009,

        Effectivement, quelle simplicité !
        Pour 4 lignes, c'est parfait.

        Malheureusement pour les cas ou il y a 5 lignes,
        petite subtilité, la troisième valeur passe en dernière :-(

        ' Si liste = 5 lignes
        
            Cells(2, 1) = Liste 'Séquence 0
            Cells(2, 2) = Liste 'Séquence 1
            Cells(2, 3) = Liste 'Séquence 3
            Cells(2, 4) = Liste 'Séquence 4
            Cells(2, 5) = Liste 'Séquence 2 <------ !!!

        Lo.
        0
        1. Re,

          Ok, pour la subtilite, je rectifie
          0
      2. Bonjour,

        pas besoin de boucle:

        Sub Séquençage_Cellule_F2()
            Dim Cellule_de_Départ As String
            Dim Post_Séquençage As String
            Dim Valeur_à_Séquencer As String
            Dim Séquence() As String
        
                Cellule_de_Départ = Worksheets("feuil1").Cells(2, 6).Value
                Post_Séquençage = Replace(Cellule_de_Départ, "_V", " ")
                Post_Séquençage = Replace(Post_Séquençage, "_R", " ")
                Post_Séquençage = Replace(Post_Séquençage, "_A", " ")
                Post_Séquençage = Replace(Post_Séquençage, "_B", " ")
                Post_Séquençage = Replace(Post_Séquençage, "_", " ")
                Post_Séquençage = Replace(Post_Séquençage, "(", "")
                Post_Séquençage = Replace(Post_Séquençage, ")", "")
                Post_Séquençage = Trim(Post_Séquençage)
        
                Valeur_à_Séquencer = Post_Séquençage
                Séquence() = Split(Valeur_à_Séquencer)
        
            For i = LBound(Séquence) To UBound(Séquence)
              Liste = Liste & vbNewLine & "Séquence " & i & " = " & Séquence(i)
            Next i
        
        MsgBox Liste
        
            ' Affichage sequence
            Worksheets("feuil1").Cells(2, 1).Resize(, UBound(Séquence, 1) + 1) = Séquence
        
        End Sub
        0