OVH Cloud OVH Cloud

Copie d'une ligne selon plusieurs critères

29 réponses
Avatar
lglux
Bonsoir a tous,

Malgr=E9 la mine d'or pr=E9sente sur le forum, je ne dois pas utiliser les
bons mots cl=E9s car je ne trouve pas la reponse...

J'utilise le vba assez sommairement et j'aimerai developper mes
connaissances surtout que l=E0 j'en ai vraiment besoin pour le boulot:

(je vous passe l'etape du formulaire et tout que j'etais pas peu fier
d'avoir mis en place)

Voil=E0 j'aimerai copier une ligne (table "media") suivant plusieurs
crit=E8res d'une autre ligne d'une autre worksheet (ins=E9r=E9 via le
formulaire) "fonds".

Le choix de la ligne =E0 copier doit se faire en fonction de trois
criteres.

Pour faire simple, j'aimerai la copie de la ligne fonds + la copie de
la ligne media (a la suite sur la meme ligne) sur une troisieme
feuille SI et seulement SI les trois criteres present dans les deux
lignes fonds et media sont =E9gaux.

Pour l'instant ca marche pour le critere pays avec ce code mais je ne
sais pas comment inclure les autres criteres (avec un and? comment
utiliser cela? mon code n'est pas trop lourd?):

For i =3D 1 To 27
pays_a_tester =3D Sheets("Funds").Range(Tab_lettres(i) &
cpt_funds).Value

If pays_a_tester =3D "Oui" Then

' recherche dans feuille M=E9dia
' faire tant que Bx de la feuille Media n'est pas vide

Do While Sheets("media").Range("b" & cpt_media).Text <> ""

If Sheets("media").Range("b" & cpt_media).Text =3D Tab_pays(i)
Then



Sheets("r=E9sult").Range("a" & ligne_courante) =3D
Sheets("Funds").Range("a" & cpt_funds)
Sheets("r=E9sult").Range("b" & ligne_courante) =3D
Sheets("Funds").Range("b" & cpt_funds)
Sheets("r=E9sult").Range("c" & ligne_courante) =3D
Sheets("Funds").Range("c" & cpt_funds)
Sheets("r=E9sult").Range("d" & ligne_courante) =3D
Sheets("Funds").Range("d" & cpt_funds)
Sheets("r=E9sult").Range("e" & ligne_courante) =3D
Sheets("Funds").Range("e" & cpt_funds)
Sheets("r=E9sult").Range("f" & ligne_courante) =3D
Sheets("Funds").Range("f" & cpt_funds)
Sheets("r=E9sult").Range("g" & ligne_courante) =3D Tab_pays(i)
Sheets("r=E9sult").Range("h" & ligne_courante) =3D
Sheets("media").Range("c" & cpt_media)
Sheets("r=E9sult").Range("i" & ligne_courante) =3D
Sheets("media").Range("d" & cpt_media)
Sheets("r=E9sult").Range("j" & ligne_courante) =3D
Sheets("media").Range("e" & cpt_media)
ligne_courante =3D ligne_courante + 1
End If

cpt_media =3D cpt_media + 1

Loop

cpt_media =3D 2

End If

Next


cpt_funds =3D cpt_funds + 1

Loop



(pour ceux qui veulent l'integralit=E9 du code pour peut etre mieux
comprendre ma manip)
---------------------------------------------------------------------------=
----------------------------------------------------

Sub Macro1()
'

'

Dim Tab_pays(30) As String ' tableau de tous les pays
Dim cpt_funds, cpt_media As Integer
Dim Tab_lettres(27) As String ' tableau des colonnes de G =E0 AG

Tab_lettres(1) =3D "G"
Tab_lettres(2) =3D "H"
Tab_lettres(3) =3D "I"
Tab_lettres(4) =3D "J"
Tab_lettres(5) =3D "K"
Tab_lettres(6) =3D "L"
Tab_lettres(7) =3D "M"
Tab_lettres(8) =3D "N"
Tab_lettres(9) =3D "O"
Tab_lettres(10) =3D "P"
Tab_lettres(11) =3D "Q"
Tab_lettres(12) =3D "R"
Tab_lettres(13) =3D "S"
Tab_lettres(14) =3D "T"
Tab_lettres(15) =3D "U"
Tab_lettres(16) =3D "V"
Tab_lettres(17) =3D "W"
Tab_lettres(18) =3D "X"
Tab_lettres(19) =3D "Y"
Tab_lettres(20) =3D "Z"
Tab_lettres(21) =3D "AA"
Tab_lettres(22) =3D "AB"
Tab_lettres(23) =3D "AC"
Tab_lettres(24) =3D "AD"
Tab_lettres(25) =3D "AE"
Tab_lettres(26) =3D "AF"
Tab_lettres(27) =3D "AG"

' Lecture ent=EAte feuille Funds

ISIN =3D Sheets("Funds").Range("A1").Value
Funds =3D Sheets("Funds").Range("B1").Value
Subs_Funds =3D Sheets("Funds").Range("C1").Value
Share_classe =3D Sheets("Funds").Range("D1").Value
Type_share =3D Sheets("Funds").Range("E1").Value
launch_date =3D Sheets("Funds").Range("F1").Value

' remplissage tableau pays

Tab_pays(1) =3D Sheets("Funds").Range("G1").Value
Tab_pays(2) =3D Sheets("Funds").Range("H1").Value
Tab_pays(3) =3D Sheets("Funds").Range("I1").Value
Tab_pays(4) =3D Sheets("Funds").Range("J1").Value
Tab_pays(5) =3D Sheets("Funds").Range("K1").Value
Tab_pays(6) =3D Sheets("Funds").Range("L1").Value
Tab_pays(7) =3D Sheets("Funds").Range("M1").Value
Tab_pays(8) =3D Sheets("Funds").Range("N1").Value
Tab_pays(9) =3D Sheets("Funds").Range("O1").Value
Tab_pays(10) =3D Sheets("Funds").Range("P1").Value
Tab_pays(11) =3D Sheets("Funds").Range("Q1").Value
Tab_pays(12) =3D Sheets("Funds").Range("R1").Value
Tab_pays(13) =3D Sheets("Funds").Range("S1").Value
Tab_pays(14) =3D Sheets("Funds").Range("T1").Value
Tab_pays(15) =3D Sheets("Funds").Range("U1").Value
Tab_pays(16) =3D Sheets("Funds").Range("V1").Value
Tab_pays(17) =3D Sheets("Funds").Range("W1").Value
Tab_pays(18) =3D Sheets("Funds").Range("X1").Value
Tab_pays(19) =3D Sheets("Funds").Range("Y1").Value
Tab_pays(20) =3D Sheets("Funds").Range("Z1").Value
Tab_pays(21) =3D Sheets("Funds").Range("AA1").Value
Tab_pays(22) =3D Sheets("Funds").Range("AB1").Value
Tab_pays(23) =3D Sheets("Funds").Range("AC1").Value
Tab_pays(24) =3D Sheets("Funds").Range("AD1").Value
Tab_pays(25) =3D Sheets("Funds").Range("AE1").Value
Tab_pays(26) =3D Sheets("Funds").Range("AF1").Value
Tab_pays(27) =3D Sheets("Funds").Range("AG1").Value

' Lecture ent=EAte feuille Media

Country_pub =3D Sheets("Media").Range("B1").Value
Media_designa =3D Sheets("Media").Range("C1").Value
Pub_Share =3D Sheets("Media").Range("D1").Value
Pub_Type_share =3D Sheets("Media").Range("E1").Value

' Copie de l'ent=EAte dans la feuille r=E9sult

Sheets("r=E9sult").Range("a1") =3D ISIN
Sheets("r=E9sult").Range("b1") =3D Funds
Sheets("r=E9sult").Range("c1") =3D Subs_Funds
Sheets("r=E9sult").Range("d1") =3D Share_classe
Sheets("r=E9sult").Range("e1") =3D Type_share
Sheets("r=E9sult").Range("f1") =3D launch_date
Sheets("r=E9sult").Range("g1") =3D Country_pub
Sheets("r=E9sult").Range("h1") =3D Media_designa
Sheets("r=E9sult").Range("i1") =3D Pub_Share
Sheets("r=E9sult").Range("j1") =3D Pub_Type_share

cpt_funds =3D 2 ' position premi=E8re ligne utile dans feuille Funds
cpt_media =3D 2 ' position premi=E8re ligne utile dans feuille Media
ligne_courante =3D cpt_funds 'position ligne courante dans feuille
r=E9sult

' faire tant que Ax de la feuille Funds n'est pas vide

Do While Sheets("Funds").Range("a" & cpt_funds).Text <> ""

'recherche des m=E9dias de chaque pays

For i =3D 1 To 27
pays_a_tester =3D Sheets("Funds").Range(Tab_lettres(i) &
cpt_funds).Value

If pays_a_tester =3D "Oui" Then

' recherche dans feuille M=E9dia
' faire tant que Bx de la feuille Media n'est pas vide

Do While Sheets("media").Range("b" & cpt_media).Text <> ""

If Sheets("media").Range("b" & cpt_media).Text =3D Tab_pays(i)
Then

'and if sheets("media").range("d" & cpt_media).text =3D
Sheets("Funds").Range("D1").Value

Sheets("r=E9sult").Range("a" & ligne_courante) =3D
Sheets("Funds").Range("a" & cpt_funds)
Sheets("r=E9sult").Range("b" & ligne_courante) =3D
Sheets("Funds").Range("b" & cpt_funds)
Sheets("r=E9sult").Range("c" & ligne_courante) =3D
Sheets("Funds").Range("c" & cpt_funds)
Sheets("r=E9sult").Range("d" & ligne_courante) =3D
Sheets("Funds").Range("d" & cpt_funds)
Sheets("r=E9sult").Range("e" & ligne_courante) =3D
Sheets("Funds").Range("e" & cpt_funds)
Sheets("r=E9sult").Range("f" & ligne_courante) =3D
Sheets("Funds").Range("f" & cpt_funds)
Sheets("r=E9sult").Range("g" & ligne_courante) =3D Tab_pays(i)
Sheets("r=E9sult").Range("h" & ligne_courante) =3D
Sheets("media").Range("c" & cpt_media)
Sheets("r=E9sult").Range("i" & ligne_courante) =3D
Sheets("media").Range("d" & cpt_media)
Sheets("r=E9sult").Range("j" & ligne_courante) =3D
Sheets("media").Range("e" & cpt_media)
ligne_courante =3D ligne_courante + 1
End If

cpt_media =3D cpt_media + 1

Loop

cpt_media =3D 2

End If

Next


cpt_funds =3D cpt_funds + 1

Loop


'
End Sub

10 réponses

1 2 3
Avatar
lglux
J'ai remplacé:

If Sheets("media").Range("b" & cpt_media).Text = Tab_pays(i) And
Sheets("media").Range("d" & cpt_media).Text =
Sheets("Funds").Range("D1").Value Then

qui ne marchait pas par:

If Sheets("media").Range("b" & cpt_media).Text = Tab_pays(i) And
Sheets("media").Range("d" & cpt_media).Text =
Sheets("Funds").Range("D" & cpt_funds).Value Then

Et ca marche ! manque plus qu'a dire

And Sheets("media").Range("d" & cpt_media).Text =
Sheets("Funds").Range("D" & cpt_funds).Value

OU Sheets("media").Range("d" & cpt_media).Text = "*


par contre ce qui est nouveau c'est que maintenant quand je fais
tourner la macro plusieurs fois de suite il m'efface les precedant
resultats de la feuille results....





On 10 août, 11:35, lglux wrote:
Merci Daniel,

En fait pour cette condition là, avec les pays, ca marche, mais pas
avec la condition type share class. J'ai enlevé les " " et ca marche
aussi.

On 10 août, 11:25, "Daniel" wrote:



Dans Macro1, remplace :
If pays_a_tester = "True" Then
par
If pays_a_tester = True Then
Ce n'est peut-être pas toute la solution, mais une partie, en tout ca s.
Daniel
"lglux" a écrit dans le message de news:

Bonjour FFO

Merci pour la cure d'amaigrissement c'est bien plus joli, je vais plus
tard me pencher et en tirer les lecons.

Bon par contre plus rien ne s'affiche dans la feuille result, a croire
que le deuxieme critere avec le "and" passe mal, bizarre

MERCI !!

On 10 août, 10:29, lglux wrote:

Bonjour Daniel,

J'ai pas osé mettre un fichier car j'avais lu la netiquette de ce
forum, certes datée de 2003..

http://cjoint.com/?ikkARtRCiO

sur la feuille result j'ai mis les infos pour lancer la macro:

1. Appuyer sur le bouton en haut a droite
2. remplir les champs
3. input data puis valider
4. resultat dans cette feuille, j'aimerai que la colonne D = colonn e I
ou "*"

MERCI !!

On 10 août, 09:53, "Daniel" wrote:

Bonjour.
C'est difficile de se faire une idée, mais, oui, avec des "and", ça doit
le
faire. Sinon, le mieux est de télécharger ton classeur
surwww.cjoint.comet
de poster l'adresse générée. N'oublie pas de remplacer les éventuelles
données confidentielles
Cordialement.
Daniel
"lglux" a écrit dans le message de ne ws:

Bonsoir a tous,

Malgré la mine d'or présente sur le forum, je ne dois pas utili ser les
bons mots clés car je ne trouve pas la reponse...

J'utilise le vba assez sommairement et j'aimerai developper mes
connaissances surtout que là j'en ai vraiment besoin pour le boul ot:

(je vous passe l'etape du formulaire et tout que j'etais pas peu fi er
d'avoir mis en place)

Voilà j'aimerai copier une ligne (table "media") suivant plusieurs
critères d'une autre ligne d'une autre worksheet (inséré via le
formulaire) "fonds".

Le choix de la ligne à copier doit se faire en fonction de trois
criteres.

Pour faire simple, j'aimerai la copie de la ligne fonds + la copie de
la ligne media (a la suite sur la meme ligne) sur une troisieme
feuille SI et seulement SI les trois criteres present dans les deux
lignes fonds et media sont égaux.

Pour l'instant ca marche pour le critere pays avec ce code mais je ne
sais pas comment inclure les autres criteres (avec un and? comment
utiliser cela? mon code n'est pas trop lourd?):

For i = 1 To 27
pays_a_tester = Sheets("Funds").Range(Tab_lettres(i) &
cpt_funds).Value

If pays_a_tester = "Oui" Then

' recherche dans feuille Média
' faire tant que Bx de la feuille Media n'est pas vide

Do While Sheets("media").Range("b" & cpt_media).Text <> ""

If Sheets("media").Range("b" & cpt_media).Text = Tab_pays (i)
Then

Sheets("résult").Range("a" & ligne_courante) =
Sheets("Funds").Range("a" & cpt_funds)
Sheets("résult").Range("b" & ligne_courante) =
Sheets("Funds").Range("b" & cpt_funds)
Sheets("résult").Range("c" & ligne_courante) =
Sheets("Funds").Range("c" & cpt_funds)
Sheets("résult").Range("d" & ligne_courante) =
Sheets("Funds").Range("d" & cpt_funds)
Sheets("résult").Range("e" & ligne_courante) =
Sheets("Funds").Range("e" & cpt_funds)
Sheets("résult").Range("f" & ligne_courante) =
Sheets("Funds").Range("f" & cpt_funds)
Sheets("résult").Range("g" & ligne_courante) = Tab_pa ys(i)
Sheets("résult").Range("h" & ligne_courante) =
Sheets("media").Range("c" & cpt_media)
Sheets("résult").Range("i" & ligne_courante) =
Sheets("media").Range("d" & cpt_media)
Sheets("résult").Range("j" & ligne_courante) =
Sheets("media").Range("e" & cpt_media)
ligne_courante = ligne_courante + 1
End If

cpt_media = cpt_media + 1

Loop

cpt_media = 2

End If

Next

cpt_funds = cpt_funds + 1

Loop

(pour ceux qui veulent l'integralité du code pour peut etre mieux
comprendre ma manip)
------------------------------------------------------------------- --------­­­­----------------------------------------------------

Sub Macro1()
'

'

Dim Tab_pays(30) As String ' tableau de tous les pays
Dim cpt_funds, cpt_media As Integer
Dim Tab_lettres(27) As String ' tableau des colonnes de G à AG

Tab_lettres(1) = "G"
Tab_lettres(2) = "H"
Tab_lettres(3) = "I"
Tab_lettres(4) = "J"
Tab_lettres(5) = "K"
Tab_lettres(6) = "L"
Tab_lettres(7) = "M"
Tab_lettres(8) = "N"
Tab_lettres(9) = "O"
Tab_lettres(10) = "P"
Tab_lettres(11) = "Q"
Tab_lettres(12) = "R"
Tab_lettres(13) = "S"
Tab_lettres(14) = "T"
Tab_lettres(15) = "U"
Tab_lettres(16) = "V"
Tab_lettres(17) = "W"
Tab_lettres(18) = "X"
Tab_lettres(19) = "Y"
Tab_lettres(20) = "Z"
Tab_lettres(21) = "AA"
Tab_lettres(22) = "AB"
Tab_lettres(23) = "AC"
Tab_lettres(24) = "AD"
Tab_lettres(25) = "AE"
Tab_lettres(26) = "AF"
Tab_lettres(27) = "AG"

' Lecture entête feuille Funds

ISIN = Sheets("Funds").Range("A1").Value
Funds = Sheets("Funds").Range("B1").Value
Subs_Funds = Sheets("Funds").Range("C1").Value
Share_classe = Sheets("Funds").Range("D1").Value
Type_share = Sheets("Funds").Range("E1").Value
launch_date = Sheets("Funds").Range("F1").Value

' remplissage tableau pays

Tab_pays(1) = Sheets("Funds").Range("G1").Value
Tab_pays(2) = Sheets("Funds").Range("H1").Value
Tab_pays(3) = Sheets("Funds").Range("I1").Value
Tab_pays(4) = Sheets("Funds").Range("J1").Value
Tab_pays(5) = Sheets("Funds").Range("K1").Value
Tab_pays(6) = Sheets("Funds").Range("L1").Value
Tab_pays(7) = Sheets("Funds").Range("M1").Value
Tab_pays(8) = Sheets("Funds").Range("N1").Value
Tab_pays(9) = Sheets("Funds").Range("O1").Value
Tab_pays(10) = Sheets("Funds").Range("P1").Value
Tab_pays(11) = Sheets("Funds").Range("Q1").Value
Tab_pays(12) = Sheets("Funds").Range("R1").Value
Tab_pays(13) = Sheets("Funds").Range("S1").Value
Tab_pays(14) = Sheets("Funds").Range("T1").Value
Tab_pays(15) = Sheets("Funds").Range("U1").Value
Tab_pays(16) = Sheets("Funds").Range("V1").Value
Tab_pays(17) = Sheets("Funds").Range("W1").Value
Tab_pays(18) = Sheets("Funds").Range("X1").Value
Tab_pays(19) = Sheets("Funds").Range("Y1").Value
Tab_pays(20) = Sheets("Funds").Range("Z1").Value
Tab_pays(21) = Sheets("Funds").Range("AA1").Value
Tab_pays(22) = Sheets("Funds").Range("AB1").Value
Tab_pays(23) = Sheets("Funds").Range("AC1").Value
Tab_pays(24) = Sheets("Funds").Range("AD1").Value
Tab_pays(25) = Sheets("Funds").Range("AE1").Value
Tab_pays(26) = Sheets("Funds").Range("AF1").Value
Tab_pays(27) = Sheets("Funds").Range("AG1").Value

' Lecture entête feuille Media

Country_pub = Sheets("Media").Range("B1").Value
Media_designa = Sheets("Media").Range("C1").Value
Pub_Share = Sheets("Media").Range("D1").Value
Pub_Type_share = Sheets("Media").Range("E1").Value

' Copie de l'entête dans la feuille résult

Sheets("résult").Range("a1") = ISIN
Sheets("résult").Range("b1") = Funds
Sheets("résult").Range("c1") = Subs_Funds
Sheets("résult").Range("d1") = Share_classe
Sheets("résult").Range("e1") = Type_share
Sheets("résult").Range("f1") = launch_date
Sheets("résult").Range("g1") = Country_pub
Sheets("résult").Range("h1") = Media_designa
Sheets("résult").Range("i1") = Pub_Share
Sheets("résult").Range("j1") = Pub_Type_share

cpt_funds = 2 ' position première ligne utile dans feuille Funds
cpt_media = 2 ' position première ligne utile dans feuille Media
ligne_courante = cpt_funds 'position ligne courante dans feuille
résult

' faire tant que Ax de la feuille Funds n'est pas vide

Do While Sheets("Funds").Range("a" & cpt_funds).Text <> ""

'recherche des médias de chaque pays

For i = 1 To 27
pays_a_tester = Sheets("Funds").Range(Tab_lettres(i) &
cpt_funds).Value

If pays_a_tester = "Oui" Then

' recherche dans feuille Média
' faire tant que Bx de la feuille Media n'est pas vide

Do While Sheets("media").Range("b" & cpt_media).Text <> ""

If Sheets("media").Range("b" & cpt_media).Text = Tab_pays (i)
Then

'and if sheets("media").range("d" & cpt_media).text =
Sheets("Funds").Range("D1").Value

Sheets("résult").Range("a" & ligne_courante) =
Sheets("Funds").Range("a" & cpt_funds)
Sheets("résult").Range("b" & ligne_courante) =
Sheets("Funds").Range("b" & cpt_funds)
Sheets("résult").Range("c" & ligne_courante) =
Sheets("Funds").Range("c" & cpt_funds)
Sheets("résult").Range("d" & ligne_courante) =
Sheets("Funds").Range("d" & cpt_funds)




...

plus de détails »- Masquer le texte des messages précédents -

- Afficher le texte des messages précédents -





Avatar
FFO
Rebonjours à toi

J'ai utilisé la même instruction que toi :

For i = 1 To 27

Qui donc se répète 2 fois dans le code

Il serait donc bon de choisir 2 variables différentes
Je te propose de changer la 2° ainsi :

For j = 1 To 27
pays_a_tester = Sheets("Funds").Range(Tab_lettres(j) &
cpt_funds).Value

If pays_a_tester = "Oui" Then

' recherche dans feuille Média
' faire tant que Bx de la feuille Media n'est pas vide

Do While Sheets("media").Range("b" & cpt_media).Text <> ""
If Sheets("media").Range("b" & cpt_media).Text = Tab_pays(j) and
sheets("media").range("d" & cpt_media).text =
Sheets("Funds").Range("D1").Value Then
Sheets("résult").Range("a" & ligne_courante, "f" & ligne_courante) .Value =
Sheets("Funds").Range("a" & ligne_courante, "f" & ligne_courante) .Value
Sheets("résult").Range("g" & ligne_courante) = Tab_pays(j)
Sheets("résult").Range("h" & ligne_courante, "j" & ligne_courante) .Value =
Sheets("media").Range("c" & cpt_media, "e" & cpt_media) .Value
ligne_courante = ligne_courante + 1
End If

Remplace ce bout de code et réessaie

Concernant les conditions je te propose ceci :

A = Sheets("media").Range("b" & cpt_media).Text
B = Tab_pays(j)
C = sheets("media").range("d" & cpt_media).text
D = Sheets("Funds").Range("D1").Value
Do While Sheets("media").Range("b" & cpt_media).Text <> ""
If Sheets("media").Range("b" & cpt_media).Text = Tab_pays(j) and
sheets("media").range("d" & cpt_media).text =
Sheets("Funds").Range("D1").Value Then

Je décrite en A/B/C/D les variable testées dans les conditions
Rajoute donc les lignes :
A = Sheets("media").Range("b" & cpt_media).Text
B = Tab_pays(j)
C = sheets("media").range("d" & cpt_media).text
D = Sheets("Funds").Range("D1").Value

Avant le Do While

Mets un point d'arret au niveau de Do While (un click sur le bandeau gris en
regard)
Exécute le code
Il doit s'arréter à ce point
A chaque arrêt passes ta souris sur A/B/C/D pour en connaitre les valeurs à
ce stade de l'éxécution
Si toutes les conditions sont remplies aprés avoir activé F5 du clavier
regarde dans le classeur le résultat obtenu
recommence l'opération jusqu'à la fin de l'éxécution

Attention :
si tu souhaites que les 2 conditions soient réunies pour copier, la
commande est :
If Sheets("media").Range("b" & cpt_media).Text = Tab_pays(j) and
sheets("media").range("d" & cpt_media).text =
Sheets("Funds").Range("D1").Value Then
si tu souhaites qu'une conditions ou l'autre soit vraie pour copier, la
commande est :
If Sheets("media").Range("b" & cpt_media).Text = Tab_pays(j) or
sheets("media").range("d" & cpt_media).text =
Sheets("Funds").Range("D1").Value Then

Bien choisir la bonne ligne de commande

Dis moi ce que tu as constaté



Bonjour FFO

Merci pour la cure d'amaigrissement c'est bien plus joli, je vais plus
tard me pencher et en tirer les lecons.

Bon par contre plus rien ne s'affiche dans la feuille result, a croire
que le deuxieme critere avec le "and" passe mal, bizarre

MERCI !!


On 10 août, 10:29, lglux wrote:
Bonjour Daniel,

J'ai pas osé mettre un fichier car j'avais lu la netiquette de ce
forum, certes datée de 2003..

http://cjoint.com/?ikkARtRCiO

sur la feuille result j'ai mis les infos pour lancer la macro:

1. Appuyer sur le bouton en haut a droite
2. remplir les champs
3. input data puis valider
4. resultat dans cette feuille, j'aimerai que la colonne D = colonne I
ou "*"

MERCI !!

On 10 août, 09:53, "Daniel" wrote:



Bonjour.
C'est difficile de se faire une idée, mais, oui, avec des "and", ça doit le
faire. Sinon, le mieux est de télécharger ton classeur surwww.cjoint.comet
de poster l'adresse générée. N'oublie pas de remplacer les éventuelles
données confidentielles
Cordialement.
Daniel
"lglux" a écrit dans le message de news:

Bonsoir a tous,

Malgré la mine d'or présente sur le forum, je ne dois pas utiliser les
bons mots clés car je ne trouve pas la reponse...

J'utilise le vba assez sommairement et j'aimerai developper mes
connaissances surtout que là j'en ai vraiment besoin pour le boulot:

(je vous passe l'etape du formulaire et tout que j'etais pas peu fier
d'avoir mis en place)

Voilà j'aimerai copier une ligne (table "media") suivant plusieurs
critères d'une autre ligne d'une autre worksheet (inséré via le
formulaire) "fonds".

Le choix de la ligne à copier doit se faire en fonction de trois
criteres.

Pour faire simple, j'aimerai la copie de la ligne fonds + la copie de
la ligne media (a la suite sur la meme ligne) sur une troisieme
feuille SI et seulement SI les trois criteres present dans les deux
lignes fonds et media sont égaux.

Pour l'instant ca marche pour le critere pays avec ce code mais je ne
sais pas comment inclure les autres criteres (avec un and? comment
utiliser cela? mon code n'est pas trop lourd?):

For i = 1 To 27
pays_a_tester = Sheets("Funds").Range(Tab_lettres(i) &
cpt_funds).Value

If pays_a_tester = "Oui" Then

' recherche dans feuille Média
' faire tant que Bx de la feuille Media n'est pas vide

Do While Sheets("media").Range("b" & cpt_media).Text <> ""

If Sheets("media").Range("b" & cpt_media).Text = Tab_pays(i)
Then

Sheets("résult").Range("a" & ligne_courante) > > > Sheets("Funds").Range("a" & cpt_funds)
Sheets("résult").Range("b" & ligne_courante) > > > Sheets("Funds").Range("b" & cpt_funds)
Sheets("résult").Range("c" & ligne_courante) > > > Sheets("Funds").Range("c" & cpt_funds)
Sheets("résult").Range("d" & ligne_courante) > > > Sheets("Funds").Range("d" & cpt_funds)
Sheets("résult").Range("e" & ligne_courante) > > > Sheets("Funds").Range("e" & cpt_funds)
Sheets("résult").Range("f" & ligne_courante) > > > Sheets("Funds").Range("f" & cpt_funds)
Sheets("résult").Range("g" & ligne_courante) = Tab_pays(i)
Sheets("résult").Range("h" & ligne_courante) > > > Sheets("media").Range("c" & cpt_media)
Sheets("résult").Range("i" & ligne_courante) > > > Sheets("media").Range("d" & cpt_media)
Sheets("résult").Range("j" & ligne_courante) > > > Sheets("media").Range("e" & cpt_media)
ligne_courante = ligne_courante + 1
End If

cpt_media = cpt_media + 1

Loop

cpt_media = 2

End If

Next

cpt_funds = cpt_funds + 1

Loop

(pour ceux qui veulent l'integralité du code pour peut etre mieux
comprendre ma manip)
---------------------------------------------------------------------------­­----------------------------------------------------

Sub Macro1()
'

'

Dim Tab_pays(30) As String ' tableau de tous les pays
Dim cpt_funds, cpt_media As Integer
Dim Tab_lettres(27) As String ' tableau des colonnes de G à AG

Tab_lettres(1) = "G"
Tab_lettres(2) = "H"
Tab_lettres(3) = "I"
Tab_lettres(4) = "J"
Tab_lettres(5) = "K"
Tab_lettres(6) = "L"
Tab_lettres(7) = "M"
Tab_lettres(8) = "N"
Tab_lettres(9) = "O"
Tab_lettres(10) = "P"
Tab_lettres(11) = "Q"
Tab_lettres(12) = "R"
Tab_lettres(13) = "S"
Tab_lettres(14) = "T"
Tab_lettres(15) = "U"
Tab_lettres(16) = "V"
Tab_lettres(17) = "W"
Tab_lettres(18) = "X"
Tab_lettres(19) = "Y"
Tab_lettres(20) = "Z"
Tab_lettres(21) = "AA"
Tab_lettres(22) = "AB"
Tab_lettres(23) = "AC"
Tab_lettres(24) = "AD"
Tab_lettres(25) = "AE"
Tab_lettres(26) = "AF"
Tab_lettres(27) = "AG"

' Lecture entête feuille Funds

ISIN = Sheets("Funds").Range("A1").Value
Funds = Sheets("Funds").Range("B1").Value
Subs_Funds = Sheets("Funds").Range("C1").Value
Share_classe = Sheets("Funds").Range("D1").Value
Type_share = Sheets("Funds").Range("E1").Value
launch_date = Sheets("Funds").Range("F1").Value

' remplissage tableau pays

Tab_pays(1) = Sheets("Funds").Range("G1").Value
Tab_pays(2) = Sheets("Funds").Range("H1").Value
Tab_pays(3) = Sheets("Funds").Range("I1").Value
Tab_pays(4) = Sheets("Funds").Range("J1").Value
Tab_pays(5) = Sheets("Funds").Range("K1").Value
Tab_pays(6) = Sheets("Funds").Range("L1").Value
Tab_pays(7) = Sheets("Funds").Range("M1").Value
Tab_pays(8) = Sheets("Funds").Range("N1").Value
Tab_pays(9) = Sheets("Funds").Range("O1").Value
Tab_pays(10) = Sheets("Funds").Range("P1").Value
Tab_pays(11) = Sheets("Funds").Range("Q1").Value
Tab_pays(12) = Sheets("Funds").Range("R1").Value
Tab_pays(13) = Sheets("Funds").Range("S1").Value
Tab_pays(14) = Sheets("Funds").Range("T1").Value
Tab_pays(15) = Sheets("Funds").Range("U1").Value
Tab_pays(16) = Sheets("Funds").Range("V1").Value
Tab_pays(17) = Sheets("Funds").Range("W1").Value
Tab_pays(18) = Sheets("Funds").Range("X1").Value
Tab_pays(19) = Sheets("Funds").Range("Y1").Value
Tab_pays(20) = Sheets("Funds").Range("Z1").Value
Tab_pays(21) = Sheets("Funds").Range("AA1").Value
Tab_pays(22) = Sheets("Funds").Range("AB1").Value
Tab_pays(23) = Sheets("Funds").Range("AC1").Value
Tab_pays(24) = Sheets("Funds").Range("AD1").Value
Tab_pays(25) = Sheets("Funds").Range("AE1").Value
Tab_pays(26) = Sheets("Funds").Range("AF1").Value
Tab_pays(27) = Sheets("Funds").Range("AG1").Value

' Lecture entête feuille Media

Country_pub = Sheets("Media").Range("B1").Value
Media_designa = Sheets("Media").Range("C1").Value
Pub_Share = Sheets("Media").Range("D1").Value
Pub_Type_share = Sheets("Media").Range("E1").Value

' Copie de l'entête dans la feuille résult

Sheets("résult").Range("a1") = ISIN
Sheets("résult").Range("b1") = Funds
Sheets("résult").Range("c1") = Subs_Funds
Sheets("résult").Range("d1") = Share_classe
Sheets("résult").Range("e1") = Type_share
Sheets("résult").Range("f1") = launch_date
Sheets("résult").Range("g1") = Country_pub
Sheets("résult").Range("h1") = Media_designa
Sheets("résult").Range("i1") = Pub_Share
Sheets("résult").Range("j1") = Pub_Type_share

cpt_funds = 2 ' position première ligne utile dans feuille Funds
cpt_media = 2 ' position première ligne utile dans feuille Media
ligne_courante = cpt_funds 'position ligne courante dans feuille
résult

' faire tant que Ax de la feuille Funds n'est pas vide

Do While Sheets("Funds").Range("a" & cpt_funds).Text <> ""

'recherche des médias de chaque pays

For i = 1 To 27
pays_a_tester = Sheets("Funds").Range(Tab_lettres(i) &
cpt_funds).Value

If pays_a_tester = "Oui" Then

' recherche dans feuille Média
' faire tant que Bx de la feuille Media n'est pas vide

Do While Sheets("media").Range("b" & cpt_media).Text <> ""

If Sheets("media").Range("b" & cpt_media).Text = Tab_pays(i)
Then

'and if sheets("media").range("d" & cpt_media).text > > > Sheets("Funds").Range("D1").Value

Sheets("résult").Range("a" & ligne_courante) > > > Sheets("Funds").Range("a" & cpt_funds)
Sheets("résult").Range("b" & ligne_courante) > > > Sheets("Funds").Range("b" & cpt_funds)
Sheets("résult").Range("c" & ligne_courante) > > > Sheets("Funds").Range("c" & cpt_funds)
Sheets("résult").Range("d" & ligne_courante) > > > Sheets("Funds").Range("d" & cpt_funds)
Sheets("résult").Range("e" & ligne_courante) > > > Sheets("Funds").Range("e" & cpt_funds)
Sheets("résult").Range("f" & ligne_courante) > > > Sheets("Funds").Range("f" & cpt_funds)
Sheets("résult").Range("g" & ligne_courante) = Tab_pays(i)
Sheets("résult").Range("h" & ligne_courante) > > > Sheets("media").Range("c" & cpt_media)
Sheets("résult").Range("i" & ligne_courante) > > > Sheets("media").Range("d" & cpt_media)
Sheets("résult").Range("j" & ligne_courante) > > > Sheets("media").Range("e" & cpt_media)
ligne_courante = ligne_courante + 1
End If

cpt_media = cpt_media + 1

Loop

cpt_media = 2

End If

Next

cpt_funds = cpt_funds + 1

Loop

'
End Sub- Masquer le texte des messages précédents -


- Afficher le texte des messages précédents -








Avatar
lglux
J'ai ajouté cela et tout marche comme souhaité!!

If Sheets("media").Range("b" & cpt_media).Text = Tab_pays(i) And
Sheets("media").Range("d" & cpt_media).Text =
Sheets("Funds").Range("D" & cpt_funds).Value Or
Sheets("media").Range("d" & cpt_media).Text = "*" Then


j'aimerai bien que les allegement de FFO fonctionne mais en tout cas
ca marche!

merci!


On 10 août, 11:35, lglux wrote:
Merci Daniel,

En fait pour cette condition là, avec les pays, ca marche, mais pas
avec la condition type share class. J'ai enlevé les " " et ca marche
aussi.

On 10 août, 11:25, "Daniel" wrote:



Dans Macro1, remplace :
If pays_a_tester = "True" Then
par
If pays_a_tester = True Then
Ce n'est peut-être pas toute la solution, mais une partie, en tout ca s.
Daniel
"lglux" a écrit dans le message de news:

Bonjour FFO

Merci pour la cure d'amaigrissement c'est bien plus joli, je vais plus
tard me pencher et en tirer les lecons.

Bon par contre plus rien ne s'affiche dans la feuille result, a croire
que le deuxieme critere avec le "and" passe mal, bizarre

MERCI !!

On 10 août, 10:29, lglux wrote:

Bonjour Daniel,

J'ai pas osé mettre un fichier car j'avais lu la netiquette de ce
forum, certes datée de 2003..

http://cjoint.com/?ikkARtRCiO

sur la feuille result j'ai mis les infos pour lancer la macro:

1. Appuyer sur le bouton en haut a droite
2. remplir les champs
3. input data puis valider
4. resultat dans cette feuille, j'aimerai que la colonne D = colonn e I
ou "*"

MERCI !!

On 10 août, 09:53, "Daniel" wrote:

Bonjour.
C'est difficile de se faire une idée, mais, oui, avec des "and", ça doit
le
faire. Sinon, le mieux est de télécharger ton classeur
surwww.cjoint.comet
de poster l'adresse générée. N'oublie pas de remplacer les éventuelles
données confidentielles
Cordialement.
Daniel
"lglux" a écrit dans le message de ne ws:

Bonsoir a tous,

Malgré la mine d'or présente sur le forum, je ne dois pas utili ser les
bons mots clés car je ne trouve pas la reponse...

J'utilise le vba assez sommairement et j'aimerai developper mes
connaissances surtout que là j'en ai vraiment besoin pour le boul ot:

(je vous passe l'etape du formulaire et tout que j'etais pas peu fi er
d'avoir mis en place)

Voilà j'aimerai copier une ligne (table "media") suivant plusieurs
critères d'une autre ligne d'une autre worksheet (inséré via le
formulaire) "fonds".

Le choix de la ligne à copier doit se faire en fonction de trois
criteres.

Pour faire simple, j'aimerai la copie de la ligne fonds + la copie de
la ligne media (a la suite sur la meme ligne) sur une troisieme
feuille SI et seulement SI les trois criteres present dans les deux
lignes fonds et media sont égaux.

Pour l'instant ca marche pour le critere pays avec ce code mais je ne
sais pas comment inclure les autres criteres (avec un and? comment
utiliser cela? mon code n'est pas trop lourd?):

For i = 1 To 27
pays_a_tester = Sheets("Funds").Range(Tab_lettres(i) &
cpt_funds).Value

If pays_a_tester = "Oui" Then

' recherche dans feuille Média
' faire tant que Bx de la feuille Media n'est pas vide

Do While Sheets("media").Range("b" & cpt_media).Text <> ""

If Sheets("media").Range("b" & cpt_media).Text = Tab_pays (i)
Then

Sheets("résult").Range("a" & ligne_courante) =
Sheets("Funds").Range("a" & cpt_funds)
Sheets("résult").Range("b" & ligne_courante) =
Sheets("Funds").Range("b" & cpt_funds)
Sheets("résult").Range("c" & ligne_courante) =
Sheets("Funds").Range("c" & cpt_funds)
Sheets("résult").Range("d" & ligne_courante) =
Sheets("Funds").Range("d" & cpt_funds)
Sheets("résult").Range("e" & ligne_courante) =
Sheets("Funds").Range("e" & cpt_funds)
Sheets("résult").Range("f" & ligne_courante) =
Sheets("Funds").Range("f" & cpt_funds)
Sheets("résult").Range("g" & ligne_courante) = Tab_pa ys(i)
Sheets("résult").Range("h" & ligne_courante) =
Sheets("media").Range("c" & cpt_media)
Sheets("résult").Range("i" & ligne_courante) =
Sheets("media").Range("d" & cpt_media)
Sheets("résult").Range("j" & ligne_courante) =
Sheets("media").Range("e" & cpt_media)
ligne_courante = ligne_courante + 1
End If

cpt_media = cpt_media + 1

Loop

cpt_media = 2

End If

Next

cpt_funds = cpt_funds + 1

Loop

(pour ceux qui veulent l'integralité du code pour peut etre mieux
comprendre ma manip)
------------------------------------------------------------------- --------­­­­----------------------------------------------------

Sub Macro1()
'

'

Dim Tab_pays(30) As String ' tableau de tous les pays
Dim cpt_funds, cpt_media As Integer
Dim Tab_lettres(27) As String ' tableau des colonnes de G à AG

Tab_lettres(1) = "G"
Tab_lettres(2) = "H"
Tab_lettres(3) = "I"
Tab_lettres(4) = "J"
Tab_lettres(5) = "K"
Tab_lettres(6) = "L"
Tab_lettres(7) = "M"
Tab_lettres(8) = "N"
Tab_lettres(9) = "O"
Tab_lettres(10) = "P"
Tab_lettres(11) = "Q"
Tab_lettres(12) = "R"
Tab_lettres(13) = "S"
Tab_lettres(14) = "T"
Tab_lettres(15) = "U"
Tab_lettres(16) = "V"
Tab_lettres(17) = "W"
Tab_lettres(18) = "X"
Tab_lettres(19) = "Y"
Tab_lettres(20) = "Z"
Tab_lettres(21) = "AA"
Tab_lettres(22) = "AB"
Tab_lettres(23) = "AC"
Tab_lettres(24) = "AD"
Tab_lettres(25) = "AE"
Tab_lettres(26) = "AF"
Tab_lettres(27) = "AG"

' Lecture entête feuille Funds

ISIN = Sheets("Funds").Range("A1").Value
Funds = Sheets("Funds").Range("B1").Value
Subs_Funds = Sheets("Funds").Range("C1").Value
Share_classe = Sheets("Funds").Range("D1").Value
Type_share = Sheets("Funds").Range("E1").Value
launch_date = Sheets("Funds").Range("F1").Value

' remplissage tableau pays

Tab_pays(1) = Sheets("Funds").Range("G1").Value
Tab_pays(2) = Sheets("Funds").Range("H1").Value
Tab_pays(3) = Sheets("Funds").Range("I1").Value
Tab_pays(4) = Sheets("Funds").Range("J1").Value
Tab_pays(5) = Sheets("Funds").Range("K1").Value
Tab_pays(6) = Sheets("Funds").Range("L1").Value
Tab_pays(7) = Sheets("Funds").Range("M1").Value
Tab_pays(8) = Sheets("Funds").Range("N1").Value
Tab_pays(9) = Sheets("Funds").Range("O1").Value
Tab_pays(10) = Sheets("Funds").Range("P1").Value
Tab_pays(11) = Sheets("Funds").Range("Q1").Value
Tab_pays(12) = Sheets("Funds").Range("R1").Value
Tab_pays(13) = Sheets("Funds").Range("S1").Value
Tab_pays(14) = Sheets("Funds").Range("T1").Value
Tab_pays(15) = Sheets("Funds").Range("U1").Value
Tab_pays(16) = Sheets("Funds").Range("V1").Value
Tab_pays(17) = Sheets("Funds").Range("W1").Value
Tab_pays(18) = Sheets("Funds").Range("X1").Value
Tab_pays(19) = Sheets("Funds").Range("Y1").Value
Tab_pays(20) = Sheets("Funds").Range("Z1").Value
Tab_pays(21) = Sheets("Funds").Range("AA1").Value
Tab_pays(22) = Sheets("Funds").Range("AB1").Value
Tab_pays(23) = Sheets("Funds").Range("AC1").Value
Tab_pays(24) = Sheets("Funds").Range("AD1").Value
Tab_pays(25) = Sheets("Funds").Range("AE1").Value
Tab_pays(26) = Sheets("Funds").Range("AF1").Value
Tab_pays(27) = Sheets("Funds").Range("AG1").Value

' Lecture entête feuille Media

Country_pub = Sheets("Media").Range("B1").Value
Media_designa = Sheets("Media").Range("C1").Value
Pub_Share = Sheets("Media").Range("D1").Value
Pub_Type_share = Sheets("Media").Range("E1").Value

' Copie de l'entête dans la feuille résult

Sheets("résult").Range("a1") = ISIN
Sheets("résult").Range("b1") = Funds
Sheets("résult").Range("c1") = Subs_Funds
Sheets("résult").Range("d1") = Share_classe
Sheets("résult").Range("e1") = Type_share
Sheets("résult").Range("f1") = launch_date
Sheets("résult").Range("g1") = Country_pub
Sheets("résult").Range("h1") = Media_designa
Sheets("résult").Range("i1") = Pub_Share
Sheets("résult").Range("j1") = Pub_Type_share

cpt_funds = 2 ' position première ligne utile dans feuille Funds
cpt_media = 2 ' position première ligne utile dans feuille Media
ligne_courante = cpt_funds 'position ligne courante dans feuille
résult

' faire tant que Ax de la feuille Funds n'est pas vide

Do While Sheets("Funds").Range("a" & cpt_funds).Text <> ""

'recherche des médias de chaque pays

For i = 1 To 27
pays_a_tester = Sheets("Funds").Range(Tab_lettres(i) &
cpt_funds).Value

If pays_a_tester = "Oui" Then

' recherche dans feuille Média
' faire tant que Bx de la feuille Media n'est pas vide

Do While Sheets("media").Range("b" & cpt_media).Text <> ""

If Sheets("media").Range("b" & cpt_media).Text = Tab_pays (i)
Then

'and if sheets("media").range("d" & cpt_media).text =
Sheets("Funds").Range("D1").Value

Sheets("résult").Range("a" & ligne_courante) =
Sheets("Funds").Range("a" & cpt_funds)
Sheets("résult").Range("b" & ligne_courante) =
Sheets("Funds").Range("b" & cpt_funds)
Sheets("résult").Range("c" & ligne_courante) =
Sheets("Funds").Range("c" & cpt_funds)
Sheets("résult").Range("d" & ligne_courante) =
Sheets("Funds").Range("d" & cpt_funds)




...

plus de détails »- Masquer le texte des messages précédents -

- Afficher le texte des messages précédents -





Avatar
lglux
En effet j'ai mal imbriqué le "or" qui courcircuite la premiere la
premiere condition if.... mais le "and" marche.

Je vais essayer ce que tu me dis là:
"
Attention :
si tu souhaites que les 2 conditions soient réunies pour copier, la
commande est :
If Sheets("media").Range("b" & cpt_media).Text = Tab_pays(j) and
sheets("media").range("d" & cpt_media).text =
Sheets("Funds").Range("D1").Value Then
si tu souhaites qu'une conditions ou l'autre soit vraie pour copier,
la
commande est :
If Sheets("media").Range("b" & cpt_media).Text = Tab_pays(j) or
sheets("media").range("d" & cpt_media).text =
Sheets("Funds").Range("D1").Value Then
"

Merci!




On 10 août, 11:59, lglux wrote:
J'ai ajouté cela et tout marche comme souhaité!!

If Sheets("media").Range("b" & cpt_media).Text = Tab_pays(i) And
Sheets("media").Range("d" & cpt_media).Text =
Sheets("Funds").Range("D" & cpt_funds).Value Or
Sheets("media").Range("d" & cpt_media).Text = "*" Then

j'aimerai bien que les allegement de FFO fonctionne mais en tout cas
ca marche!

merci!

On 10 août, 11:35, lglux wrote:



Merci Daniel,

En fait pour cette condition là, avec les pays, ca marche, mais pas
avec la condition type share class. J'ai enlevé les " " et ca marche
aussi.

On 10 août, 11:25, "Daniel" wrote:

Dans Macro1, remplace :
If pays_a_tester = "True" Then
par
If pays_a_tester = True Then
Ce n'est peut-être pas toute la solution, mais une partie, en tout cas.
Daniel
"lglux" a écrit dans le message de news:

Bonjour FFO

Merci pour la cure d'amaigrissement c'est bien plus joli, je vais plus
tard me pencher et en tirer les lecons.

Bon par contre plus rien ne s'affiche dans la feuille result, a croire
que le deuxieme critere avec le "and" passe mal, bizarre

MERCI !!

On 10 août, 10:29, lglux wrote:

Bonjour Daniel,

J'ai pas osé mettre un fichier car j'avais lu la netiquette de ce
forum, certes datée de 2003..

http://cjoint.com/?ikkARtRCiO

sur la feuille result j'ai mis les infos pour lancer la macro:

1. Appuyer sur le bouton en haut a droite
2. remplir les champs
3. input data puis valider
4. resultat dans cette feuille, j'aimerai que la colonne D = colo nne I
ou "*"

MERCI !!

On 10 août, 09:53, "Daniel" wrote:

Bonjour.
C'est difficile de se faire une idée, mais, oui, avec des "and" , ça doit
le
faire. Sinon, le mieux est de télécharger ton classeur
surwww.cjoint.comet
de poster l'adresse générée. N'oublie pas de remplacer les éventuelles
données confidentielles
Cordialement.
Daniel
"lglux" a écrit dans le message de news:

Bonsoir a tous,

Malgré la mine d'or présente sur le forum, je ne dois pas uti liser les
bons mots clés car je ne trouve pas la reponse...

J'utilise le vba assez sommairement et j'aimerai developper mes
connaissances surtout que là j'en ai vraiment besoin pour le bo ulot:

(je vous passe l'etape du formulaire et tout que j'etais pas peu fier
d'avoir mis en place)

Voilà j'aimerai copier une ligne (table "media") suivant plusie urs
critères d'une autre ligne d'une autre worksheet (inséré vi a le
formulaire) "fonds".

Le choix de la ligne à copier doit se faire en fonction de trois
criteres.

Pour faire simple, j'aimerai la copie de la ligne fonds + la copi e de
la ligne media (a la suite sur la meme ligne) sur une troisieme
feuille SI et seulement SI les trois criteres present dans les de ux
lignes fonds et media sont égaux.

Pour l'instant ca marche pour le critere pays avec ce code mais j e ne
sais pas comment inclure les autres criteres (avec un and? comment
utiliser cela? mon code n'est pas trop lourd?):

For i = 1 To 27
pays_a_tester = Sheets("Funds").Range(Tab_lettres(i) &
cpt_funds).Value

If pays_a_tester = "Oui" Then

' recherche dans feuille Média
' faire tant que Bx de la feuille Media n'est pas vide

Do While Sheets("media").Range("b" & cpt_media).Text <> ""

If Sheets("media").Range("b" & cpt_media).Text = Tab_pa ys(i)
Then

Sheets("résult").Range("a" & ligne_courante) =
Sheets("Funds").Range("a" & cpt_funds)
Sheets("résult").Range("b" & ligne_courante) =
Sheets("Funds").Range("b" & cpt_funds)
Sheets("résult").Range("c" & ligne_courante) =
Sheets("Funds").Range("c" & cpt_funds)
Sheets("résult").Range("d" & ligne_courante) =
Sheets("Funds").Range("d" & cpt_funds)
Sheets("résult").Range("e" & ligne_courante) =
Sheets("Funds").Range("e" & cpt_funds)
Sheets("résult").Range("f" & ligne_courante) =
Sheets("Funds").Range("f" & cpt_funds)
Sheets("résult").Range("g" & ligne_courante) = Tab_ pays(i)
Sheets("résult").Range("h" & ligne_courante) =
Sheets("media").Range("c" & cpt_media)
Sheets("résult").Range("i" & ligne_courante) =
Sheets("media").Range("d" & cpt_media)
Sheets("résult").Range("j" & ligne_courante) =
Sheets("media").Range("e" & cpt_media)
ligne_courante = ligne_courante + 1
End If

cpt_media = cpt_media + 1

Loop

cpt_media = 2

End If

Next

cpt_funds = cpt_funds + 1

Loop

(pour ceux qui veulent l'integralité du code pour peut etre mie ux
comprendre ma manip)
----------------------------------------------------------------- ----------­­­­­-------------------------------------------------- --

Sub Macro1()
'

'

Dim Tab_pays(30) As String ' tableau de tous les pays
Dim cpt_funds, cpt_media As Integer
Dim Tab_lettres(27) As String ' tableau des colonnes de G à AG

Tab_lettres(1) = "G"
Tab_lettres(2) = "H"
Tab_lettres(3) = "I"
Tab_lettres(4) = "J"
Tab_lettres(5) = "K"
Tab_lettres(6) = "L"
Tab_lettres(7) = "M"
Tab_lettres(8) = "N"
Tab_lettres(9) = "O"
Tab_lettres(10) = "P"
Tab_lettres(11) = "Q"
Tab_lettres(12) = "R"
Tab_lettres(13) = "S"
Tab_lettres(14) = "T"
Tab_lettres(15) = "U"
Tab_lettres(16) = "V"
Tab_lettres(17) = "W"
Tab_lettres(18) = "X"
Tab_lettres(19) = "Y"
Tab_lettres(20) = "Z"
Tab_lettres(21) = "AA"
Tab_lettres(22) = "AB"
Tab_lettres(23) = "AC"
Tab_lettres(24) = "AD"
Tab_lettres(25) = "AE"
Tab_lettres(26) = "AF"
Tab_lettres(27) = "AG"

' Lecture entête feuille Funds

ISIN = Sheets("Funds").Range("A1").Value
Funds = Sheets("Funds").Range("B1").Value
Subs_Funds = Sheets("Funds").Range("C1").Value
Share_classe = Sheets("Funds").Range("D1").Value
Type_share = Sheets("Funds").Range("E1").Value
launch_date = Sheets("Funds").Range("F1").Value

' remplissage tableau pays

Tab_pays(1) = Sheets("Funds").Range("G1").Value
Tab_pays(2) = Sheets("Funds").Range("H1").Value
Tab_pays(3) = Sheets("Funds").Range("I1").Value
Tab_pays(4) = Sheets("Funds").Range("J1").Value
Tab_pays(5) = Sheets("Funds").Range("K1").Value
Tab_pays(6) = Sheets("Funds").Range("L1").Value
Tab_pays(7) = Sheets("Funds").Range("M1").Value
Tab_pays(8) = Sheets("Funds").Range("N1").Value
Tab_pays(9) = Sheets("Funds").Range("O1").Value
Tab_pays(10) = Sheets("Funds").Range("P1").Value
Tab_pays(11) = Sheets("Funds").Range("Q1").Value
Tab_pays(12) = Sheets("Funds").Range("R1").Value
Tab_pays(13) = Sheets("Funds").Range("S1").Value
Tab_pays(14) = Sheets("Funds").Range("T1").Value
Tab_pays(15) = Sheets("Funds").Range("U1").Value
Tab_pays(16) = Sheets("Funds").Range("V1").Value
Tab_pays(17) = Sheets("Funds").Range("W1").Value
Tab_pays(18) = Sheets("Funds").Range("X1").Value
Tab_pays(19) = Sheets("Funds").Range("Y1").Value
Tab_pays(20) = Sheets("Funds").Range("Z1").Value
Tab_pays(21) = Sheets("Funds").Range("AA1").Value
Tab_pays(22) = Sheets("Funds").Range("AB1").Value
Tab_pays(23) = Sheets("Funds").Range("AC1").Value
Tab_pays(24) = Sheets("Funds").Range("AD1").Value
Tab_pays(25) = Sheets("Funds").Range("AE1").Value
Tab_pays(26) = Sheets("Funds").Range("AF1").Value
Tab_pays(27) = Sheets("Funds").Range("AG1").Value

' Lecture entête feuille Media

Country_pub = Sheets("Media").Range("B1").Value
Media_designa = Sheets("Media").Range("C1").Value
Pub_Share = Sheets("Media").Range("D1").Value
Pub_Type_share = Sheets("Media").Range("E1").Value

' Copie de l'entête dans la feuille résult

Sheets("résult").Range("a1") = ISIN
Sheets("résult").Range("b1") = Funds
Sheets("résult").Range("c1") = Subs_Funds
Sheets("résult").Range("d1") = Share_classe
Sheets("résult").Range("e1") = Type_share
Sheets("résult").Range("f1") = launch_date
Sheets("résult").Range("g1") = Country_pub
Sheets("résult").Range("h1") = Media_designa
Sheets("résult").Range("i1") = Pub_Share
Sheets("résult").Range("j1") = Pub_Type_share

cpt_funds = 2 ' position première ligne utile dans feuille Fu nds
cpt_media = 2 ' position première ligne utile dans feuille Me dia
ligne_courante = cpt_funds 'position ligne courante dans feuille
résult

' faire tant que Ax de la feuille Funds n'est pas vide

Do While Sheets("Funds").Range("a" & cpt_funds).Text <> ""

'recherche des médias de chaque pays

For i = 1 To 27
pays_a_tester = Sheets("Funds").Range(Tab_lettres(i) &
cpt_funds).Value

If pays_a_tester = "Oui" Then





...

plus de détails »- Masquer le texte des messages précédents -

- Afficher le texte des messages précédents -






Avatar
lglux
Quand j'ai 3 conditions: il faut que la premiere soit vraie, ET puis
la deuxieme OU la troisieme, comment tu t'y prends?

le IF .... AND..... OR....THEN ne marche pas car le OR va l'emporter
sur le premier IF et AND.....










On 10 août, 11:56, FFO wrote:
Rebonjours à toi

J'ai utilisé la même instruction que toi :

For i = 1 To 27

Qui donc se répète 2 fois dans le code

Il serait donc bon de choisir 2 variables différentes
Je te propose de changer la 2° ainsi :

For j = 1 To 27
pays_a_tester = Sheets("Funds").Range(Tab_lettres(j) &
cpt_funds).Value

If pays_a_tester = "Oui" Then

' recherche dans feuille Média
' faire tant que Bx de la feuille Media n'est pas vide

Do While Sheets("media").Range("b" & cpt_media).Text <> ""
If Sheets("media").Range("b" & cpt_media).Text = Tab_pays(j) and
sheets("media").range("d" & cpt_media).text =
Sheets("Funds").Range("D1").Value Then
Sheets("résult").Range("a" & ligne_courante, "f" & ligne_courante) .Val ue =
Sheets("Funds").Range("a" & ligne_courante, "f" & ligne_courante) .Value
Sheets("résult").Range("g" & ligne_courante) = Tab_pays(j)
Sheets("résult").Range("h" & ligne_courante, "j" & ligne_courante) .Val ue =
Sheets("media").Range("c" & cpt_media, "e" & cpt_media) .Value
ligne_courante = ligne_courante + 1
End If

Remplace ce bout de code et réessaie

Concernant les conditions je te propose ceci :

A = Sheets("media").Range("b" & cpt_media).Text
B = Tab_pays(j)
C = sheets("media").range("d" & cpt_media).text
D = Sheets("Funds").Range("D1").Value
Do While Sheets("media").Range("b" & cpt_media).Text <> ""
If Sheets("media").Range("b" & cpt_media).Text = Tab_pays(j) and
sheets("media").range("d" & cpt_media).text =
Sheets("Funds").Range("D1").Value Then

Je décrite en A/B/C/D les variable testées dans les conditions
Rajoute donc les lignes :
A = Sheets("media").Range("b" & cpt_media).Text
B = Tab_pays(j)
C = sheets("media").range("d" & cpt_media).text
D = Sheets("Funds").Range("D1").Value

Avant le Do While

Mets un point d'arret au niveau de Do While (un click sur le bandeau gris en
regard)
Exécute le code
Il doit s'arréter à ce point
A chaque arrêt passes ta souris sur A/B/C/D pour en connaitre les valeu rs à
ce stade de l'éxécution
Si toutes les conditions sont remplies aprés avoir activé F5 du clavi er
regarde dans le classeur le résultat obtenu
recommence l'opération jusqu'à la fin de l'éxécution

Attention :
si tu souhaites que les 2 conditions soient réunies pour copier, la
commande est :
If Sheets("media").Range("b" & cpt_media).Text = Tab_pays(j) and
sheets("media").range("d" & cpt_media).text =
Sheets("Funds").Range("D1").Value Then
si tu souhaites qu'une conditions ou l'autre soit vraie pour copier, la
commande est :
If Sheets("media").Range("b" & cpt_media).Text = Tab_pays(j) or
sheets("media").range("d" & cpt_media).text =
Sheets("Funds").Range("D1").Value Then

Bien choisir la bonne ligne de commande

Dis moi ce que tu as constaté




Bonjour FFO

Merci pour la cure d'amaigrissement c'est bien plus joli, je vais plus
tard me pencher et en tirer les lecons.

Bon par contre plus rien ne s'affiche dans la feuille result, a croire
que le deuxieme critere avec le "and" passe mal, bizarre

MERCI !!

On 10 août, 10:29, lglux wrote:
Bonjour Daniel,

J'ai pas osé mettre un fichier car j'avais lu la netiquette de ce
forum, certes datée de 2003..

http://cjoint.com/?ikkARtRCiO

sur la feuille result j'ai mis les infos pour lancer la macro:

1. Appuyer sur le bouton en haut a droite
2. remplir les champs
3. input data puis valider
4. resultat dans cette feuille, j'aimerai que la colonne D = colonn e I
ou "*"

MERCI !!

On 10 août, 09:53, "Daniel" wrote:

Bonjour.
C'est difficile de se faire une idée, mais, oui, avec des "and", ça doit le
faire. Sinon, le mieux est de télécharger ton classeur surwww.c joint.comet
de poster l'adresse générée. N'oublie pas de remplacer les éventuelles
données confidentielles
Cordialement.
Daniel
"lglux" a écrit dans le message de ne ws:

Bonsoir a tous,

Malgré la mine d'or présente sur le forum, je ne dois pas utili ser les
bons mots clés car je ne trouve pas la reponse...

J'utilise le vba assez sommairement et j'aimerai developper mes
connaissances surtout que là j'en ai vraiment besoin pour le boul ot:

(je vous passe l'etape du formulaire et tout que j'etais pas peu fi er
d'avoir mis en place)

Voilà j'aimerai copier une ligne (table "media") suivant plusieurs
critères d'une autre ligne d'une autre worksheet (inséré via le
formulaire) "fonds".

Le choix de la ligne à copier doit se faire en fonction de trois
criteres.

Pour faire simple, j'aimerai la copie de la ligne fonds + la copie de
la ligne media (a la suite sur la meme ligne) sur une troisieme
feuille SI et seulement SI les trois criteres present dans les deux
lignes fonds et media sont égaux.

Pour l'instant ca marche pour le critere pays avec ce code mais je ne
sais pas comment inclure les autres criteres (avec un and? comment
utiliser cela? mon code n'est pas trop lourd?):

For i = 1 To 27
pays_a_tester = Sheets("Funds").Range(Tab_lettres(i) &
cpt_funds).Value

If pays_a_tester = "Oui" Then

' recherche dans feuille Média
' faire tant que Bx de la feuille Media n'est pas vide

Do While Sheets("media").Range("b" & cpt_media).Text <> ""

If Sheets("media").Range("b" & cpt_media).Text = Tab_pays (i)
Then

Sheets("résult").Range("a" & ligne_courante) =
Sheets("Funds").Range("a" & cpt_funds)
Sheets("résult").Range("b" & ligne_courante) =
Sheets("Funds").Range("b" & cpt_funds)
Sheets("résult").Range("c" & ligne_courante) =
Sheets("Funds").Range("c" & cpt_funds)
Sheets("résult").Range("d" & ligne_courante) =
Sheets("Funds").Range("d" & cpt_funds)
Sheets("résult").Range("e" & ligne_courante) =
Sheets("Funds").Range("e" & cpt_funds)
Sheets("résult").Range("f" & ligne_courante) =
Sheets("Funds").Range("f" & cpt_funds)
Sheets("résult").Range("g" & ligne_courante) = Tab_pa ys(i)
Sheets("résult").Range("h" & ligne_courante) =
Sheets("media").Range("c" & cpt_media)
Sheets("résult").Range("i" & ligne_courante) =
Sheets("media").Range("d" & cpt_media)
Sheets("résult").Range("j" & ligne_courante) =
Sheets("media").Range("e" & cpt_media)
ligne_courante = ligne_courante + 1
End If

cpt_media = cpt_media + 1

Loop

cpt_media = 2

End If

Next

cpt_funds = cpt_funds + 1

Loop

(pour ceux qui veulent l'integralité du code pour peut etre mieux
comprendre ma manip)
------------------------------------------------------------------- --------­­­----------------------------------------------------

Sub Macro1()
'

'

Dim Tab_pays(30) As String ' tableau de tous les pays
Dim cpt_funds, cpt_media As Integer
Dim Tab_lettres(27) As String ' tableau des colonnes de G à AG

Tab_lettres(1) = "G"
Tab_lettres(2) = "H"
Tab_lettres(3) = "I"
Tab_lettres(4) = "J"
Tab_lettres(5) = "K"
Tab_lettres(6) = "L"
Tab_lettres(7) = "M"
Tab_lettres(8) = "N"
Tab_lettres(9) = "O"
Tab_lettres(10) = "P"
Tab_lettres(11) = "Q"
Tab_lettres(12) = "R"
Tab_lettres(13) = "S"
Tab_lettres(14) = "T"
Tab_lettres(15) = "U"
Tab_lettres(16) = "V"
Tab_lettres(17) = "W"
Tab_lettres(18) = "X"
Tab_lettres(19) = "Y"
Tab_lettres(20) = "Z"
Tab_lettres(21) = "AA"
Tab_lettres(22) = "AB"
Tab_lettres(23) = "AC"
Tab_lettres(24) = "AD"
Tab_lettres(25) = "AE"
Tab_lettres(26) = "AF"
Tab_lettres(27) = "AG"

' Lecture entête feuille Funds

ISIN = Sheets("Funds").Range("A1").Value
Funds = Sheets("Funds").Range("B1").Value
Subs_Funds = Sheets("Funds").Range("C1").Value
Share_classe = Sheets("Funds").Range("D1").Value
Type_share = Sheets("Funds").Range("E1").Value
launch_date = Sheets("Funds").Range("F1").Value

' remplissage tableau pays

Tab_pays(1) = Sheets("Funds").Range("G1").Value
Tab_pays(2) = Sheets("Funds").Range("H1").Value
Tab_pays(3) = Sheets("Funds").Range("I1").Value
Tab_pays(4) = Sheets("Funds").Range("J1").Value
Tab_pays(5) = Sheets("Funds").Range("K1").Value
Tab_pays(6) = Sheets("Funds").Range("L1").Value
Tab_pays(7) = Sheets("Funds").Range("M1").Value
Tab_pays(8) = Sheets("Funds").Range("N1").Value
Tab_pays(9) = Sheets("Funds").Range("O1").Value
Tab_pays(10) = Sheets("Funds").Range("P1").Value
Tab_pays(11) = Sheets("Funds").Range("Q1").Value
Tab_pays(12) = Sheets("Funds").Range("R1").Value
Tab_pays(13) = Sheets("Funds").Range("S1").Value
Tab_pays(14) = Sheets("Funds").Range("T1").Value
Tab_pays(15) = Sheets("Funds").Range("U1").Value
Tab_pays(16) = Sheets("Funds").Range("V1").Value
Tab_pays(17) = Sheets("Funds").Range("W1").Value
Tab_pays(18) = Sheets("Funds").Range("X1").Value
Tab_pays(19) = Sheets("Funds").Range("Y1").Value
Tab_pays(20) = Sheets("Funds").Range("Z1").Value
Tab_pays(21) = Sheets("Funds").Range("AA1").Value
Tab_pays(22) = Sheets("Funds").Range("AB1").Value
Tab_pays(23) = Sheets("Funds").Range("AC1").Value
Tab_pays(24) = Sheets("Funds").Range("AD1").Value
Tab_pays(25) = Sheets("Funds").Range("AE1").Value




...

plus de détails »- Masquer le texte des messages précédents -

- Afficher le texte des messages précédents -





Avatar
Daniel
Mets des parenthèses pour grouper les conditions :
if condition1 and (condition2 or condition3) then
tu mets les parenthèses selon ce que tu souhaites.
Daniel
"lglux" a écrit dans le message de news:

Quand j'ai 3 conditions: il faut que la premiere soit vraie, ET puis
la deuxieme OU la troisieme, comment tu t'y prends?

le IF .... AND..... OR....THEN ne marche pas car le OR va l'emporter
sur le premier IF et AND.....










On 10 août, 11:56, FFO wrote:
Rebonjours à toi

J'ai utilisé la même instruction que toi :

For i = 1 To 27

Qui donc se répète 2 fois dans le code

Il serait donc bon de choisir 2 variables différentes
Je te propose de changer la 2° ainsi :

For j = 1 To 27
pays_a_tester = Sheets("Funds").Range(Tab_lettres(j) &
cpt_funds).Value

If pays_a_tester = "Oui" Then

' recherche dans feuille Média
' faire tant que Bx de la feuille Media n'est pas vide

Do While Sheets("media").Range("b" & cpt_media).Text <> ""
If Sheets("media").Range("b" & cpt_media).Text = Tab_pays(j) and
sheets("media").range("d" & cpt_media).text > Sheets("Funds").Range("D1").Value Then
Sheets("résult").Range("a" & ligne_courante, "f" & ligne_courante) .Value
Sheets("Funds").Range("a" & ligne_courante, "f" & ligne_courante) .Value
Sheets("résult").Range("g" & ligne_courante) = Tab_pays(j)

Sheets("résult").Range("h" & ligne_courante, "j" & ligne_courante) .Value
Sheets("media").Range("c" & cpt_media, "e" & cpt_media) .Value
ligne_courante = ligne_courante + 1

End If

Remplace ce bout de code et réessaie

Concernant les conditions je te propose ceci :

A = Sheets("media").Range("b" & cpt_media).Text
B = Tab_pays(j)
C = sheets("media").range("d" & cpt_media).text
D = Sheets("Funds").Range("D1").Value
Do While Sheets("media").Range("b" & cpt_media).Text <> ""
If Sheets("media").Range("b" & cpt_media).Text = Tab_pays(j) and
sheets("media").range("d" & cpt_media).text > Sheets("Funds").Range("D1").Value Then

Je décrite en A/B/C/D les variable testées dans les conditions
Rajoute donc les lignes :
A = Sheets("media").Range("b" & cpt_media).Text
B = Tab_pays(j)
C = sheets("media").range("d" & cpt_media).text
D = Sheets("Funds").Range("D1").Value

Avant le Do While

Mets un point d'arret au niveau de Do While (un click sur le bandeau gris
en
regard)
Exécute le code
Il doit s'arréter à ce point
A chaque arrêt passes ta souris sur A/B/C/D pour en connaitre les valeurs
à
ce stade de l'éxécution
Si toutes les conditions sont remplies aprés avoir activé F5 du clavier
regarde dans le classeur le résultat obtenu
recommence l'opération jusqu'à la fin de l'éxécution

Attention :
si tu souhaites que les 2 conditions soient réunies pour copier, la
commande est :
If Sheets("media").Range("b" & cpt_media).Text = Tab_pays(j) and
sheets("media").range("d" & cpt_media).text > Sheets("Funds").Range("D1").Value Then
si tu souhaites qu'une conditions ou l'autre soit vraie pour copier, la
commande est :
If Sheets("media").Range("b" & cpt_media).Text = Tab_pays(j) or
sheets("media").range("d" & cpt_media).text > Sheets("Funds").Range("D1").Value Then

Bien choisir la bonne ligne de commande

Dis moi ce que tu as constaté




Bonjour FFO

Merci pour la cure d'amaigrissement c'est bien plus joli, je vais plus
tard me pencher et en tirer les lecons.

Bon par contre plus rien ne s'affiche dans la feuille result, a croire
que le deuxieme critere avec le "and" passe mal, bizarre

MERCI !!

On 10 août, 10:29, lglux wrote:
Bonjour Daniel,

J'ai pas osé mettre un fichier car j'avais lu la netiquette de ce
forum, certes datée de 2003..

http://cjoint.com/?ikkARtRCiO

sur la feuille result j'ai mis les infos pour lancer la macro:

1. Appuyer sur le bouton en haut a droite
2. remplir les champs
3. input data puis valider
4. resultat dans cette feuille, j'aimerai que la colonne D = colonne I
ou "*"

MERCI !!

On 10 août, 09:53, "Daniel" wrote:

Bonjour.
C'est difficile de se faire une idée, mais, oui, avec des "and", ça
doit le
faire. Sinon, le mieux est de télécharger ton classeur
surwww.cjoint.comet
de poster l'adresse générée. N'oublie pas de remplacer les
éventuelles
données confidentielles
Cordialement.
Daniel
"lglux" a écrit dans le message de news:

Bonsoir a tous,

Malgré la mine d'or présente sur le forum, je ne dois pas utiliser
les
bons mots clés car je ne trouve pas la reponse...

J'utilise le vba assez sommairement et j'aimerai developper mes
connaissances surtout que là j'en ai vraiment besoin pour le boulot:

(je vous passe l'etape du formulaire et tout que j'etais pas peu
fier
d'avoir mis en place)

Voilà j'aimerai copier une ligne (table "media") suivant plusieurs
critères d'une autre ligne d'une autre worksheet (inséré via le
formulaire) "fonds".

Le choix de la ligne à copier doit se faire en fonction de trois
criteres.

Pour faire simple, j'aimerai la copie de la ligne fonds + la copie
de
la ligne media (a la suite sur la meme ligne) sur une troisieme
feuille SI et seulement SI les trois criteres present dans les deux
lignes fonds et media sont égaux.

Pour l'instant ca marche pour le critere pays avec ce code mais je
ne
sais pas comment inclure les autres criteres (avec un and? comment
utiliser cela? mon code n'est pas trop lourd?):

For i = 1 To 27
pays_a_tester = Sheets("Funds").Range(Tab_lettres(i) &
cpt_funds).Value

If pays_a_tester = "Oui" Then

' recherche dans feuille Média
' faire tant que Bx de la feuille Media n'est pas vide

Do While Sheets("media").Range("b" & cpt_media).Text <> ""

If Sheets("media").Range("b" & cpt_media).Text = Tab_pays(i)
Then

Sheets("résult").Range("a" & ligne_courante) > > > > Sheets("Funds").Range("a" & cpt_funds)
Sheets("résult").Range("b" & ligne_courante) > > > > Sheets("Funds").Range("b" & cpt_funds)
Sheets("résult").Range("c" & ligne_courante) > > > > Sheets("Funds").Range("c" & cpt_funds)
Sheets("résult").Range("d" & ligne_courante) > > > > Sheets("Funds").Range("d" & cpt_funds)
Sheets("résult").Range("e" & ligne_courante) > > > > Sheets("Funds").Range("e" & cpt_funds)
Sheets("résult").Range("f" & ligne_courante) > > > > Sheets("Funds").Range("f" & cpt_funds)
Sheets("résult").Range("g" & ligne_courante) = Tab_pays(i)
Sheets("résult").Range("h" & ligne_courante) > > > > Sheets("media").Range("c" & cpt_media)
Sheets("résult").Range("i" & ligne_courante) > > > > Sheets("media").Range("d" & cpt_media)
Sheets("résult").Range("j" & ligne_courante) > > > > Sheets("media").Range("e" & cpt_media)
ligne_courante = ligne_courante + 1
End If

cpt_media = cpt_media + 1

Loop

cpt_media = 2

End If

Next

cpt_funds = cpt_funds + 1

Loop

(pour ceux qui veulent l'integralité du code pour peut etre mieux
comprendre ma manip)
---------------------------------------------------------------------------­­­----------------------------------------------------

Sub Macro1()
'

'

Dim Tab_pays(30) As String ' tableau de tous les pays
Dim cpt_funds, cpt_media As Integer
Dim Tab_lettres(27) As String ' tableau des colonnes de G à AG

Tab_lettres(1) = "G"
Tab_lettres(2) = "H"
Tab_lettres(3) = "I"
Tab_lettres(4) = "J"
Tab_lettres(5) = "K"
Tab_lettres(6) = "L"
Tab_lettres(7) = "M"
Tab_lettres(8) = "N"
Tab_lettres(9) = "O"
Tab_lettres(10) = "P"
Tab_lettres(11) = "Q"
Tab_lettres(12) = "R"
Tab_lettres(13) = "S"
Tab_lettres(14) = "T"
Tab_lettres(15) = "U"
Tab_lettres(16) = "V"
Tab_lettres(17) = "W"
Tab_lettres(18) = "X"
Tab_lettres(19) = "Y"
Tab_lettres(20) = "Z"
Tab_lettres(21) = "AA"
Tab_lettres(22) = "AB"
Tab_lettres(23) = "AC"
Tab_lettres(24) = "AD"
Tab_lettres(25) = "AE"
Tab_lettres(26) = "AF"
Tab_lettres(27) = "AG"

' Lecture entête feuille Funds

ISIN = Sheets("Funds").Range("A1").Value
Funds = Sheets("Funds").Range("B1").Value
Subs_Funds = Sheets("Funds").Range("C1").Value
Share_classe = Sheets("Funds").Range("D1").Value
Type_share = Sheets("Funds").Range("E1").Value
launch_date = Sheets("Funds").Range("F1").Value

' remplissage tableau pays

Tab_pays(1) = Sheets("Funds").Range("G1").Value
Tab_pays(2) = Sheets("Funds").Range("H1").Value
Tab_pays(3) = Sheets("Funds").Range("I1").Value
Tab_pays(4) = Sheets("Funds").Range("J1").Value
Tab_pays(5) = Sheets("Funds").Range("K1").Value
Tab_pays(6) = Sheets("Funds").Range("L1").Value
Tab_pays(7) = Sheets("Funds").Range("M1").Value
Tab_pays(8) = Sheets("Funds").Range("N1").Value
Tab_pays(9) = Sheets("Funds").Range("O1").Value
Tab_pays(10) = Sheets("Funds").Range("P1").Value
Tab_pays(11) = Sheets("Funds").Range("Q1").Value
Tab_pays(12) = Sheets("Funds").Range("R1").Value
Tab_pays(13) = Sheets("Funds").Range("S1").Value
Tab_pays(14) = Sheets("Funds").Range("T1").Value
Tab_pays(15) = Sheets("Funds").Range("U1").Value
Tab_pays(16) = Sheets("Funds").Range("V1").Value
Tab_pays(17) = Sheets("Funds").Range("W1").Value
Tab_pays(18) = Sheets("Funds").Range("X1").Value
Tab_pays(19) = Sheets("Funds").Range("Y1").Value
Tab_pays(20) = Sheets("Funds").Range("Z1").Value
Tab_pays(21) = Sheets("Funds").Range("AA1").Value
Tab_pays(22) = Sheets("Funds").Range("AB1").Value
Tab_pays(23) = Sheets("Funds").Range("AC1").Value
Tab_pays(24) = Sheets("Funds").Range("AD1").Value
Tab_pays(25) = Sheets("Funds").Range("AE1").Value




...

plus de détails »- Masquer le texte des messages précédents -

- Afficher le texte des messages précédents -





Avatar
FFO
Rebonjour à toi

A la solution de Daniel je te propose une autre possibilité

If Condition 1 Then
If condition 2 or condition 3 then
Conséquence(s)
End If
End If

Toujour bon à connaître


Quand j'ai 3 conditions: il faut que la premiere soit vraie, ET puis
la deuxieme OU la troisieme, comment tu t'y prends?

le IF .... AND..... OR....THEN ne marche pas car le OR va l'emporter
sur le premier IF et AND.....










On 10 août, 11:56, FFO wrote:
Rebonjours à toi

J'ai utilisé la même instruction que toi :

For i = 1 To 27

Qui donc se répète 2 fois dans le code

Il serait donc bon de choisir 2 variables différentes
Je te propose de changer la 2° ainsi :

For j = 1 To 27
pays_a_tester = Sheets("Funds").Range(Tab_lettres(j) &
cpt_funds).Value

If pays_a_tester = "Oui" Then

' recherche dans feuille Média
' faire tant que Bx de la feuille Media n'est pas vide

Do While Sheets("media").Range("b" & cpt_media).Text <> ""
If Sheets("media").Range("b" & cpt_media).Text = Tab_pays(j) and
sheets("media").range("d" & cpt_media).text > > Sheets("Funds").Range("D1").Value Then
Sheets("résult").Range("a" & ligne_courante, "f" & ligne_courante) .Value > > Sheets("Funds").Range("a" & ligne_courante, "f" & ligne_courante) .Value
Sheets("résult").Range("g" & ligne_courante) = Tab_pays(j)
Sheets("résult").Range("h" & ligne_courante, "j" & ligne_courante) .Value > > Sheets("media").Range("c" & cpt_media, "e" & cpt_media) .Value
ligne_courante = ligne_courante + 1
End If

Remplace ce bout de code et réessaie

Concernant les conditions je te propose ceci :

A = Sheets("media").Range("b" & cpt_media).Text
B = Tab_pays(j)
C = sheets("media").range("d" & cpt_media).text
D = Sheets("Funds").Range("D1").Value
Do While Sheets("media").Range("b" & cpt_media).Text <> ""
If Sheets("media").Range("b" & cpt_media).Text = Tab_pays(j) and
sheets("media").range("d" & cpt_media).text > > Sheets("Funds").Range("D1").Value Then

Je décrite en A/B/C/D les variable testées dans les conditions
Rajoute donc les lignes :
A = Sheets("media").Range("b" & cpt_media).Text
B = Tab_pays(j)
C = sheets("media").range("d" & cpt_media).text
D = Sheets("Funds").Range("D1").Value

Avant le Do While

Mets un point d'arret au niveau de Do While (un click sur le bandeau gris en
regard)
Exécute le code
Il doit s'arréter à ce point
A chaque arrêt passes ta souris sur A/B/C/D pour en connaitre les valeurs à
ce stade de l'éxécution
Si toutes les conditions sont remplies aprés avoir activé F5 du clavier
regarde dans le classeur le résultat obtenu
recommence l'opération jusqu'à la fin de l'éxécution

Attention :
si tu souhaites que les 2 conditions soient réunies pour copier, la
commande est :
If Sheets("media").Range("b" & cpt_media).Text = Tab_pays(j) and
sheets("media").range("d" & cpt_media).text > > Sheets("Funds").Range("D1").Value Then
si tu souhaites qu'une conditions ou l'autre soit vraie pour copier, la
commande est :
If Sheets("media").Range("b" & cpt_media).Text = Tab_pays(j) or
sheets("media").range("d" & cpt_media).text > > Sheets("Funds").Range("D1").Value Then

Bien choisir la bonne ligne de commande

Dis moi ce que tu as constaté




Bonjour FFO

Merci pour la cure d'amaigrissement c'est bien plus joli, je vais plus
tard me pencher et en tirer les lecons.

Bon par contre plus rien ne s'affiche dans la feuille result, a croire
que le deuxieme critere avec le "and" passe mal, bizarre

MERCI !!

On 10 août, 10:29, lglux wrote:
Bonjour Daniel,

J'ai pas osé mettre un fichier car j'avais lu la netiquette de ce
forum, certes datée de 2003..

http://cjoint.com/?ikkARtRCiO

sur la feuille result j'ai mis les infos pour lancer la macro:

1. Appuyer sur le bouton en haut a droite
2. remplir les champs
3. input data puis valider
4. resultat dans cette feuille, j'aimerai que la colonne D = colonne I
ou "*"

MERCI !!

On 10 août, 09:53, "Daniel" wrote:

Bonjour.
C'est difficile de se faire une idée, mais, oui, avec des "and", ça doit le
faire. Sinon, le mieux est de télécharger ton classeur surwww.cjoint.comet
de poster l'adresse générée. N'oublie pas de remplacer les éventuelles
données confidentielles
Cordialement.
Daniel
"lglux" a écrit dans le message de news:

Bonsoir a tous,

Malgré la mine d'or présente sur le forum, je ne dois pas utiliser les
bons mots clés car je ne trouve pas la reponse...

J'utilise le vba assez sommairement et j'aimerai developper mes
connaissances surtout que là j'en ai vraiment besoin pour le boulot:

(je vous passe l'etape du formulaire et tout que j'etais pas peu fier
d'avoir mis en place)

Voilà j'aimerai copier une ligne (table "media") suivant plusieurs
critères d'une autre ligne d'une autre worksheet (inséré via le
formulaire) "fonds".

Le choix de la ligne à copier doit se faire en fonction de trois
criteres.

Pour faire simple, j'aimerai la copie de la ligne fonds + la copie de
la ligne media (a la suite sur la meme ligne) sur une troisieme
feuille SI et seulement SI les trois criteres present dans les deux
lignes fonds et media sont égaux.

Pour l'instant ca marche pour le critere pays avec ce code mais je ne
sais pas comment inclure les autres criteres (avec un and? comment
utiliser cela? mon code n'est pas trop lourd?):

For i = 1 To 27
pays_a_tester = Sheets("Funds").Range(Tab_lettres(i) &
cpt_funds).Value

If pays_a_tester = "Oui" Then

' recherche dans feuille Média
' faire tant que Bx de la feuille Media n'est pas vide

Do While Sheets("media").Range("b" & cpt_media).Text <> ""

If Sheets("media").Range("b" & cpt_media).Text = Tab_pays(i)
Then

Sheets("résult").Range("a" & ligne_courante) > > > > > Sheets("Funds").Range("a" & cpt_funds)
Sheets("résult").Range("b" & ligne_courante) > > > > > Sheets("Funds").Range("b" & cpt_funds)
Sheets("résult").Range("c" & ligne_courante) > > > > > Sheets("Funds").Range("c" & cpt_funds)
Sheets("résult").Range("d" & ligne_courante) > > > > > Sheets("Funds").Range("d" & cpt_funds)
Sheets("résult").Range("e" & ligne_courante) > > > > > Sheets("Funds").Range("e" & cpt_funds)
Sheets("résult").Range("f" & ligne_courante) > > > > > Sheets("Funds").Range("f" & cpt_funds)
Sheets("résult").Range("g" & ligne_courante) = Tab_pays(i)
Sheets("résult").Range("h" & ligne_courante) > > > > > Sheets("media").Range("c" & cpt_media)
Sheets("résult").Range("i" & ligne_courante) > > > > > Sheets("media").Range("d" & cpt_media)
Sheets("résult").Range("j" & ligne_courante) > > > > > Sheets("media").Range("e" & cpt_media)
ligne_courante = ligne_courante + 1
End If

cpt_media = cpt_media + 1

Loop

cpt_media = 2

End If

Next

cpt_funds = cpt_funds + 1

Loop

(pour ceux qui veulent l'integralité du code pour peut etre mieux
comprendre ma manip)
---------------------------------------------------------------------------­­­----------------------------------------------------

Sub Macro1()
'

'

Dim Tab_pays(30) As String ' tableau de tous les pays
Dim cpt_funds, cpt_media As Integer
Dim Tab_lettres(27) As String ' tableau des colonnes de G à AG

Tab_lettres(1) = "G"
Tab_lettres(2) = "H"
Tab_lettres(3) = "I"
Tab_lettres(4) = "J"
Tab_lettres(5) = "K"
Tab_lettres(6) = "L"
Tab_lettres(7) = "M"
Tab_lettres(8) = "N"
Tab_lettres(9) = "O"
Tab_lettres(10) = "P"
Tab_lettres(11) = "Q"
Tab_lettres(12) = "R"
Tab_lettres(13) = "S"
Tab_lettres(14) = "T"
Tab_lettres(15) = "U"
Tab_lettres(16) = "V"
Tab_lettres(17) = "W"
Tab_lettres(18) = "X"
Tab_lettres(19) = "Y"
Tab_lettres(20) = "Z"
Tab_lettres(21) = "AA"
Tab_lettres(22) = "AB"
Tab_lettres(23) = "AC"
Tab_lettres(24) = "AD"
Tab_lettres(25) = "AE"
Tab_lettres(26) = "AF"
Tab_lettres(27) = "AG"

' Lecture entête feuille Funds

ISIN = Sheets("Funds").Range("A1").Value
Funds = Sheets("Funds").Range("B1").Value
Subs_Funds = Sheets("Funds").Range("C1").Value
Share_classe = Sheets("Funds").Range("D1").Value
Type_share = Sheets("Funds").Range("E1").Value
launch_date = Sheets("Funds").Range("F1").Value

' remplissage tableau pays

Tab_pays(1) = Sheets("Funds").Range("G1").Value
Tab_pays(2) = Sheets("Funds").Range("H1").Value
Tab_pays(3) = Sheets("Funds").Range("I1").Value
Tab_pays(4) = Sheets("Funds").Range("J1").Value
Tab_pays(5) = Sheets("Funds").Range("K1").Value
Tab_pays(6) = Sheets("Funds").Range("L1").Value
Tab_pays(7) = Sheets("Funds").Range("M1").Value
Tab_pays(8) = Sheets("Funds").Range("N1").Value
Tab_pays(9) = Sheets("Funds").Range("O1").Value
Tab_pays(10) = Sheets("Funds").Range("P1").Value
Tab_pays(11) = Sheets("Funds").Range("Q1").Value
Tab_pays(12) = Sheets("Funds").Range("R1").Value
Tab_pays(13) = Sheets("Funds").Range("S1").Value
Tab_pays(14) = Sheets("Funds").Range("T1").Value
Tab_pays(15) = Sheets("Funds").Range("U1").Value
Tab_pays(16) = Sheets("Funds").Range("V1").Value
Tab_pays(17) = Sheets("Funds").Range("W1").Value
Tab_pays(18) = Sheets("Funds").Range("X1").Value
Tab_pays(19) = Sheets("Funds").Range("Y1").Value
Tab_pays(20) = Sheets("Funds").Range("Z1").Value
Tab_pays(21) = Sheets("Funds").Range("AA1").Value
Tab_pays(22) = Sheets("Funds").Range("AB1").Value
Tab_pays(23) = Sheets("Funds").Range("AC1").Value
Tab_pays(24) = Sheets("Funds").Range("AD1").Value
Tab_pays(25) = Sheets("Funds").Range("AE1").Value




...

plus de détails »- Masquer le texte des messages précédents -

- Afficher le texte des messages précédents -








Avatar
lglux
Bizarrement la solution de daniel marche, et bien que la tienne semble
tres logique, elle ne marche pas (aucun results affiché)

merci encore a vous, la je pense que deja je suis sur de bonnes bases,
mes questions ont été resolues, merci encore!

On 10 août, 13:00, FFO wrote:
Rebonjour à toi

A la solution de Daniel je te propose une autre possibilité

If Condition 1 Then
If condition 2 or condition 3 then
Conséquence(s)
End If
End If

Toujour bon à connaître




Quand j'ai 3 conditions: il faut que la premiere soit vraie, ET puis
la deuxieme OU la troisieme, comment tu t'y prends?

le IF .... AND..... OR....THEN ne marche pas car le OR va l'emporter
sur le premier IF et AND.....

On 10 août, 11:56, FFO wrote:
Rebonjours à toi

J'ai utilisé la même instruction que toi :

For i = 1 To 27

Qui donc se répète 2 fois dans le code

Il serait donc bon de choisir 2 variables différentes
Je te propose de changer la 2° ainsi :

For j = 1 To 27
pays_a_tester = Sheets("Funds").Range(Tab_lettres(j) &
cpt_funds).Value

If pays_a_tester = "Oui" Then

' recherche dans feuille Média
' faire tant que Bx de la feuille Media n'est pas vide

Do While Sheets("media").Range("b" & cpt_media).Text <> ""
If Sheets("media").Range("b" & cpt_media).Text = Tab_pays(j) and
sheets("media").range("d" & cpt_media).text =
Sheets("Funds").Range("D1").Value Then
Sheets("résult").Range("a" & ligne_courante, "f" & ligne_courante) .Value =
Sheets("Funds").Range("a" & ligne_courante, "f" & ligne_courante) .Va lue
Sheets("résult").Range("g" & ligne_courante) = Tab_pays(j)
Sheets("résult").Range("h" & ligne_courante, "j" & ligne_courante) .Value =
Sheets("media").Range("c" & cpt_media, "e" & cpt_media) .Value
ligne_courante = ligne_courante + 1
End If

Remplace ce bout de code et réessaie

Concernant les conditions je te propose ceci :

A = Sheets("media").Range("b" & cpt_media).Text
B = Tab_pays(j)
C = sheets("media").range("d" & cpt_media).text
D = Sheets("Funds").Range("D1").Value
Do While Sheets("media").Range("b" & cpt_media).Text <> ""
If Sheets("media").Range("b" & cpt_media).Text = Tab_pays(j) and
sheets("media").range("d" & cpt_media).text =
Sheets("Funds").Range("D1").Value Then

Je décrite en A/B/C/D les variable testées dans les conditions
Rajoute donc les lignes :
A = Sheets("media").Range("b" & cpt_media).Text
B = Tab_pays(j)
C = sheets("media").range("d" & cpt_media).text
D = Sheets("Funds").Range("D1").Value

Avant le Do While

Mets un point d'arret au niveau de Do While (un click sur le bandeau gris en
regard)
Exécute le code
Il doit s'arréter à ce point
A chaque arrêt passes ta souris sur A/B/C/D pour en connaitre les v aleurs à
ce stade de l'éxécution
Si toutes les conditions sont remplies aprés avoir activé F5 du c lavier
regarde dans le classeur le résultat obtenu
recommence l'opération jusqu'à la fin de l'éxécution

Attention :
si tu souhaites que les 2 conditions soient réunies pour copier, la
commande est :
If Sheets("media").Range("b" & cpt_media).Text = Tab_pays(j) and
sheets("media").range("d" & cpt_media).text =
Sheets("Funds").Range("D1").Value Then
si tu souhaites qu'une conditions ou l'autre soit vraie pour copier, la
commande est :
If Sheets("media").Range("b" & cpt_media).Text = Tab_pays(j) or
sheets("media").range("d" & cpt_media).text =
Sheets("Funds").Range("D1").Value Then

Bien choisir la bonne ligne de commande

Dis moi ce que tu as constaté




Bonjour FFO

Merci pour la cure d'amaigrissement c'est bien plus joli, je vais p lus
tard me pencher et en tirer les lecons.

Bon par contre plus rien ne s'affiche dans la feuille result, a cro ire
que le deuxieme critere avec le "and" passe mal, bizarre

MERCI !!

On 10 août, 10:29, lglux wrote:
Bonjour Daniel,

J'ai pas osé mettre un fichier car j'avais lu la netiquette de ce
forum, certes datée de 2003..

http://cjoint.com/?ikkARtRCiO

sur la feuille result j'ai mis les infos pour lancer la macro:

1. Appuyer sur le bouton en haut a droite
2. remplir les champs
3. input data puis valider
4. resultat dans cette feuille, j'aimerai que la colonne D = co lonne I
ou "*"

MERCI !!

On 10 août, 09:53, "Daniel" wrote:

Bonjour.
C'est difficile de se faire une idée, mais, oui, avec des "an d", ça doit le
faire. Sinon, le mieux est de télécharger ton classeur surw ww.cjoint.comet
de poster l'adresse générée. N'oublie pas de remplacer le s éventuelles
données confidentielles
Cordialement.
Daniel
"lglux" a écrit dans le message d e news:

Bonsoir a tous,

Malgré la mine d'or présente sur le forum, je ne dois pas u tiliser les
bons mots clés car je ne trouve pas la reponse...

J'utilise le vba assez sommairement et j'aimerai developper mes
connaissances surtout que là j'en ai vraiment besoin pour le boulot:

(je vous passe l'etape du formulaire et tout que j'etais pas pe u fier
d'avoir mis en place)

Voilà j'aimerai copier une ligne (table "media") suivant plus ieurs
critères d'une autre ligne d'une autre worksheet (inséré via le
formulaire) "fonds".

Le choix de la ligne à copier doit se faire en fonction de tr ois
criteres.

Pour faire simple, j'aimerai la copie de la ligne fonds + la co pie de
la ligne media (a la suite sur la meme ligne) sur une troisieme
feuille SI et seulement SI les trois criteres present dans les deux
lignes fonds et media sont égaux.

Pour l'instant ca marche pour le critere pays avec ce code mais je ne
sais pas comment inclure les autres criteres (avec un and? comm ent
utiliser cela? mon code n'est pas trop lourd?):

For i = 1 To 27
pays_a_tester = Sheets("Funds").Range(Tab_lettres(i) &
cpt_funds).Value

If pays_a_tester = "Oui" Then

' recherche dans feuille Média
' faire tant que Bx de la feuille Media n'est pas vide

Do While Sheets("media").Range("b" & cpt_media).Text <> ""

If Sheets("media").Range("b" & cpt_media).Text = Tab_ pays(i)
Then

Sheets("résult").Range("a" & ligne_courante) =
Sheets("Funds").Range("a" & cpt_funds)
Sheets("résult").Range("b" & ligne_courante) =
Sheets("Funds").Range("b" & cpt_funds)
Sheets("résult").Range("c" & ligne_courante) =
Sheets("Funds").Range("c" & cpt_funds)
Sheets("résult").Range("d" & ligne_courante) =
Sheets("Funds").Range("d" & cpt_funds)
Sheets("résult").Range("e" & ligne_courante) =
Sheets("Funds").Range("e" & cpt_funds)
Sheets("résult").Range("f" & ligne_courante) =
Sheets("Funds").Range("f" & cpt_funds)
Sheets("résult").Range("g" & ligne_courante) = Ta b_pays(i)
Sheets("résult").Range("h" & ligne_courante) =
Sheets("media").Range("c" & cpt_media)
Sheets("résult").Range("i" & ligne_courante) =
Sheets("media").Range("d" & cpt_media)
Sheets("résult").Range("j" & ligne_courante) =
Sheets("media").Range("e" & cpt_media)
ligne_courante = ligne_courante + 1
End If

cpt_media = cpt_media + 1

Loop

cpt_media = 2

End If

Next

cpt_funds = cpt_funds + 1

Loop

(pour ceux qui veulent l'integralité du code pour peut etre m ieux
comprendre ma manip)
--------------------------------------------------------------- ------------­­­­----------------------------------------------------

Sub Macro1()
'

'

Dim Tab_pays(30) As String ' tableau de tous les pays
Dim cpt_funds, cpt_media As Integer
Dim Tab_lettres(27) As String ' tableau des colonnes de G à AG

Tab_lettres(1) = "G"
Tab_lettres(2) = "H"
Tab_lettres(3) = "I"
Tab_lettres(4) = "J"
Tab_lettres(5) = "K"
Tab_lettres(6) = "L"
Tab_lettres(7) = "M"
Tab_lettres(8) = "N"
Tab_lettres(9) = "O"
Tab_lettres(10) = "P"
Tab_lettres(11) = "Q"
Tab_lettres(12) = "R"
Tab_lettres(13) = "S"
Tab_lettres(14) = "T"
Tab_lettres(15) = "U"
Tab_lettres(16) = "V"
Tab_lettres(17) = "W"
Tab_lettres(18) = "X"
Tab_lettres(19) = "Y"
Tab_lettres(20) = "Z"
Tab_lettres(21) = "AA"
Tab_lettres(22) = "AB"
Tab_lettres(23) = "AC"
Tab_lettres(24) = "AD"
Tab_lettres(25) = "AE"
Tab_lettres(26) = "AF"
Tab_lettres(27) = "AG"

' Lecture entête feuille Funds

ISIN = Sheets("Funds").Range("A1").Value
Funds = Sheets("Funds").Range("B1").Value
Subs_Funds = Sheets("Funds").Range("C1").Value
Share_classe = Sheets("Funds").Range("D1").Value
Type_share = Sheets("Funds").Range("E1").Value
launch_date = Sheets("Funds").Range("F1").Value

' remplissage tableau pays

Tab_pays(1) =






...

plus de détails »- Masquer le texte des messages précédents -

- Afficher le texte des messages précédents -







Avatar
FFO
Rebonjour à toi

Escuses moi d'insister mais j'aimerai voir les lignes qui ne marches pas
avec ma solution telles que tu les as écrites pour en cerner l'origine
Toutes mes configurations avec ce type d'approche n'ont jamais posé une
quelconque difficulté

Merci d'avance


Bizarrement la solution de daniel marche, et bien que la tienne semble
tres logique, elle ne marche pas (aucun results affiché)

merci encore a vous, la je pense que deja je suis sur de bonnes bases,
mes questions ont été resolues, merci encore!

On 10 août, 13:00, FFO wrote:
Rebonjour à toi

A la solution de Daniel je te propose une autre possibilité

If Condition 1 Then
If condition 2 or condition 3 then
Conséquence(s)
End If
End If

Toujour bon à connaître




Quand j'ai 3 conditions: il faut que la premiere soit vraie, ET puis
la deuxieme OU la troisieme, comment tu t'y prends?

le IF .... AND..... OR....THEN ne marche pas car le OR va l'emporter
sur le premier IF et AND.....

On 10 août, 11:56, FFO wrote:
Rebonjours à toi

J'ai utilisé la même instruction que toi :

For i = 1 To 27

Qui donc se répète 2 fois dans le code

Il serait donc bon de choisir 2 variables différentes
Je te propose de changer la 2° ainsi :

For j = 1 To 27
pays_a_tester = Sheets("Funds").Range(Tab_lettres(j) &
cpt_funds).Value

If pays_a_tester = "Oui" Then

' recherche dans feuille Média
' faire tant que Bx de la feuille Media n'est pas vide

Do While Sheets("media").Range("b" & cpt_media).Text <> ""
If Sheets("media").Range("b" & cpt_media).Text = Tab_pays(j) and
sheets("media").range("d" & cpt_media).text > > > > Sheets("Funds").Range("D1").Value Then
Sheets("résult").Range("a" & ligne_courante, "f" & ligne_courante) ..Value > > > > Sheets("Funds").Range("a" & ligne_courante, "f" & ligne_courante) .Value
Sheets("résult").Range("g" & ligne_courante) = Tab_pays(j)
Sheets("résult").Range("h" & ligne_courante, "j" & ligne_courante) ..Value > > > > Sheets("media").Range("c" & cpt_media, "e" & cpt_media) .Value
ligne_courante = ligne_courante + 1
End If

Remplace ce bout de code et réessaie

Concernant les conditions je te propose ceci :

A = Sheets("media").Range("b" & cpt_media).Text
B = Tab_pays(j)
C = sheets("media").range("d" & cpt_media).text
D = Sheets("Funds").Range("D1").Value
Do While Sheets("media").Range("b" & cpt_media).Text <> ""
If Sheets("media").Range("b" & cpt_media).Text = Tab_pays(j) and
sheets("media").range("d" & cpt_media).text > > > > Sheets("Funds").Range("D1").Value Then

Je décrite en A/B/C/D les variable testées dans les conditions
Rajoute donc les lignes :
A = Sheets("media").Range("b" & cpt_media).Text
B = Tab_pays(j)
C = sheets("media").range("d" & cpt_media).text
D = Sheets("Funds").Range("D1").Value

Avant le Do While

Mets un point d'arret au niveau de Do While (un click sur le bandeau gris en
regard)
Exécute le code
Il doit s'arréter à ce point
A chaque arrêt passes ta souris sur A/B/C/D pour en connaitre les valeurs à
ce stade de l'éxécution
Si toutes les conditions sont remplies aprés avoir activé F5 du clavier
regarde dans le classeur le résultat obtenu
recommence l'opération jusqu'à la fin de l'éxécution

Attention :
si tu souhaites que les 2 conditions soient réunies pour copier, la
commande est :
If Sheets("media").Range("b" & cpt_media).Text = Tab_pays(j) and
sheets("media").range("d" & cpt_media).text > > > > Sheets("Funds").Range("D1").Value Then
si tu souhaites qu'une conditions ou l'autre soit vraie pour copier, la
commande est :
If Sheets("media").Range("b" & cpt_media).Text = Tab_pays(j) or
sheets("media").range("d" & cpt_media).text > > > > Sheets("Funds").Range("D1").Value Then

Bien choisir la bonne ligne de commande

Dis moi ce que tu as constaté




Bonjour FFO

Merci pour la cure d'amaigrissement c'est bien plus joli, je vais plus
tard me pencher et en tirer les lecons.

Bon par contre plus rien ne s'affiche dans la feuille result, a croire
que le deuxieme critere avec le "and" passe mal, bizarre

MERCI !!

On 10 août, 10:29, lglux wrote:
Bonjour Daniel,

J'ai pas osé mettre un fichier car j'avais lu la netiquette de ce
forum, certes datée de 2003..

http://cjoint.com/?ikkARtRCiO

sur la feuille result j'ai mis les infos pour lancer la macro:

1. Appuyer sur le bouton en haut a droite
2. remplir les champs
3. input data puis valider
4. resultat dans cette feuille, j'aimerai que la colonne D = colonne I
ou "*"

MERCI !!

On 10 août, 09:53, "Daniel" wrote:

Bonjour.
C'est difficile de se faire une idée, mais, oui, avec des "and", ça doit le
faire. Sinon, le mieux est de télécharger ton classeur surwww.cjoint.comet
de poster l'adresse générée. N'oublie pas de remplacer les éventuelles
données confidentielles
Cordialement.
Daniel
"lglux" a écrit dans le message de news:

Bonsoir a tous,

Malgré la mine d'or présente sur le forum, je ne dois pas utiliser les
bons mots clés car je ne trouve pas la reponse...

J'utilise le vba assez sommairement et j'aimerai developper mes
connaissances surtout que là j'en ai vraiment besoin pour le boulot:

(je vous passe l'etape du formulaire et tout que j'etais pas peu fier
d'avoir mis en place)

Voilà j'aimerai copier une ligne (table "media") suivant plusieurs
critères d'une autre ligne d'une autre worksheet (inséré via le
formulaire) "fonds".

Le choix de la ligne à copier doit se faire en fonction de trois
criteres.

Pour faire simple, j'aimerai la copie de la ligne fonds + la copie de
la ligne media (a la suite sur la meme ligne) sur une troisieme
feuille SI et seulement SI les trois criteres present dans les deux
lignes fonds et media sont égaux.

Pour l'instant ca marche pour le critere pays avec ce code mais je ne
sais pas comment inclure les autres criteres (avec un and? comment
utiliser cela? mon code n'est pas trop lourd?):

For i = 1 To 27
pays_a_tester = Sheets("Funds").Range(Tab_lettres(i) &
cpt_funds).Value

If pays_a_tester = "Oui" Then

' recherche dans feuille Média
' faire tant que Bx de la feuille Media n'est pas vide

Do While Sheets("media").Range("b" & cpt_media).Text <> ""

If Sheets("media").Range("b" & cpt_media).Text = Tab_pays(i)
Then

Sheets("résult").Range("a" & ligne_courante) > > > > > > > Sheets("Funds").Range("a" & cpt_funds)
Sheets("résult").Range("b" & ligne_courante) > > > > > > > Sheets("Funds").Range("b" & cpt_funds)
Sheets("résult").Range("c" & ligne_courante) > > > > > > > Sheets("Funds").Range("c" & cpt_funds)
Sheets("résult").Range("d" & ligne_courante) > > > > > > > Sheets("Funds").Range("d" & cpt_funds)
Sheets("résult").Range("e" & ligne_courante) > > > > > > > Sheets("Funds").Range("e" & cpt_funds)
Sheets("résult").Range("f" & ligne_courante) > > > > > > > Sheets("Funds").Range("f" & cpt_funds)
Sheets("résult").Range("g" & ligne_courante) = Tab_pays(i)
Sheets("résult").Range("h" & ligne_courante) > > > > > > > Sheets("media").Range("c" & cpt_media)
Sheets("résult").Range("i" & ligne_courante) > > > > > > > Sheets("media").Range("d" & cpt_media)
Sheets("résult").Range("j" & ligne_courante) > > > > > > > Sheets("media").Range("e" & cpt_media)
ligne_courante = ligne_courante + 1
End If

cpt_media = cpt_media + 1

Loop

cpt_media = 2

End If

Next

cpt_funds = cpt_funds + 1

Loop

(pour ceux qui veulent l'integralité du code pour peut etre mieux
comprendre ma manip)
---------------------------------------------------------------------------­­­­----------------------------------------------------

Sub Macro1()
'

'

Dim Tab_pays(30) As String ' tableau de tous les pays
Dim cpt_funds, cpt_media As Integer
Dim Tab_lettres(27) As String ' tableau des colonnes de G à AG

Tab_lettres(1) = "G"
Tab_lettres(2) = "H"
Tab_lettres(3) = "I"
Tab_lettres(4) = "J"
Tab_lettres(5) = "K"
Tab_lettres(6) = "L"
Tab_lettres(7) = "M"
Tab_lettres(8) = "N"
Tab_lettres(9) = "O"
Tab_lettres(10) = "P"
Tab_lettres(11) = "Q"
Tab_lettres(12) = "R"
Tab_lettres(13) = "S"
Tab_lettres(14) = "T"
Tab_lettres(15) = "U"
Tab_lettres(16) = "V"
Tab_lettres(17) = "W"
Tab_lettres(18) = "X"
Tab_lettres(19) = "Y"
Tab_lettres(20) = "Z"
Tab_lettres(21) = "AA"
Tab_lettres(22) = "AB"
Tab_lettres(23) = "AC"
Tab_lettres(24) = "AD"
Tab_lettres(25) = "AE"
Tab_lettres(26) = "AF"
Tab_lettres(27) = "AG"

' Lecture entête feuille Funds

ISIN = Sheets("Funds").Range("A1").Value
Funds = Sheets("Funds").Range("B1").Value
Subs_Funds = Sheets("Funds").Range("C1").Value
Share_classe = Sheets("Funds").Range("D1").Value
Type_share = Sheets("Funds").Range("E1").Value
launch_date = Sheets("Funds").Range("F1").Value

' remplissage tableau pays

Tab_pays(1) > >
...






plus de détails »- Masquer le texte des messages précédents -

- Afficher le texte des messages précédents -












Avatar
lglux
FFO:

en fait ya pas d'erreurs dans ton code quand je l'execute.

seulement j'obtiens concretement en feuille "results" une fois les
infos sur le fonds (prises de la feuille fonds) sur la premiere ligne,
mais pas sur les lignes d'en dessous (ligne 3 vide de A à F, alors
qu'elle devrait contenir les memes infos que la ligne 1 a propos du
fonds), car le but c'est d'avoir autant de fois les infos sur ces
lignes que d'infos créee par lignes pour les colonnes G, H, I, J, qui
concerne les media

je sais pas si je suis clair



On 10 août, 14:00, FFO wrote:
Rebonjour à toi

Escuses moi d'insister mais j'aimerai voir les lignes qui ne marches pas
avec ma solution telles que tu les as écrites pour en cerner l'origine
Toutes mes configurations avec ce type d'approche n'ont jamais posé une
quelconque difficulté

Merci d'avance




Bizarrement la solution de daniel marche, et bien que la tienne semble
tres logique, elle ne marche pas (aucun results affiché)

merci encore a vous, la je pense que deja je suis sur de bonnes bases,
mes questions ont été resolues, merci encore!

On 10 août, 13:00, FFO wrote:
Rebonjour à toi

A la solution de Daniel je te propose une autre possibilité

If Condition 1 Then
If condition 2 or condition 3 then
Conséquence(s)
End If
End If

Toujour bon à connaître




Quand j'ai 3 conditions: il faut que la premiere soit vraie, ET puis
la deuxieme OU la troisieme, comment tu t'y prends?

le IF .... AND..... OR....THEN ne marche pas car le OR va l'emporter
sur le premier IF et AND.....

On 10 août, 11:56, FFO wrote:
Rebonjours à toi

J'ai utilisé la même instruction que toi :

For i = 1 To 27

Qui donc se répète 2 fois dans le code

Il serait donc bon de choisir 2 variables différentes
Je te propose de changer la 2° ainsi :

For j = 1 To 27
pays_a_tester = Sheets("Funds").Range(Tab_lettres(j) &
cpt_funds).Value

If pays_a_tester = "Oui" Then

' recherche dans feuille Média
' faire tant que Bx de la feuille Media n'est pas vide

Do While Sheets("media").Range("b" & cpt_media).Text <> ""
If Sheets("media").Range("b" & cpt_media).Text = Tab_pays(j) and
sheets("media").range("d" & cpt_media).text =
Sheets("Funds").Range("D1").Value Then
Sheets("résult").Range("a" & ligne_courante, "f" & ligne_couran te) ..Value =
Sheets("Funds").Range("a" & ligne_courante, "f" & ligne_courante) .Value
Sheets("résult").Range("g" & ligne_courante) = Tab_pays(j)
Sheets("résult").Range("h" & ligne_courante, "j" & ligne_couran te) ..Value =
Sheets("media").Range("c" & cpt_media, "e" & cpt_media) .Value
ligne_courante = ligne_courante + 1
End If

Remplace ce bout de code et réessaie

Concernant les conditions je te propose ceci :

A = Sheets("media").Range("b" & cpt_media).Text
B = Tab_pays(j)
C = sheets("media").range("d" & cpt_media).text
D = Sheets("Funds").Range("D1").Value
Do While Sheets("media").Range("b" & cpt_media).Text <> ""
If Sheets("media").Range("b" & cpt_media).Text = Tab_pays(j) and
sheets("media").range("d" & cpt_media).text =
Sheets("Funds").Range("D1").Value Then

Je décrite en A/B/C/D les variable testées dans les conditions
Rajoute donc les lignes :
A = Sheets("media").Range("b" & cpt_media).Text
B = Tab_pays(j)
C = sheets("media").range("d" & cpt_media).text
D = Sheets("Funds").Range("D1").Value

Avant le Do While

Mets un point d'arret au niveau de Do While (un click sur le band eau gris en
regard)
Exécute le code
Il doit s'arréter à ce point
A chaque arrêt passes ta souris sur A/B/C/D pour en connaitre l es valeurs à
ce stade de l'éxécution
Si toutes les conditions sont remplies aprés avoir activé F5 du clavier
regarde dans le classeur le résultat obtenu
recommence l'opération jusqu'à la fin de l'éxécution

Attention :
si tu souhaites que les 2 conditions soient réunies pour copie r, la
commande est :
If Sheets("media").Range("b" & cpt_media).Text = Tab_pays(j) and
sheets("media").range("d" & cpt_media).text =
Sheets("Funds").Range("D1").Value Then
si tu souhaites qu'une conditions ou l'autre soit vraie pour cop ier, la
commande est :
If Sheets("media").Range("b" & cpt_media).Text = Tab_pays(j) or
sheets("media").range("d" & cpt_media).text =
Sheets("Funds").Range("D1").Value Then

Bien choisir la bonne ligne de commande

Dis moi ce que tu as constaté






Bonjour FFO

Merci pour la cure d'amaigrissement c'est bien plus joli, je va is plus
tard me pencher et en tirer les lecons.

Bon par contre plus rien ne s'affiche dans la feuille result, a croire
que le deuxieme critere avec le "and" passe mal, bizarre

MERCI !!

On 10 août, 10:29, lglux wrote:
Bonjour Daniel,

J'ai pas osé mettre un fichier car j'avais lu la netiquette de ce
forum, certes datée de 2003..

http://cjoint.com/?ikkARtRCiO

sur la feuille result j'ai mis les infos pour lancer la macro:

1. Appuyer sur le bouton en haut a droite
2. remplir les champs
3. input data puis valider
4. resultat dans cette feuille, j'aimerai que la colonne D = colonne I
ou "*"

MERCI !!

On 10 août, 09:53, "Daniel" wrote:

Bonjour.
C'est difficile de se faire une idée, mais, oui, avec des "and", ça doit le
faire. Sinon, le mieux est de télécharger ton classeur surwww.cjoint.comet
de poster l'adresse générée. N'oublie pas de remplace r les éventuelles
données confidentielles
Cordialement.
Daniel
"lglux" a écrit dans le messa ge de news:

Bonsoir a tous,

Malgré la mine d'or présente sur le forum, je ne dois p as utiliser les
bons mots clés car je ne trouve pas la reponse...

J'utilise le vba assez sommairement et j'aimerai developper mes
connaissances surtout que là j'en ai vraiment besoin pour le boulot:

(je vous passe l'etape du formulaire et tout que j'etais pa s peu fier
d'avoir mis en place)

Voilà j'aimerai copier une ligne (table "media") suivant plusieurs
critères d'une autre ligne d'une autre worksheet (insér é via le
formulaire) "fonds".

Le choix de la ligne à copier doit se faire en fonction d e trois
criteres.

Pour faire simple, j'aimerai la copie de la ligne fonds + l a copie de
la ligne media (a la suite sur la meme ligne) sur une trois ieme
feuille SI et seulement SI les trois criteres present dans les deux
lignes fonds et media sont égaux.

Pour l'instant ca marche pour le critere pays avec ce code mais je ne
sais pas comment inclure les autres criteres (avec un and? comment
utiliser cela? mon code n'est pas trop lourd?):

For i = 1 To 27
pays_a_tester = Sheets("Funds").Range(Tab_lettres(i) &
cpt_funds).Value

If pays_a_tester = "Oui" Then

' recherche dans feuille Média
' faire tant que Bx de la feuille Media n'est pas vide

Do While Sheets("media").Range("b" & cpt_media).Text <> ""

If Sheets("media").Range("b" & cpt_media).Text = Tab_pays(i)
Then

Sheets("résult").Range("a" & ligne_courante) =
Sheets("Funds").Range("a" & cpt_funds)
Sheets("résult").Range("b" & ligne_courante) =
Sheets("Funds").Range("b" & cpt_funds)
Sheets("résult").Range("c" & ligne_courante) =
Sheets("Funds").Range("c" & cpt_funds)
Sheets("résult").Range("d" & ligne_courante) =
Sheets("Funds").Range("d" & cpt_funds)
Sheets("résult").Range("e" & ligne_courante) =
Sheets("Funds").Range("e" & cpt_funds)
Sheets("résult").Range("f" & ligne_courante) =
Sheets("Funds").Range("f" & cpt_funds)
Sheets("résult").Range("g" & ligne_courante) = Tab_pays(i)
Sheets("résult").Range("h" & ligne_courante) =
Sheets("media").Range("c" & cpt_media)
Sheets("résult").Range("i" & ligne_courante) =
Sheets("media").Range("d" & cpt_media)
Sheets("résult").Range("j" & ligne_courante) =
Sheets("media").Range("e" & cpt_media)
ligne_courante = ligne_courante + 1
End If

cpt_media = cpt_media + 1

Loop

cpt_media = 2

End If

Next

cpt_funds = cpt_funds + 1

Loop

(pour ceux qui veulent l'integralité du code pour peut et re mieux
comprendre ma manip)
----------------------------------------------------------- ----------------­­­­­-------------------------------------------- --------

Sub Macro1()
'

'

Dim Tab_pays(30) As String ' tableau de tous les pays
Dim cpt_funds, cpt_media As Integer
Dim Tab_lettres(27) As String ' tableau des colonnes de G à AG

Tab_lettres(1) =








...

plus de détails »- Masquer le texte des messages précédents -

- Afficher le texte des messages précédents -









1 2 3