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

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

9 réponses

1 2 3
Avatar
lglux
Etonnant, quand je copie colle des valeurs d'autres classeurs dans mon
formulaire, et que j'execute l'insertion des données via un bouton du
formulaire,

j'ai un run time error '9'

subscript out of range


je sais pas trop a quoi c'est du, ca doit etre connu comme erreur ca



On 10 août, 14:14, lglux wrote:
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é u ne
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 p uis
la deuxieme OU la troisieme, comment tu t'y prends?

le IF .... AND..... OR....THEN ne marche pas car le OR va l'empor ter
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_cour ante) ..Value =
Sheets("Funds").Range("a" & ligne_courante, "f" & ligne_courant e) .Value
Sheets("résult").Range("g" & ligne_courante) = Tab_pays(j)
Sheets("résult").Range("h" & ligne_courante, "j" & ligne_cour ante) ..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 conditi ons
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 ba ndeau 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é F 5 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 cop ier, 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 c opier, 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 netiquet te de ce
forum, certes datée de 2003..

http://cjoint.com/?ikkARtRCiO

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

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" wrot e:

Bonjour.
C'est difficile de se faire une idée, mais, oui, avec d es "and", ça doit le
faire. Sinon, le mieux est de télécharger ton classeu r surwww.cjoint.comet
de poster l'adresse générée. N'oublie pas de rempla cer les éventuelles
données confidentielles
Cordialement.
Daniel
"lglux" a écrit dans le mes sage 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 developp er mes
connaissances surtout que là j'en ai vraiment besoin po ur 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") suivan t 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 tro isieme
feuille SI et seulement SI les trois criteres present dan s les deux
lignes fonds et media sont égaux.

Pour l'instant ca marche pour le critere pays avec ce cod e 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









...

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

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










Avatar
FFO
Rebonjour à toi

Les autres valeurs De H à J sont elles bien toutes recopiées ???

Si je comprends bien le souci se situe sur les lignes :

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(i)
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

J'ai essayé chez moi en me rapprochant au mieux de ta configuration, la
recopie se réalise correctement sur toutes les lignes

En désespoire de cause peux tu me transmettre ton fichier en utilisant le
site :

http://www.cijoint.fr/index.php

Communiques moi le lien en retour

Merci



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_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) > >
...








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

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














Avatar
Daniel
Je te suggère de remettre ton classeur sur www.cjoint.com et de poster
l'adresse générée. Donne-nous les données saisies et les zones dans
lesquelles elles sont saisies. D'autre part, clique sur "débogage" quand tu
as l'erreur et indique-nous la ligne sur laquelle elle se produit.
Daniel
"lglux" a écrit dans le message de news:

Etonnant, quand je copie colle des valeurs d'autres classeurs dans mon
formulaire, et que j'execute l'insertion des données via un bouton du
formulaire,

j'ai un run time error '9'

subscript out of range


je sais pas trop a quoi c'est du, ca doit etre connu comme erreur ca



On 10 août, 14:14, lglux wrote:
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_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









...

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

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










Avatar
lglux
Oui a partir de H ca marche.

regarde : http://www.cijoint.fr/cij82708018222101.xls

Merci !





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

Les autres valeurs De H à J sont elles bien toutes recopiées ???

Si je comprends bien le souci se situe sur les lignes :

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(i)
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

J'ai essayé chez moi en me rapprochant au mieux de ta configuration, la
recopie se réalise correctement sur toutes les lignes

En désespoire de cause peux tu me transmettre ton fichier en utilisant le
site :

http://www.cijoint.fr/index.php

Communiques moi le lien en retour

Merci




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'orig ine
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 sem ble
tres logique, elle ne marche pas (aucun results affiché)

merci encore a vous, la je pense que deja je suis sur de bonnes bas es,
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'emp orter
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_co urante) ..Value =
Sheets("Funds").Range("a" & ligne_courante, "f" & ligne_coura nte) .Value
Sheets("résult").Range("g" & ligne_courante) = Tab_pays(j)
Sheets("résult").Range("h" & ligne_courante, "j" & ligne_co urante) ..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 condi tions
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 connait re 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 c opier, 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, j e vais plus
tard me pencher et en tirer les lecons.

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

MERCI !!

On 10 août, 10:29, lglux wrot e:
Bonjour Daniel,

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

http://cjoint.com/?ikkARtRCiO

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

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" wr ote:

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 class eur surwww.cjoint.comet
de poster l'adresse générée. N'oublie pas de remp lacer les éventuelles
données confidentielles
Cordialement.
Daniel
"lglux" a écrit dans le m essage de news:

Bonsoir a tous,

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

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

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

Voilà j'aimerai copier une ligne (table "media") suiv ant 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 foncti on 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 t roisieme
feuille SI et seulement SI les trois criteres present d ans les deux
lignes fonds et media sont égaux.

Pour l'instant ca marche pour le critere pays avec ce c ode mais je ne
sais pas comment inclure les autres criteres (avec un a nd? 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 v ide

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

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










...

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

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











Avatar
lglux
On 10 août, 14:56, "Daniel" wrote:
Je te suggère de remettre ton classeur surwww.cjoint.comet de poster
l'adresse générée. Donne-nous les données saisies et les zones da ns
lesquelles elles sont saisies. D'autre part, clique sur "débogage" quan d tu
as l'erreur et indique-nous la ligne sur laquelle elle se produit.
Daniel


Voici donc le fichier avec le code qui marche sauf quand on copie
colle des valeurs dans les champs du formulaire:

http://www.cijoint.fr/cij111763255122152.xls

Voila, j'essaye de copie coller des valeurs pour les entrer dans le
formulaire. Ces valeurs sont quelconques, n'importe lequels (texte) et
ca plante

"run time error '9', subscript out of range"

la ligne de code du formulaire pointée sera la premiere ecrite apres
ceci, placé au debut du formulaire:
-------------------------------------------------------------
Private Sub Bouton_valider_Click()

Dim Tab_pays(30) As String ' tableau de tous les pays
Dim cpt_funds, cpt_media As Integer
-------------------------------------------------------------------

Avatar
FFO
Rebonjour à toi

La ligne de commande qui remplit tes cellules A à F Onglet "result"
Sheets("résult").Range("a" & ligne_courante, "f" & ligne_courante) .Value =
Sheets("Funds").Range("a" & ligne_courante, "f" & ligne_courante) .Value
suit l'évolution du paramètre : ligne_courante
Qui par la ligne de commande quelque lignes plus bas :
ligne_courante = ligne_courante + 1
évolue à chaque cycle de +1
Si c'est indispensable pour la recopie dans la partie :
Sheets("résult").Range("a" & ligne_courante, "f" & ligne_courante) .Value
Celà devient génant pour la partie :
Sheets("Funds").Range("a" & ligne_courante, "f" & ligne_courante) .Value
Car les paramètres que l'on doit récupérer dans l'Onglet "Fun" sont toujours
sur la même ligne cellule A à F
Or à partir du 2° cycle tu demandes par la variable (ligne_courante) d'aller
les chercher 1 ligne plus bas totalement vide
D'ou ton souci

Je te propose de te servir de la variable : cpt_funds
En lieu et place pour cette partie
Remplace donc :

Sheets("résult").Range("a" & ligne_courante, "f" & ligne_courante) .Value =
Sheets("Funds").Range("a" & ligne_courante, "f" & ligne_courante) .Value

Par :

Sheets("result").Range("a" & ligne_courante, "f" & ligne_courante).Value =
Sheets("Funds").Range("a" & cpt_funds, "f" & cpt_funds).Value

Celà devrait mieux convenir

Dis moi !!!



Oui a partir de H ca marche.

regarde : http://www.cijoint.fr/cij82708018222101.xls

Merci !





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

Les autres valeurs De H à J sont elles bien toutes recopiées ???

Si je comprends bien le souci se situe sur les lignes :

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(i)
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

J'ai essayé chez moi en me rapprochant au mieux de ta configuration, la
recopie se réalise correctement sur toutes les lignes

En désespoire de cause peux tu me transmettre ton fichier en utilisant le
site :

http://www.cijoint.fr/index.php

Communiques moi le lien en retour

Merci




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_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










...

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

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
















Avatar
lglux
Ah oui ca a l'air encore mieux ca !

je teste ca et je te tiens au courant

On 10 août, 16:38, FFO wrote:
Rebonjour à toi

La ligne de commande qui remplit tes cellules A à F Onglet "result"
Sheets("résult").Range("a" & ligne_courante, "f" & ligne_courante) .Val ue =
Sheets("Funds").Range("a" & ligne_courante, "f" & ligne_courante) .Value
suit l'évolution du paramètre : ligne_courante
Qui par la ligne de commande quelque lignes plus bas :
ligne_courante = ligne_courante + 1
évolue à chaque cycle de +1
Si c'est indispensable pour la recopie dans la partie :
Sheets("résult").Range("a" & ligne_courante, "f" & ligne_courante) .Val ue
Celà devient génant pour la partie :
Sheets("Funds").Range("a" & ligne_courante, "f" & ligne_courante) .Value
Car les paramètres que l'on doit récupérer dans l'Onglet "Fun" sont toujours
sur la même ligne cellule A à F
Or à partir du 2° cycle tu demandes par la variable (ligne_courante) d'aller
les chercher 1 ligne plus bas totalement vide
D'ou ton souci

Je te propose de te servir de la variable : cpt_funds
En lieu et place pour cette partie
Remplace donc :

Sheets("résult").Range("a" & ligne_courante, "f" & ligne_courante) .Val ue =
Sheets("Funds").Range("a" & ligne_courante, "f" & ligne_courante) .Value

Par :

Sheets("result").Range("a" & ligne_courante, "f" & ligne_courante).Value =
Sheets("Funds").Range("a" & cpt_funds, "f" & cpt_funds).Value

Celà devrait mieux convenir

Dis moi !!!




Oui a partir de H ca marche.

regarde :http://www.cijoint.fr/cij82708018222101.xls

Merci !

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

Les autres valeurs De H à J sont elles bien toutes recopiées ???

Si je comprends bien le souci se situe sur les lignes :

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(i)
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

J'ai essayé chez moi en me rapprochant au mieux de ta configuration , la
recopie se réalise correctement sur toutes les lignes

En désespoire de cause peux tu me transmettre ton fichier en utilis ant le
site :

http://www.cijoint.fr/index.php

Communiques moi le lien en retour

Merci




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 lig ne,
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 marc hes 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 po sé 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 w rote:
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_pa ys(j) and
sheets("media").range("d" & cpt_media).text =
Sheets("Funds").Range("D1").Value Then
Sheets("résult").Range("a" & ligne_courante, "f" & lign e_courante) ..Value =
Sheets("Funds").Range("a" & ligne_courante, "f" & ligne_c ourante) .Value
Sheets("résult").Range("g" & ligne_courante) = Tab_pa ys(j)
Sheets("résult").Range("h" & ligne_courante, "j" & lign e_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_pa ys(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 c onditions
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 con naitre les valeurs à
ce stade de l'éxécution
Si toutes les conditions sont remplies aprés avoir acti vé F5 du clavier
regarde dans le classeur le résultat obtenu
recommence l'opération jusqu'à la fin de l'éxécut ion

Attention :
si tu souhaites que les 2 conditions soient réunies po ur copier, la
commande est :
If Sheets("media").Range("b" & cpt_media).Text = Tab_pa ys(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_pa ys(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 jol i, je vais plus
tard me pencher et en tirer les lecons.

Bon par contre plus rien ne s'affiche dans la feuille r esult, 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 ne tiquette 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 colo nne 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 c lasseur surwww.cjoint.comet
de poster l'adresse générée. N'oublie pas de remplacer les éventuelles
données confidentielles
Cordialement.












...

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

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













Avatar
lglux
Ca marche vraiment bien comme ceci, merci beaucoup !!

On 10 août, 17:14, lglux wrote:
Ah oui ca a l'air encore mieux ca !

je teste ca et je te tiens au courant

On 10 août, 16:38, FFO wrote:

Rebonjour à toi

La ligne de commande qui remplit tes cellules A à F Onglet "result"
Sheets("résult").Range("a" & ligne_courante, "f" & ligne_courante) .V alue =
Sheets("Funds").Range("a" & ligne_courante, "f" & ligne_courante) .Value
suit l'évolution du paramètre : ligne_courante
Qui par la ligne de commande quelque lignes plus bas :
ligne_courante = ligne_courante + 1
évolue à chaque cycle de +1
Si c'est indispensable pour la recopie dans la partie :
Sheets("résult").Range("a" & ligne_courante, "f" & ligne_courante) .V alue
Celà devient génant pour la partie :
Sheets("Funds").Range("a" & ligne_courante, "f" & ligne_courante) .Value
Car les paramètres que l'on doit récupérer dans l'Onglet "Fun" so nt toujours
sur la même ligne cellule A à F
Or à partir du 2° cycle tu demandes par la variable (ligne_courante ) d'aller
les chercher 1 ligne plus bas totalement vide
D'ou ton souci

Je te propose de te servir de la variable : cpt_funds
En lieu et place pour cette partie
Remplace donc :

Sheets("résult").Range("a" & ligne_courante, "f" & ligne_courante) .V alue =
Sheets("Funds").Range("a" & ligne_courante, "f" & ligne_courante) .Value

Par :

Sheets("result").Range("a" & ligne_courante, "f" & ligne_courante).Valu e =
Sheets("Funds").Range("a" & cpt_funds, "f" & cpt_funds).Value

Celà devrait mieux convenir

Dis moi !!!



Oui a partir de H ca marche.

regarde :http://www.cijoint.fr/cij82708018222101.xls

Merci !

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

Les autres valeurs De H à J sont elles bien toutes recopiées ???

Si je comprends bien le souci se situe sur les lignes :

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(i)
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

J'ai essayé chez moi en me rapprochant au mieux de ta configurati on, la
recopie se réalise correctement sur toutes les lignes

En désespoire de cause peux tu me transmettre ton fichier en util isant le
site :

http://www.cijoint.fr/index.php

Communiques moi le lien en retour

Merci





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 l igne,
mais pas sur les lignes d'en dessous (ligne 3 vide de A à F, al ors
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 ma rches 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 tien ne semble
tres logique, elle ne marche pas (aucun results affiché)

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

On 10 août, 13:00, FFO wro te:
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 vra ie, 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" & li gne_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" & li gne_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 s ur 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 c onnaitre les valeurs à
ce stade de l'éxécution
Si toutes les conditions sont remplies aprés avoir ac tivé F5 du clavier
regarde dans le classeur le résultat obtenu
recommence l'opération jusqu'à la fin de l'éxéc ution

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 vrai e 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 j oli, 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, biza rre

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 lance r 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 co lonne D = colonne I
ou "*"

MERCI !!

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

Bonjour.
C'est difficile













...

plus de détails »














Avatar
FFO
Bonsoir Iglux

Heureux d'avoir abouti !!!!
Je peux ce soir prendre mes congés bien mérités


A trés bientôt peut être sur ce forum !!!


Ca marche vraiment bien comme ceci, merci beaucoup !!

On 10 août, 17:14, lglux wrote:
Ah oui ca a l'air encore mieux ca !

je teste ca et je te tiens au courant

On 10 août, 16:38, FFO wrote:

Rebonjour à toi

La ligne de commande qui remplit tes cellules A à F Onglet "result"
Sheets("résult").Range("a" & ligne_courante, "f" & ligne_courante) .Value > > > Sheets("Funds").Range("a" & ligne_courante, "f" & ligne_courante) .Value
suit l'évolution du paramètre : ligne_courante
Qui par la ligne de commande quelque lignes plus bas :
ligne_courante = ligne_courante + 1
évolue à chaque cycle de +1
Si c'est indispensable pour la recopie dans la partie :
Sheets("résult").Range("a" & ligne_courante, "f" & ligne_courante) .Value
Celà devient génant pour la partie :
Sheets("Funds").Range("a" & ligne_courante, "f" & ligne_courante) .Value
Car les paramètres que l'on doit récupérer dans l'Onglet "Fun" sont toujours
sur la même ligne cellule A à F
Or à partir du 2° cycle tu demandes par la variable (ligne_courante) d'aller
les chercher 1 ligne plus bas totalement vide
D'ou ton souci

Je te propose de te servir de la variable : cpt_funds
En lieu et place pour cette partie
Remplace donc :

Sheets("résult").Range("a" & ligne_courante, "f" & ligne_courante) .Value > > > Sheets("Funds").Range("a" & ligne_courante, "f" & ligne_courante) .Value

Par :

Sheets("result").Range("a" & ligne_courante, "f" & ligne_courante).Value > > > Sheets("Funds").Range("a" & cpt_funds, "f" & cpt_funds).Value

Celà devrait mieux convenir

Dis moi !!!



Oui a partir de H ca marche.

regarde :http://www.cijoint.fr/cij82708018222101.xls

Merci !

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

Les autres valeurs De H à J sont elles bien toutes recopiées ???

Si je comprends bien le souci se situe sur les lignes :

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(i)
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

J'ai essayé chez moi en me rapprochant au mieux de ta configuration, la
recopie se réalise correctement sur toutes les lignes

En désespoire de cause peux tu me transmettre ton fichier en utilisant le
site :

http://www.cijoint.fr/index.php

Communiques moi le lien en retour

Merci





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_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













...

plus de détails »



















1 2 3