Vba incrémentation

Résolu
dolcevita01 -  
dolcevita01 Messages postés 4 Statut Membre -
Bonjour,

j'aimerais améliorer une macro en incrémentant les cellules concernant la concaténation de variables.
Voilà mon code :

Texte = ""

For Each Cellule In Range(Selection, Selection.Offset(0, 110))

If Cellule.Value <> "" Then
Texte = Texte & " " & Cellule.Value & ","
End If

Next Cellule

Cells(ActiveCell.Row, 121).Formula = Texte
'Passe à la ligne suivante
Selection.Offset(1, 0).Select

J'ai tout essayé, du Do en passant par for, rien n'y fait.
Pouvez-vous m'aider svp

3 réponses

  1. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    Bonjour
    Excusez l'incruste

    Vu le nombre de cellule à traiter (110x 140 =15400), il est préférable de travailler en mémoire RAM avec des variables- tableaux et non sur la feuille pour effectuer les traitements (gain de temps considérable)

    proposition de macro
    Sub ecrire_texte()   
    Dim Lig As Integer, Col As Integer, Derlig As Integer   
    Dim T_in(), C_lig As Byte, C_col As Byte, T_out() 
    Dim Texte As String   
    
    'initialisations   
    Application.ScreenUpdating = False   
    Lig = ActiveCell.Row   
    Col = ActiveCell.Column   
    Derlig = Columns(Col).Find("*", , , , , xlPrevious).Row   
    T_in = Range(Cells(Lig, Col), Cells(Derlig, Col + 109)).Value   
    ReDim T_out(1 To Derlig - Lig + 1)   
    
    'traitement du texte en RAM   
    For C_lig = 1 To UBound(T_in)   
         Texte = ""   
         For C_col = 1 To 110   
              If T_in(C_lig, C_col) <> "" Then Texte = Texte & " " & T_in(C_lig, C_col) & ","   
         Next   
         ' données traitées   
         T_out(C_lig) = Texte   
    Next   
    
    'restitution   
    Cells(Lig, Col + 121).Resize(UBound(T_out), 1) = Application.Transpose(T_out)   
    End Sub   
    

    Michel
    1
    1. dolcevita01 Messages postés 4 Statut Membre
       
      Merci beaucoup Michel!!! le code est nikel, c'est exactement ce dont j'avais besoin =) You're a Geniuuus =)
      0
  2. Christof422 Messages postés 990 Statut Membre 213
     
    Est ce que tu as déclarer les variables texte, cellule...
    0
    1. dolcevita01
       
      oui bien évidemment :

      Dim cellule As Range, Texte As String
      Dim i As Integer, J As Integer
      Dim observ As Double
      0
    2. Christof422 Messages postés 990 Statut Membre 213
       
      Ou se trouve exactement le problème?
      0
    3. dolcevita01
       
      mon problème se situe au niveau de l'incrémentation, cad que la macro ci dessus ne permet pas de prendre en compte toutes les lignes et ne fonctionne que ligne par ligne. Ce qui est assez long lorsque j'ai 140 lignes. Voilà pourquoi je cherche à la modifier pour pouvoir exécuter qu'une seule fois la macro.
      0
  3. Christof422 Messages postés 990 Statut Membre 213
     
    Dim texte As String
    Dim a As Integer
    
    For a = 1 To 120
    If Cells(1, a) <> "" Then
    texte = texte & Cells(1, a).Value
    End If
    Next a
    
    Cells(2, 1) = texte
    0