Boucle dans une macro

Résolu/Fermé
dhaze Messages postés 109 Date d'inscription mardi 27 septembre 2011 Statut Membre Dernière intervention 6 février 2020 - 5 juin 2015 à 10:23
dhaze Messages postés 109 Date d'inscription mardi 27 septembre 2011 Statut Membre Dernière intervention 6 février 2020 - 5 juin 2015 à 13:49
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.
A voir également:

4 réponses

f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
5 juin 2015 à 10:49
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
dhaze Messages postés 109 Date d'inscription mardi 27 septembre 2011 Statut Membre Dernière intervention 6 février 2020
5 juin 2015 à 11:31
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
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
Modifié par f894009 le 5/06/2015 à 11:40
Re,

Ok, pour la subtilite, je rectifie
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
5 juin 2015 à 11:47
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
dhaze Messages postés 109 Date d'inscription mardi 27 septembre 2011 Statut Membre Dernière intervention 6 février 2020
5 juin 2015 à 13:49
Merci beaucoup, c'est parfait !

Bon WE
Lo.
0