Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Boucle appel de fonction

6 réponses
Avatar
PST
Bonjour

Je dois appeller la fonction ListeValUniques dans une boucle
soir 3 colonnes sur 1000 lignes environ
Elle prendre les valeurs uniques et les transpose en ligne
Je cherche a faire une boucle qui appelle la fonction pour les x lignes=20
d'avant
X doit =EAtre un param=EAtre modifiable.
y nombre colonnes doit =EAtre modifiable

merci



'Pour plus de colonnes
'Changer la plage
'Changer la valeur de PlageSrc.Columns.Count > 1
'qui doit correspondre au nombre de colonne de la plage

Sub test()

For N =3D 1 To 100
For col =3D 1 To 3

ListeValUniques Range("A" & N & ":c" & N + 10), Range("E" & N)

Next
Next

'ListeValUniques Range("A1:c11"), Range("E1") >> original

End Sub



Sub ListeValUniques(PlageSrc As Range, CellDest As Range)
'Extrait les valeurs uniques d'une colonne et les renvoie
'dans une autre, =E0 partir de CellDest
Dim Arr1, Elt, Arr2(), Coll As New Collection

If PlageSrc.Columns.Count > 3 Then Exit Sub
Arr1 =3D PlageSrc.Value

For Each Elt In Arr1
On Error Resume Next
Coll.Add Elt, CStr(Elt)
If Err.Number =3D 0 Then
ReDim Preserve Arr2(1 To Coll.Count)
Arr2(Coll.Count) =3D Elt
End If
On Error GoTo 0
Next

CellDest.Resize(Coll.Count).Value =3D _
Application.Transpose(Arr2)

'Ajout pour transposer en ligne et non en colonne

With Range("E1", Range("e1").End(xlDown))
.Select
.Copy
End With

[f1].Select

Selection.PasteSpecial Paste:=3DxlPasteValues, Operation:=3DxlNone, =

SkipBlanks _
:=3DFalse, Transpose:=3DTrue

End Sub

6 réponses

Avatar
Daniel.C
Bonjour.
Essaie :

Sub test()

N = [A65586].End(xlUp).Row
For N = 1 To [A65586].End(xlUp).Row
C = [IV1].End(xlToLeft).Column
For col = 1 To 3
Range(Range("A" & N), Cells(N + 10, C)).Select
ListeValUniques Range(Range("A" & N), Cells(N + 10, C)), Range("E" & N)

Next
Next

'ListeValUniques Range("A1:c11"), Range("E1") >> original

End Sub

Cordialement.
Daniel

Bonjour

Je dois appeller la fonction ListeValUniques dans une boucle
soir 3 colonnes sur 1000 lignes environ
Elle prendre les valeurs uniques et les transpose en ligne
Je cherche a faire une boucle qui appelle la fonction pour les x lignes
d'avant
X doit être un paramêtre modifiable.
y nombre colonnes doit être modifiable

merci



'Pour plus de colonnes
'Changer la plage
'Changer la valeur de PlageSrc.Columns.Count > 1
'qui doit correspondre au nombre de colonne de la plage

Sub test()

For N = 1 To 100
For col = 1 To 3

ListeValUniques Range("A" & N & ":c" & N + 10), Range("E" & N)

Next
Next

'ListeValUniques Range("A1:c11"), Range("E1") >> original

End Sub



Sub ListeValUniques(PlageSrc As Range, CellDest As Range)
'Extrait les valeurs uniques d'une colonne et les renvoie
'dans une autre, à partir de CellDest
Dim Arr1, Elt, Arr2(), Coll As New Collection

If PlageSrc.Columns.Count > 3 Then Exit Sub
Arr1 = PlageSrc.Value

For Each Elt In Arr1
On Error Resume Next
Coll.Add Elt, CStr(Elt)
If Err.Number = 0 Then
ReDim Preserve Arr2(1 To Coll.Count)
Arr2(Coll.Count) = Elt
End If
On Error GoTo 0
Next

CellDest.Resize(Coll.Count).Value = _
Application.Transpose(Arr2)

'Ajout pour transposer en ligne et non en colonne

With Range("E1", Range("e1").End(xlDown))
.Select
.Copy
End With

[f1].Select

Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone,
SkipBlanks _
:úlse, Transpose:=True

End Sub


Avatar
Daniel.C
Comment déterminer la colonne ?
Daniel

merci

Mais cette partie qui permet de tranposer la ligne en colonne n'est pas
modifiée donc cela ne peur fonctionner:

>> With Range("E1", Range("e1").End(xlDown))
>> .Select
>> .Copy
>> End With
>>
>> [f1].Select



Le 22/01/2010 12:16, Daniel.C a écrit :
Bonjour.
Essaie :

Sub test()

N = [A65586].End(xlUp).Row
For N = 1 To [A65586].End(xlUp).Row
C = [IV1].End(xlToLeft).Column
For col = 1 To 3
Range(Range("A" & N), Cells(N + 10, C)).Select
ListeValUniques Range(Range("A" & N), Cells(N + 10, C)), Range("E" & N)

Next
Next

'ListeValUniques Range("A1:c11"), Range("E1") >> original

End Sub

Cordialement.
Daniel

Bonjour

Je dois appeller la fonction ListeValUniques dans une boucle
soir 3 colonnes sur 1000 lignes environ
Elle prendre les valeurs uniques et les transpose en ligne
Je cherche a faire une boucle qui appelle la fonction pour les x
lignes d'avant
X doit être un paramêtre modifiable.
y nombre colonnes doit être modifiable

merci



'Pour plus de colonnes
'Changer la plage
'Changer la valeur de PlageSrc.Columns.Count > 1
'qui doit correspondre au nombre de colonne de la plage

Sub test()

For N = 1 To 100
For col = 1 To 3

ListeValUniques Range("A" & N & ":c" & N + 10), Range("E" & N)

Next
Next

'ListeValUniques Range("A1:c11"), Range("E1") >> original

End Sub



Sub ListeValUniques(PlageSrc As Range, CellDest As Range)
'Extrait les valeurs uniques d'une colonne et les renvoie
'dans une autre, à partir de CellDest
Dim Arr1, Elt, Arr2(), Coll As New Collection

If PlageSrc.Columns.Count > 3 Then Exit Sub
Arr1 = PlageSrc.Value

For Each Elt In Arr1
On Error Resume Next
Coll.Add Elt, CStr(Elt)
If Err.Number = 0 Then
ReDim Preserve Arr2(1 To Coll.Count)
Arr2(Coll.Count) = Elt
End If
On Error GoTo 0
Next

CellDest.Resize(Coll.Count).Value = _
Application.Transpose(Arr2)

'Ajout pour transposer en ligne et non en colonne

With Range("E1", Range("e1").End(xlDown))
.Select
.Copy
End With

[f1].Select

Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone,
SkipBlanks _
:úlse, Transpose:=True

End Sub






Avatar
PST
merci

Mais cette partie qui permet de tranposer la ligne en colonne n'est pas
modifiée donc cela ne peur fonctionner:

>> With Range("E1", Range("e1").End(xlDown))
>> .Select
>> .Copy
>> End With
>>
>> [f1].Select



Le 22/01/2010 12:16, Daniel.C a écrit :
Bonjour.
Essaie :

Sub test()

N = [A65586].End(xlUp).Row
For N = 1 To [A65586].End(xlUp).Row
C = [IV1].End(xlToLeft).Column
For col = 1 To 3
Range(Range("A" & N), Cells(N + 10, C)).Select
ListeValUniques Range(Range("A" & N), Cells(N + 10, C)), Range("E" & N)

Next
Next

'ListeValUniques Range("A1:c11"), Range("E1") >> original

End Sub

Cordialement.
Daniel

Bonjour

Je dois appeller la fonction ListeValUniques dans une boucle
soir 3 colonnes sur 1000 lignes environ
Elle prendre les valeurs uniques et les transpose en ligne
Je cherche a faire une boucle qui appelle la fonction pour les x
lignes d'avant
X doit être un paramêtre modifiable.
y nombre colonnes doit être modifiable

merci



'Pour plus de colonnes
'Changer la plage
'Changer la valeur de PlageSrc.Columns.Count > 1
'qui doit correspondre au nombre de colonne de la plage

Sub test()

For N = 1 To 100
For col = 1 To 3

ListeValUniques Range("A" & N & ":c" & N + 10), Range("E" & N)

Next
Next

'ListeValUniques Range("A1:c11"), Range("E1") >> original

End Sub



Sub ListeValUniques(PlageSrc As Range, CellDest As Range)
'Extrait les valeurs uniques d'une colonne et les renvoie
'dans une autre, à partir de CellDest
Dim Arr1, Elt, Arr2(), Coll As New Collection

If PlageSrc.Columns.Count > 3 Then Exit Sub
Arr1 = PlageSrc.Value

For Each Elt In Arr1
On Error Resume Next
Coll.Add Elt, CStr(Elt)
If Err.Number = 0 Then
ReDim Preserve Arr2(1 To Coll.Count)
Arr2(Coll.Count) = Elt
End If
On Error GoTo 0
Next

CellDest.Resize(Coll.Count).Value = _
Application.Transpose(Arr2)

'Ajout pour transposer en ligne et non en colonne

With Range("E1", Range("e1").End(xlDown))
.Select
.Copy
End With

[f1].Select

Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone,
SkipBlanks _
:úlse, Transpose:=True

End Sub






Avatar
PST
supposons la zone a balayer a2:a100
par exemple
de la ligne 2 à la ligne 4 resultat en face de la ligne 4 colonne f
puis la macro continue
de la ligne 3 à 5 >>> résultat colonne f line 5

Arrivé en fin toutes les lignes doivent les chiffres non dupliqués de s
trois lignes précédentes.

il faut mettre en relatif la procédure, de façon a faire la boucle






Le 22/01/2010 14:13, Daniel.C a écrit :
Comment déterminer la colonne ?
Daniel

merci

Mais cette partie qui permet de tranposer la ligne en colonne n'est
pas modifiée donc cela ne peur fonctionner:

>> With Range("E1", Range("e1").End(xlDown))
>> .Select
>> .Copy
>> End With
>>
>> [f1].Select



Le 22/01/2010 12:16, Daniel.C a écrit :
Bonjour.
Essaie :

Sub test()

N = [A65586].End(xlUp).Row
For N = 1 To [A65586].End(xlUp).Row
C = [IV1].End(xlToLeft).Column
For col = 1 To 3
Range(Range("A" & N), Cells(N + 10, C)).Select
ListeValUniques Range(Range("A" & N), Cells(N + 10, C)), Range("E" & N)

Next
Next

'ListeValUniques Range("A1:c11"), Range("E1") >> original

End Sub

Cordialement.
Daniel

Bonjour

Je dois appeller la fonction ListeValUniques dans une boucle
soir 3 colonnes sur 1000 lignes environ
Elle prendre les valeurs uniques et les transpose en ligne
Je cherche a faire une boucle qui appelle la fonction pour les x
lignes d'avant
X doit être un paramêtre modifiable.
y nombre colonnes doit être modifiable

merci



'Pour plus de colonnes
'Changer la plage
'Changer la valeur de PlageSrc.Columns.Count > 1
'qui doit correspondre au nombre de colonne de la plage

Sub test()

For N = 1 To 100
For col = 1 To 3

ListeValUniques Range("A" & N & ":c" & N + 10), Range("E" & N)

Next
Next

'ListeValUniques Range("A1:c11"), Range("E1") >> original

End Sub



Sub ListeValUniques(PlageSrc As Range, CellDest As Range)
'Extrait les valeurs uniques d'une colonne et les renvoie
'dans une autre, à partir de CellDest
Dim Arr1, Elt, Arr2(), Coll As New Collection

If PlageSrc.Columns.Count > 3 Then Exit Sub
Arr1 = PlageSrc.Value

For Each Elt In Arr1
On Error Resume Next
Coll.Add Elt, CStr(Elt)
If Err.Number = 0 Then
ReDim Preserve Arr2(1 To Coll.Count)
Arr2(Coll.Count) = Elt
End If
On Error GoTo 0
Next

CellDest.Resize(Coll.Count).Value = _
Application.Transpose(Arr2)

'Ajout pour transposer en ligne et non en colonne

With Range("E1", Range("e1").End(xlDown))
.Select
.Copy
End With

[f1].Select

Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone,
SkipBlanks _
:úlse, Transpose:=True

End Sub










Avatar
Daniel.C
> supposons la zone a balayer a2:a100
par exemple
de la ligne 2 à la ligne 4 resultat en face de la ligne 4 colonne f
puis la macro continue
de la ligne 3 à 5 >>> résultat colonne f line 5



C'est ce que tu fais avec la variable N ? Le mieux serait que tu mettes
un classeur exemple réduit avec le résultat escompté sur www.cjoint.com
et que tu postes ici l'adresse générée.
Daniel
Avatar
PST
Bonjour

Au départ, je voulais utiliser la macro avec appel de fonction cité d ans
ce post mais ne reussissant pas à le faire, j'ai fait autrement pour le
même résulitat (les référence aux colonnes et lignes ne sont pas les
mêmes mais le principe est le même)
Dans la macro ci dessous qui fonctionne comme je le veux.

Colonnes f à g données
Colonnes L a q resultat transpose 2 X 3 cellules (2 lignes de 3 colonnes)
Deca me sert à controler le nombre de lignes à vérifier (X derniè res lignes)
A chaque fois la macro tient compte des deux lignes d'avant et affiche
le resultat sur la ligne en cours mais en décalé.

Mettre quelque chiffres dans colonne f à g, lancer la macro ci dessous,
et vous verrez ce que je voulais.

Comme j'ai trouvé une solution alternative, laissez tomber, a premièr e
vue c'est plus embetant que prevu.

merci



Sub v2_3()
Application.ScreenUpdating = False

' Création de la ligne de titre
For Lig_1 = 1 To 100

Deca = 1


Range("L" & Lig_1 + Deca + 1 & ":Q" & Lig_1 + Deca + 1).Value =
Evaluate("TRANSPOSE(VALEURS.UNIQUES(F" & Lig_1 & ":H" & Lig_1 + Deca &
",1))")

Cells(Lig_1 + Deca + 1, 19) = Lig_1
Cells(Lig_1 + Deca + 1, 20) = Lig_1 + Deca

Next


Application.ScreenUpdating = False

End Sub



Le 23/01/2010 10:07, Daniel.C a écrit :
supposons la zone a balayer a2:a100
par exemple
de la ligne 2 à la ligne 4 resultat en face de la ligne 4 colonne f
puis la macro continue
de la ligne 3 à 5 >>> résultat colonne f line 5



C'est ce que tu fais avec la variable N ? Le mieux serait que tu mettes
un classeur exemple réduit avec le résultat escompté sur www.cjoi nt.com
et que tu postes ici l'adresse générée.
Daniel