OVH Cloud OVH Cloud

accélération du concatener

8 réponses
Avatar
Benito
J'essai de concatener dans un document, les six colonnes=20
et ce pour chaque ligne contenu dans le ducument. La=20
valeur obtenue du concat=E9nage, doit se retrouv=E9 dans la 7e=20
colonnes.

Dans la pr=E9co=E9dure qui suit, =E7a fonctionne, mais elle=20
prend beaucoup de temps a s'ex=E9cuter ! Y aurait-t-il une=20
autre facon de proc=E9der, mais en moins de temps.

merci
=20


sub concatener


Dim ConcatResultat As String
Dim z As Integer
Dim rngA As Range
Set rngA =3D Range(Cells(2, "A"), Cells(Rows.Count, "A").End
(xlUp))

Range("A2").Select
For Each cell In rngA
=20
For z =3D 1 To 6 Step 1 '=20
=20
rngA.Select
Cells(cell.Row, z).Select
ConcatResultat =3D ConcatResultat &=20
ActiveCell.Value
=20
Next
Cells(cell.Row, z).Select
ActiveCell.Value =3D ConcatResultat
=20
ConcatResultat =3D ""
Next
End Sub

8 réponses

Avatar
Christian M
Bonjour,
Pourquoi n'utilises tu pas une simple formule d'Excel, ans avoir à recourir
au Vba
par exemple si les cellules sont en ligne 2, la formuole suivante pouvant
être recopier vers le bas sur x cellules
¢&B2&C2&D2&E2&F2

--
Christian M
-------------------------------
"Benito" a écrit dans le message de news:
08d201c3a52c$8a6ed810$
J'essai de concatener dans un document, les six colonnes
et ce pour chaque ligne contenu dans le ducument. La
valeur obtenue du concaténage, doit se retrouvé dans la 7e
colonnes.

Dans la précoédure qui suit, ça fonctionne, mais elle
prend beaucoup de temps a s'exécuter ! Y aurait-t-il une
autre facon de procéder, mais en moins de temps.

merci



sub concatener


Dim ConcatResultat As String
Dim z As Integer
Dim rngA As Range
Set rngA = Range(Cells(2, "A"), Cells(Rows.Count, "A").End
(xlUp))

Range("A2").Select
For Each cell In rngA

For z = 1 To 6 Step 1 '

rngA.Select
Cells(cell.Row, z).Select
ConcatResultat = ConcatResultat &
ActiveCell.Value

Next
Cells(cell.Row, z).Select
ActiveCell.Value = ConcatResultat

ConcatResultat = ""
Next
End Sub
Avatar
Hervé
Salut Bénito,
Evite de faire des sélection, car c'est ça qui ralenti fortement ta proc :
Sub concatener()
Dim Chaine As String
Dim rngA As Range
Dim Cel As Range
Set rngA = Range([A2], [A65536].End(xlUp))
For Each Cel In rngA
With Cel
Chaine = Chaine _
& .Value _
& .Offset(0, 1).Value _
& .Offset(0, 2).Value _
& .Offset(0, 3).Value _
& .Offset(0, 4).Value _
& .Offset(0, 5).Value
.Offset(0, 6).Value = Chaine
Chaine = ""
End With
Next
Set Cel = Nothing
Set rngA = Nothing
End Sub

Hervé.

"Benito" a écrit dans le message news:
08d201c3a52c$8a6ed810$
J'essai de concatener dans un document, les six colonnes
et ce pour chaque ligne contenu dans le ducument. La
valeur obtenue du concaténage, doit se retrouvé dans la 7e
colonnes.

Dans la précoédure qui suit, ça fonctionne, mais elle
prend beaucoup de temps a s'exécuter ! Y aurait-t-il une
autre facon de procéder, mais en moins de temps.

merci



sub concatener


Dim ConcatResultat As String
Dim z As Integer
Dim rngA As Range
Set rngA = Range(Cells(2, "A"), Cells(Rows.Count, "A").End
(xlUp))

Range("A2").Select
For Each cell In rngA

For z = 1 To 6 Step 1 '

rngA.Select
Cells(cell.Row, z).Select
ConcatResultat = ConcatResultat &
ActiveCell.Value

Next
Cells(cell.Row, z).Select
ActiveCell.Value = ConcatResultat

ConcatResultat = ""
Next
End Sub
Avatar
Michel Gaboly
Bonjour,

Pas besoin de macro.

En G1, entre la formule :

¡ & B1 & C1 & D1 & E1 & F1

et recopie vers le bas.

Références à adapter à ton document bien sûr

Par macro (en enregistrement auto)

Selection.FormulaR1C1 = "=RC[-6] & RC[-5] & _
RC[-4] & RC[-3] & RC[-2] & RC[-1]"

Ce qui est long dans ton traitement, c'est la boucle, alors que
tu peux réaliser la concaténation en une seule fois.

Si tu veux les valeurs plutôt que les formules, tu fais suivre
l'instruction ci-dessus par un Copier-Collage spécial Valeurs


J'essai de concatener dans un document, les six colonnes
et ce pour chaque ligne contenu dans le ducument. La
valeur obtenue du concaténage, doit se retrouvé dans la 7e
colonnes.

Dans la précoédure qui suit, ça fonctionne, mais elle
prend beaucoup de temps a s'exécuter ! Y aurait-t-il une
autre facon de procéder, mais en moins de temps.

merci


sub concatener

Dim ConcatResultat As String
Dim z As Integer
Dim rngA As Range
Set rngA = Range(Cells(2, "A"), Cells(Rows.Count, "A").End
(xlUp))

Range("A2").Select
For Each cell In rngA

For z = 1 To 6 Step 1 '

rngA.Select
Cells(cell.Row, z).Select
ConcatResultat = ConcatResultat &
ActiveCell.Value

Next
Cells(cell.Row, z).Select
ActiveCell.Value = ConcatResultat

ConcatResultat = ""
Next
End Sub


--
Cordialement,

Michel Gaboly
http://www.gaboly.com

Avatar
benito
Merci Hervé ta solution fonctionne a merveille

-----Message d'origine-----
Salut Bénito,
Evite de faire des sélection, car c'est ça qui ralenti
fortement ta proc :

Sub concatener()
Dim Chaine As String
Dim rngA As Range
Dim Cel As Range
Set rngA = Range([A2], [A65536].End(xlUp))
For Each Cel In rngA
With Cel
Chaine = Chaine _
& .Value _
& .Offset(0, 1).Value _
& .Offset(0, 2).Value _
& .Offset(0, 3).Value _
& .Offset(0, 4).Value _
& .Offset(0, 5).Value
.Offset(0, 6).Value = Chaine
Chaine = ""
End With
Next
Set Cel = Nothing
Set rngA = Nothing
End Sub

Hervé.

"Benito" a écrit dans le
message news:

08d201c3a52c$8a6ed810$
J'essai de concatener dans un document, les six colonnes
et ce pour chaque ligne contenu dans le ducument. La
valeur obtenue du concaténage, doit se retrouvé dans la 7e
colonnes.

Dans la précoédure qui suit, ça fonctionne, mais elle
prend beaucoup de temps a s'exécuter ! Y aurait-t-il une
autre facon de procéder, mais en moins de temps.

merci



sub concatener


Dim ConcatResultat As String
Dim z As Integer
Dim rngA As Range
Set rngA = Range(Cells(2, "A"), Cells(Rows.Count, "A").End
(xlUp))

Range("A2").Select
For Each cell In rngA

For z = 1 To 6 Step 1 '

rngA.Select
Cells(cell.Row, z).Select
ConcatResultat = ConcatResultat &
ActiveCell.Value

Next
Cells(cell.Row, z).Select
ActiveCell.Value = ConcatResultat

ConcatResultat = ""
Next
End Sub



.



Avatar
Michel Gaboly
Bonjour,

Tu as raison pour les sélections. :-))
C'est une cause classique de ralentissement.

En l'occurrence, il y a aussi une autre : il faut éviter les boucles
chaque fois que c'est possible.


Salut Bénito,
Evite de faire des sélection, car c'est ça qui ralenti fortement ta proc :
Sub concatener()
Dim Chaine As String
Dim rngA As Range
Dim Cel As Range
Set rngA = Range([A2], [A65536].End(xlUp))
For Each Cel In rngA
With Cel
Chaine = Chaine _
& .Value _
& .Offset(0, 1).Value _
& .Offset(0, 2).Value _
& .Offset(0, 3).Value _
& .Offset(0, 4).Value _
& .Offset(0, 5).Value
.Offset(0, 6).Value = Chaine
Chaine = ""
End With
Next
Set Cel = Nothing
Set rngA = Nothing
End Sub

Hervé.

"Benito" a écrit dans le message news:
08d201c3a52c$8a6ed810$
J'essai de concatener dans un document, les six colonnes
et ce pour chaque ligne contenu dans le ducument. La
valeur obtenue du concaténage, doit se retrouvé dans la 7e
colonnes.

Dans la précoédure qui suit, ça fonctionne, mais elle
prend beaucoup de temps a s'exécuter ! Y aurait-t-il une
autre facon de procéder, mais en moins de temps.

merci

sub concatener

Dim ConcatResultat As String
Dim z As Integer
Dim rngA As Range
Set rngA = Range(Cells(2, "A"), Cells(Rows.Count, "A").End
(xlUp))

Range("A2").Select
For Each cell In rngA

For z = 1 To 6 Step 1 '

rngA.Select
Cells(cell.Row, z).Select
ConcatResultat = ConcatResultat &
ActiveCell.Value

Next
Cells(cell.Row, z).Select
ActiveCell.Value = ConcatResultat

ConcatResultat = ""
Next
End Sub


--
Cordialement,

Michel Gaboly
http://www.gaboly.com

Avatar
Hervé
Salut Michel,
Tu as tout à fait raison, je n'ai en fait pas réfléchi :o(. Bénito peut
alors utiliser cette façon qui n'a pas de boucle :

Sub Concatener()
Dim plg As Range
Set plg = Range("F1:F" & [A65536].End(xlUp).Row)
plg.Formula = "¡ & B1 & C1 & D1 & E1"
Set plg = Nothing
End Sub

Hervé.
"Michel Gaboly" a écrit dans le message news:

Bonjour,

Tu as raison pour les sélections. :-))
C'est une cause classique de ralentissement.

En l'occurrence, il y a aussi une autre : il faut éviter les boucles
chaque fois que c'est possible.


Salut Bénito,
Evite de faire des sélection, car c'est ça qui ralenti fortement ta proc
:


Sub concatener()
Dim Chaine As String
Dim rngA As Range
Dim Cel As Range
Set rngA = Range([A2], [A65536].End(xlUp))
For Each Cel In rngA
With Cel
Chaine = Chaine _
& .Value _
& .Offset(0, 1).Value _
& .Offset(0, 2).Value _
& .Offset(0, 3).Value _
& .Offset(0, 4).Value _
& .Offset(0, 5).Value
.Offset(0, 6).Value = Chaine
Chaine = ""
End With
Next
Set Cel = Nothing
Set rngA = Nothing
End Sub

Hervé.

"Benito" a écrit dans le message news:
08d201c3a52c$8a6ed810$
J'essai de concatener dans un document, les six colonnes
et ce pour chaque ligne contenu dans le ducument. La
valeur obtenue du concaténage, doit se retrouvé dans la 7e
colonnes.

Dans la précoédure qui suit, ça fonctionne, mais elle
prend beaucoup de temps a s'exécuter ! Y aurait-t-il une
autre facon de procéder, mais en moins de temps.

merci

sub concatener

Dim ConcatResultat As String
Dim z As Integer
Dim rngA As Range
Set rngA = Range(Cells(2, "A"), Cells(Rows.Count, "A").End
(xlUp))

Range("A2").Select
For Each cell In rngA

For z = 1 To 6 Step 1 '

rngA.Select
Cells(cell.Row, z).Select
ConcatResultat = ConcatResultat &
ActiveCell.Value

Next
Cells(cell.Row, z).Select
ActiveCell.Value = ConcatResultat

ConcatResultat = ""
Next
End Sub


--
Cordialement,

Michel Gaboly
http://www.gaboly.com





Avatar
Michel Gaboly
;-)))


Salut Michel,
Tu as tout à fait raison, je n'ai en fait pas réfléchi :o(. Bénito peut
alors utiliser cette façon qui n'a pas de boucle :

Sub Concatener()
Dim plg As Range
Set plg = Range("F1:F" & [A65536].End(xlUp).Row)
plg.Formula = "¡ & B1 & C1 & D1 & E1"
Set plg = Nothing
End Sub

Hervé.
"Michel Gaboly" a écrit dans le message news:

Bonjour,

Tu as raison pour les sélections. :-))
C'est une cause classique de ralentissement.

En l'occurrence, il y a aussi une autre : il faut éviter les boucles
chaque fois que c'est possible.


Salut Bénito,
Evite de faire des sélection, car c'est ça qui ralenti fortement ta proc
:


Sub concatener()
Dim Chaine As String
Dim rngA As Range
Dim Cel As Range
Set rngA = Range([A2], [A65536].End(xlUp))
For Each Cel In rngA
With Cel
Chaine = Chaine _
& .Value _
& .Offset(0, 1).Value _
& .Offset(0, 2).Value _
& .Offset(0, 3).Value _
& .Offset(0, 4).Value _
& .Offset(0, 5).Value
.Offset(0, 6).Value = Chaine
Chaine = ""
End With
Next
Set Cel = Nothing
Set rngA = Nothing
End Sub

Hervé.

"Benito" a écrit dans le message news:
08d201c3a52c$8a6ed810$
J'essai de concatener dans un document, les six colonnes
et ce pour chaque ligne contenu dans le ducument. La
valeur obtenue du concaténage, doit se retrouvé dans la 7e
colonnes.

Dans la précoédure qui suit, ça fonctionne, mais elle
prend beaucoup de temps a s'exécuter ! Y aurait-t-il une
autre facon de procéder, mais en moins de temps.

merci

sub concatener

Dim ConcatResultat As String
Dim z As Integer
Dim rngA As Range
Set rngA = Range(Cells(2, "A"), Cells(Rows.Count, "A").End
(xlUp))

Range("A2").Select
For Each cell In rngA

For z = 1 To 6 Step 1 '

rngA.Select
Cells(cell.Row, z).Select
ConcatResultat = ConcatResultat &
ActiveCell.Value

Next
Cells(cell.Row, z).Select
ActiveCell.Value = ConcatResultat

ConcatResultat = ""
Next
End Sub


--
Cordialement,

Michel Gaboly
http://www.gaboly.com





--
Cordialement,

Michel Gaboly
http://www.gaboly.com



Avatar
AV
Ou encore (plus direct) :

Range("F1:F" & [A65536].End(3).Row) = "¡ & B1 & C1 & D1 & E1"

AV