Vba incrémentation

Résolu
dolcevita01 -  
dolcevita01 Messages postés 4 Date d'inscription   Statut Membre Dernière intervention   -
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

michel_m Messages postés 16602 Date d'inscription   Statut Contributeur Dernière intervention   3 314
 
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
dolcevita01 Messages postés 4 Date d'inscription   Statut Membre Dernière intervention  
 
Merci beaucoup Michel!!! le code est nikel, c'est exactement ce dont j'avais besoin =) You're a Geniuuus =)
0
Christof422 Messages postés 871 Date d'inscription   Statut Membre Dernière intervention   212
 
Est ce que tu as déclarer les variables texte, cellule...
0
dolcevita01
 
oui bien évidemment :

Dim cellule As Range, Texte As String
Dim i As Integer, J As Integer
Dim observ As Double
0
Christof422 Messages postés 871 Date d'inscription   Statut Membre Dernière intervention   212
 
Ou se trouve exactement le problème?
0
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
Christof422 Messages postés 871 Date d'inscription   Statut Membre Dernière intervention   212
 
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