Dans une feuille il y a 5 nombre entiers appartenant =E0 [1..20] sans doubl=
ons, rang=E9s dans les cellules A1:E1, j'appelle cette liste L1 et elle est=
ordonn=E9e.
Soit X (rang=E9 dans H1) un nombre appartenant aussi =E0 [1..20] pouvant fa=
ire doublon avec les chiffres constituant L1.
Je voudrais, dans les cellules=20
A2:E2 construire la liste L2 constitu=E9e de la liste L1 =F4t=E9e (=E9ventu=
ellement) de X.
Donc deux cas :
Si X appartient =E0 L1, L2 sera constitu=E9e des 4 chiffres de L1 diff=E9re=
nts de X ), dans l'ordre de L1.
Si X n'appartient pas =E0 L1 alors L2 sera =E9gale =E0 L1.
Exemple :
L1=3D{2,14,7,10,11}(rang=E9e dans A1:E1) et X=3D{10} alors L2 vaudra {2,14,=
7,11} rang=E9e dans A2:D2 (E2 vide).
=20
Autre exemple:
L1=3D{2,14,7,10,11}(rang=E9e dans A1:E1) et X=3D{20} alors L2 vaudra {2,14,=
7,10,11} rang=E9e dans A2:E2.
J'ai voulu faire =E7a avec des formules excel mais c'est trop compliqu=E9. =
Je sais le faire en VBA mais je ne sais pas comment passer comme argument u=
ne plage de cellule =E0 la fonction, lire cette plage de cellule dans le co=
de VBA, et faire une fonction qui retourne un tableau qui contruirait L2 da=
ns la feuille (en mode matrice, CTRL/SHIFT/ENTER).
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
MichD
Bonjour,
Tu as essayé ceci :
Tu adaptes le nom de la feuille où l'action se déroule dans la procédure. '------------------------------------------------ Sub test() Dim X As Variant, T As Variant Dim C As Range, B As Long
X = Application.InputBox("valeur de X", Type:=1)
If X = False Then Exit Sub Application.ScreenUpdating = False
With Worksheets("Feuil1") 'Adapte le nom de la feuille T = Application.Match(X, .Range("A1:E1"), 0) If IsError(T) Then Err.Clear .Range("A2:E2").Value = .Range("A1:E1").Value Else .Range("A2:E2").ClearContents For Each C In .Range("A1:E1") If C <> X Then B = B + 1 .Cells(2, B) = C.Value End If Next End If End With Application.ScreenUpdating = True End Sub '------------------------------------------------
Bonjour,
Tu as essayé ceci :
Tu adaptes le nom de la feuille où l'action se déroule dans la procédure.
'------------------------------------------------
Sub test()
Dim X As Variant, T As Variant
Dim C As Range, B As Long
X = Application.InputBox("valeur de X", Type:=1)
If X = False Then Exit Sub
Application.ScreenUpdating = False
With Worksheets("Feuil1") 'Adapte le nom de la feuille
T = Application.Match(X, .Range("A1:E1"), 0)
If IsError(T) Then
Err.Clear
.Range("A2:E2").Value = .Range("A1:E1").Value
Else
.Range("A2:E2").ClearContents
For Each C In .Range("A1:E1")
If C <> X Then
B = B + 1
.Cells(2, B) = C.Value
End If
Next
End If
End With
Application.ScreenUpdating = True
End Sub
'------------------------------------------------
Tu adaptes le nom de la feuille où l'action se déroule dans la procédure. '------------------------------------------------ Sub test() Dim X As Variant, T As Variant Dim C As Range, B As Long
X = Application.InputBox("valeur de X", Type:=1)
If X = False Then Exit Sub Application.ScreenUpdating = False
With Worksheets("Feuil1") 'Adapte le nom de la feuille T = Application.Match(X, .Range("A1:E1"), 0) If IsError(T) Then Err.Clear .Range("A2:E2").Value = .Range("A1:E1").Value Else .Range("A2:E2").ClearContents For Each C In .Range("A1:E1") If C <> X Then B = B + 1 .Cells(2, B) = C.Value End If Next End If End With Application.ScreenUpdating = True End Sub '------------------------------------------------
isabelle
bonjour Michel,
une formule matriciel, valider avec ctrl + shift + enter en cellule A2 et tirer vers la droite
Michel, je me suis compliquer la formule pour rien,
sélectionne A2:E2 copie la formule dans la barre de formule et valide en matriciel. =SIERREUR(PETITE.VALEUR(SI(($A$1:$E$1<>10);$A$1:$E$1);COLONNE());"")
isabelle
Le 2014-04-02 08:02, isabelle a écrit :
bonjour Michel,
une formule matriciel, valider avec ctrl + shift + enter en cellule A2 et tirer vers la droite
Michel, je me suis compliquer la formule pour rien,
sélectionne A2:E2
copie la formule dans la barre de formule et valide en matriciel.
=SIERREUR(PETITE.VALEUR(SI(($A$1:$E$1<>10);$A$1:$E$1);COLONNE());"")
isabelle
Le 2014-04-02 08:02, isabelle a écrit :
bonjour Michel,
une formule matriciel, valider avec ctrl + shift + enter
en cellule A2 et tirer vers la droite
Michel, je me suis compliquer la formule pour rien,
sélectionne A2:E2 copie la formule dans la barre de formule et valide en matriciel. =SIERREUR(PETITE.VALEUR(SI(($A$1:$E$1<>10);$A$1:$E$1);COLONNE());"")
isabelle
Le 2014-04-02 08:02, isabelle a écrit :
bonjour Michel,
une formule matriciel, valider avec ctrl + shift + enter en cellule A2 et tirer vers la droite
pour obtenir les valeurs dans le même ordre de la ligne 1 j'ai fait un essaie avec la fonction INDEX =SIERREUR(INDEX(SI($A$1:$F$1<>10;$A$1:$F$1);COLONNE());INDEX(SI($A$1:$F$1<>10;$A$1:$F$1);COLONNE()+1))
mais il se passe une bizzarie avec la fonction SIERREUR que je ne comprend pas
http://cjoint.com/?DDcqQC8pWlc
isabelle
Le 2014-04-02 08:11, isabelle a écrit :
Michel, je me suis compliquer la formule pour rien,
sélectionne A2:E2 copie la formule dans la barre de formule et valide en matriciel. =SIERREUR(PETITE.VALEUR(SI(($A$1:$E$1<>10);$A$1:$E$1);COLONNE());"")
isabelle
Le 2014-04-02 08:02, isabelle a écrit :
bonjour Michel,
une formule matriciel, valider avec ctrl + shift + enter en cellule A2 et tirer vers la droite
pour obtenir les valeurs dans le même ordre de la ligne 1
j'ai fait un essaie avec la fonction INDEX
=SIERREUR(INDEX(SI($A$1:$F$1<>10;$A$1:$F$1);COLONNE());INDEX(SI($A$1:$F$1<>10;$A$1:$F$1);COLONNE()+1))
mais il se passe une bizzarie avec la fonction SIERREUR que je ne comprend pas
http://cjoint.com/?DDcqQC8pWlc
isabelle
Le 2014-04-02 08:11, isabelle a écrit :
Michel, je me suis compliquer la formule pour rien,
sélectionne A2:E2
copie la formule dans la barre de formule et valide en matriciel.
=SIERREUR(PETITE.VALEUR(SI(($A$1:$E$1<>10);$A$1:$E$1);COLONNE());"")
isabelle
Le 2014-04-02 08:02, isabelle a écrit :
bonjour Michel,
une formule matriciel, valider avec ctrl + shift + enter
en cellule A2 et tirer vers la droite
pour obtenir les valeurs dans le même ordre de la ligne 1 j'ai fait un essaie avec la fonction INDEX =SIERREUR(INDEX(SI($A$1:$F$1<>10;$A$1:$F$1);COLONNE());INDEX(SI($A$1:$F$1<>10;$A$1:$F$1);COLONNE()+1))
mais il se passe une bizzarie avec la fonction SIERREUR que je ne comprend pas
http://cjoint.com/?DDcqQC8pWlc
isabelle
Le 2014-04-02 08:11, isabelle a écrit :
Michel, je me suis compliquer la formule pour rien,
sélectionne A2:E2 copie la formule dans la barre de formule et valide en matriciel. =SIERREUR(PETITE.VALEUR(SI(($A$1:$E$1<>10);$A$1:$E$1);COLONNE());"")
isabelle
Le 2014-04-02 08:02, isabelle a écrit :
bonjour Michel,
une formule matriciel, valider avec ctrl + shift + enter en cellule A2 et tirer vers la droite
pour obtenir les valeurs dans le même ordre de la ligne 1
A priori selon les données de L1 sont triées... Donc petite.valeur devrait suffire.
j'ai fait un essaie avec la fonction INDEX =SIERREUR(INDEX(SI($A$1:$F$1<>10;$A$1:$F$1);COLONNE());INDEX(SI($A$1:$F$1<>10;$A$1:$F$1);COLONNE()+1))
mais il se passe une bizzarie avec la fonction SIERREUR que je ne comprend pas
http://cjoint.com/?DDcqQC8pWlc
isabelle
Le 2014-04-02 08:11, isabelle a écrit :
Michel, je me suis compliquer la formule pour rien,
sélectionne A2:E2 copie la formule dans la barre de formule et valide en matriciel. =SIERREUR(PETITE.VALEUR(SI(($A$1:$E$1<>10);$A$1:$E$1);COLONNE());"")
isabelle
Le 2014-04-02 08:02, isabelle a écrit :
bonjour Michel,
une formule matriciel, valider avec ctrl + shift + enter en cellule A2 et tirer vers la droite
pour obtenir les valeurs dans le même ordre de la ligne 1
A priori selon michel.legria@gmail.com les données de L1 sont triées...
Donc petite.valeur devrait suffire.
j'ai fait un essaie avec la fonction INDEX
=SIERREUR(INDEX(SI($A$1:$F$1<>10;$A$1:$F$1);COLONNE());INDEX(SI($A$1:$F$1<>10;$A$1:$F$1);COLONNE()+1))
mais il se passe une bizzarie avec la fonction SIERREUR que je ne
comprend pas
http://cjoint.com/?DDcqQC8pWlc
isabelle
Le 2014-04-02 08:11, isabelle a écrit :
Michel, je me suis compliquer la formule pour rien,
sélectionne A2:E2
copie la formule dans la barre de formule et valide en matriciel.
=SIERREUR(PETITE.VALEUR(SI(($A$1:$E$1<>10);$A$1:$E$1);COLONNE());"")
isabelle
Le 2014-04-02 08:02, isabelle a écrit :
bonjour Michel,
une formule matriciel, valider avec ctrl + shift + enter
en cellule A2 et tirer vers la droite
pour obtenir les valeurs dans le même ordre de la ligne 1
A priori selon les données de L1 sont triées... Donc petite.valeur devrait suffire.
j'ai fait un essaie avec la fonction INDEX =SIERREUR(INDEX(SI($A$1:$F$1<>10;$A$1:$F$1);COLONNE());INDEX(SI($A$1:$F$1<>10;$A$1:$F$1);COLONNE()+1))
mais il se passe une bizzarie avec la fonction SIERREUR que je ne comprend pas
http://cjoint.com/?DDcqQC8pWlc
isabelle
Le 2014-04-02 08:11, isabelle a écrit :
Michel, je me suis compliquer la formule pour rien,
sélectionne A2:E2 copie la formule dans la barre de formule et valide en matriciel. =SIERREUR(PETITE.VALEUR(SI(($A$1:$E$1<>10);$A$1:$E$1);COLONNE());"")
isabelle
Le 2014-04-02 08:02, isabelle a écrit :
bonjour Michel,
une formule matriciel, valider avec ctrl + shift + enter en cellule A2 et tirer vers la droite
oui selon ce que Michel a dit à la première ligne " j'appelle cette liste L1 et elle est ordonnée." mais par la suite les exemples montrés ne le sont pas -( Michel devra clarifier... isabelle
Le 2014-04-02 11:32, GL a écrit :
Le 02/04/2014 16:45, isabelle a écrit :
pour obtenir les valeurs dans le même ordre de la ligne 1
A priori selon les données de L1 sont triées... Donc petite.valeur devrait suffire.
j'ai fait un essaie avec la fonction INDEX =SIERREUR(INDEX(SI($A$1:$F$1<>10;$A$1:$F$1);COLONNE());INDEX(SI($A$1:$F$1<>10;$A$1:$F$1);COLONNE()+1))
mais il se passe une bizzarie avec la fonction SIERREUR que je ne comprend pas
http://cjoint.com/?DDcqQC8pWlc
isabelle
Le 2014-04-02 08:11, isabelle a écrit :
Michel, je me suis compliquer la formule pour rien,
sélectionne A2:E2 copie la formule dans la barre de formule et valide en matriciel. =SIERREUR(PETITE.VALEUR(SI(($A$1:$E$1<>10);$A$1:$E$1);COLONNE());"")
isabelle
Le 2014-04-02 08:02, isabelle a écrit :
bonjour Michel,
une formule matriciel, valider avec ctrl + shift + enter en cellule A2 et tirer vers la droite
oui selon ce que Michel a dit à la première ligne " j'appelle cette liste L1 et
elle est ordonnée."
mais par la suite les exemples montrés ne le sont pas -(
Michel devra clarifier...
isabelle
Le 2014-04-02 11:32, GL a écrit :
Le 02/04/2014 16:45, isabelle a écrit :
pour obtenir les valeurs dans le même ordre de la ligne 1
A priori selon michel.legria@gmail.com les données de L1 sont triées...
Donc petite.valeur devrait suffire.
j'ai fait un essaie avec la fonction INDEX
=SIERREUR(INDEX(SI($A$1:$F$1<>10;$A$1:$F$1);COLONNE());INDEX(SI($A$1:$F$1<>10;$A$1:$F$1);COLONNE()+1))
mais il se passe une bizzarie avec la fonction SIERREUR que je ne
comprend pas
http://cjoint.com/?DDcqQC8pWlc
isabelle
Le 2014-04-02 08:11, isabelle a écrit :
Michel, je me suis compliquer la formule pour rien,
sélectionne A2:E2
copie la formule dans la barre de formule et valide en matriciel.
=SIERREUR(PETITE.VALEUR(SI(($A$1:$E$1<>10);$A$1:$E$1);COLONNE());"")
isabelle
Le 2014-04-02 08:02, isabelle a écrit :
bonjour Michel,
une formule matriciel, valider avec ctrl + shift + enter
en cellule A2 et tirer vers la droite
oui selon ce que Michel a dit à la première ligne " j'appelle cette liste L1 et elle est ordonnée." mais par la suite les exemples montrés ne le sont pas -( Michel devra clarifier... isabelle
Le 2014-04-02 11:32, GL a écrit :
Le 02/04/2014 16:45, isabelle a écrit :
pour obtenir les valeurs dans le même ordre de la ligne 1
A priori selon les données de L1 sont triées... Donc petite.valeur devrait suffire.
j'ai fait un essaie avec la fonction INDEX =SIERREUR(INDEX(SI($A$1:$F$1<>10;$A$1:$F$1);COLONNE());INDEX(SI($A$1:$F$1<>10;$A$1:$F$1);COLONNE()+1))
mais il se passe une bizzarie avec la fonction SIERREUR que je ne comprend pas
http://cjoint.com/?DDcqQC8pWlc
isabelle
Le 2014-04-02 08:11, isabelle a écrit :
Michel, je me suis compliquer la formule pour rien,
sélectionne A2:E2 copie la formule dans la barre de formule et valide en matriciel. =SIERREUR(PETITE.VALEUR(SI(($A$1:$E$1<>10);$A$1:$E$1);COLONNE());"")
isabelle
Le 2014-04-02 08:02, isabelle a écrit :
bonjour Michel,
une formule matriciel, valider avec ctrl + shift + enter en cellule A2 et tirer vers la droite
PArdon Isabelle, je n'ai pas été clair. Je veux dire que l'ordre de la liste L1 compte ! Elle n'est pas ordonnée (les chiffres qu'elle contient ne sont pas ordonnés), mais l'ordre dans lequel ses chiffres apparaissent compte dans la construction de L2. Dit autrement, la liste L2 doit prése nter les chiffres de L1 dans le même ordre que celui de L1 !
Exemple :
L1={14,2,1,8,9} et X={8} donne L2={14,2,1,9} et pas L2={2,14,1,9} ou L2={9,2,1,14}
Michel
Le mercredi 2 avril 2014 17:42:36 UTC+2, isabelle a écrit :
oui selon ce que Michel a dit à la première ligne " j'appelle cette l iste L1 et
elle est ordonnée."
mais par la suite les exemples montrés ne le sont pas -(
Michel devra clarifier...
isabelle
Le 2014-04-02 11:32, GL a écrit :
> Le 02/04/2014 16:45, isabelle a écrit :
>> pour obtenir les valeurs dans le même ordre de la ligne 1
>
> A priori selon michel.legria@gmail.com les données de L1 sont triée s...
PArdon Isabelle, je n'ai pas été clair. Je veux dire que l'ordre de la liste L1 compte ! Elle n'est pas ordonnée (les chiffres qu'elle contient ne sont pas ordonnés), mais l'ordre dans lequel ses chiffres apparaissent compte dans la construction de L2. Dit autrement, la liste L2 doit prése nter les chiffres de L1 dans le même ordre que celui de L1 !
Exemple :
L1={14,2,1,8,9} et X={8} donne L2={14,2,1,9}
et pas L2={2,14,1,9} ou L2={9,2,1,14}
PArdon Isabelle, je n'ai pas été clair. Je veux dire que l'ordre de la liste L1 compte ! Elle n'est pas ordonnée (les chiffres qu'elle contient ne sont pas ordonnés), mais l'ordre dans lequel ses chiffres apparaissent compte dans la construction de L2. Dit autrement, la liste L2 doit prése nter les chiffres de L1 dans le même ordre que celui de L1 !
Exemple :
L1={14,2,1,8,9} et X={8} donne L2={14,2,1,9} et pas L2={2,14,1,9} ou L2={9,2,1,14}
Michel
isabelle
Merci Michel d'avoir clarifier, je travaille sur le probleme avec la fonction INDEX je reviens dès que je trouve la solution.
isabelle
Le 2014-04-02 14:44, a écrit :
PArdon Isabelle, je n'ai pas été clair. Je veux dire que l'ordre de la liste L1 compte !
Elle n'est pas ordonnée (les chiffres qu'elle contient ne sont pas ordonnés), mais l'ordre dans lequel ses chiffres apparaissent compte dans la construction de L2. Dit autrement, la liste L2 doit présenter les chiffres de L1 dans le même ordre que celui de L1 !
Exemple :
L1={14,2,1,8,9} et X={8} donne L2={14,2,1,9} et pas L2={2,14,1,9} ou L2={9,2,1,14}
Michel
Merci Michel d'avoir clarifier,
je travaille sur le probleme avec la fonction INDEX
je reviens dès que je trouve la solution.
isabelle
Le 2014-04-02 14:44, michel.legeria@gmail.com a écrit :
PArdon Isabelle, je n'ai pas été clair. Je veux dire que l'ordre de la liste L1 compte !
Elle n'est pas ordonnée (les chiffres qu'elle contient ne sont pas ordonnés),
mais l'ordre dans lequel ses chiffres apparaissent compte dans la construction
de L2.
Dit autrement, la liste L2 doit présenter les chiffres de L1 dans le même ordre
que celui de L1 !
Exemple :
L1={14,2,1,8,9} et X={8} donne L2={14,2,1,9}
et pas L2={2,14,1,9} ou L2={9,2,1,14}
Merci Michel d'avoir clarifier, je travaille sur le probleme avec la fonction INDEX je reviens dès que je trouve la solution.
isabelle
Le 2014-04-02 14:44, a écrit :
PArdon Isabelle, je n'ai pas été clair. Je veux dire que l'ordre de la liste L1 compte !
Elle n'est pas ordonnée (les chiffres qu'elle contient ne sont pas ordonnés), mais l'ordre dans lequel ses chiffres apparaissent compte dans la construction de L2. Dit autrement, la liste L2 doit présenter les chiffres de L1 dans le même ordre que celui de L1 !
Exemple :
L1={14,2,1,8,9} et X={8} donne L2={14,2,1,9} et pas L2={2,14,1,9} ou L2={9,2,1,14}
Michel
michel.legeria
Le mercredi 2 avril 2014 22:14:55 UTC+2, isabelle a écrit :
Merci Michel d'avoir clarifier,
je travaille sur le probleme avec la fonction INDEX
je reviens dès que je trouve la solution.
isabelle
Le 2014-04-02 14:44, a écrit :
> PArdon Isabelle, je n'ai pas été clair. Je veux dire que l'ordre de la liste L1 compte !
Elle n'est pas ordonnée (les chiffres qu'elle contient ne sont pas ordo nnés),
mais l'ordre dans lequel ses chiffres apparaissent compte dans la constru ction
de L2.
Dit autrement, la liste L2 doit présenter les chiffres de L1 dans le m ême ordre
que celui de L1 !
>
> Exemple :
>
> L1={14,2,1,8,9} et X={8} donne L2={14,2,1,9}
> et pas L2={2,14,1,9} ou L2={9,2,1,14}
>
> Michel
> :
Ok j'ai résolu le problème avec une fonction VB Mais je suis tout de même preneur d'une formule qui fait aussi le travail pour voir comment le faire.
*********** Function L2(L1 As Range; X as integer) As Variant
Dim L2Temp () As Variant ReDim L2Temp(5)
Index = 1 For i = 1 To 5 L2Temp(i) = 0 If (L1.Cells(i) <> X) Then L2Temp(Index) = L1.Cells(i) Index = Index + 1 End If Next
L2=L2Temp ***********
Le mercredi 2 avril 2014 22:14:55 UTC+2, isabelle a écrit :
Merci Michel d'avoir clarifier,
je travaille sur le probleme avec la fonction INDEX
je reviens dès que je trouve la solution.
isabelle
Le 2014-04-02 14:44, michel.legeria@gmail.com a écrit :
> PArdon Isabelle, je n'ai pas été clair. Je veux dire que l'ordre de la liste L1 compte !
Elle n'est pas ordonnée (les chiffres qu'elle contient ne sont pas ordo nnés),
mais l'ordre dans lequel ses chiffres apparaissent compte dans la constru ction
de L2.
Dit autrement, la liste L2 doit présenter les chiffres de L1 dans le m ême ordre
que celui de L1 !
>
> Exemple :
>
> L1={14,2,1,8,9} et X={8} donne L2={14,2,1,9}
> et pas L2={2,14,1,9} ou L2={9,2,1,14}
>
> Michel
> :
Ok j'ai résolu le problème avec une fonction VB
Mais je suis tout de même preneur d'une formule qui fait aussi le travail
pour voir comment le faire.
***********
Function L2(L1 As Range; X as integer) As Variant
Dim L2Temp () As Variant
ReDim L2Temp(5)
Index = 1
For i = 1 To 5
L2Temp(i) = 0
If (L1.Cells(i) <> X) Then
L2Temp(Index) = L1.Cells(i)
Index = Index + 1
End If
Next