Copie cellules entre fichiers excel avec condition [Résolu]

Messages postés
9
Date d'inscription
dimanche 20 octobre 2013
Statut
Membre
Dernière intervention
22 octobre 2013
- - Dernière réponse : ucfoutu
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
- 22 oct. 2013 à 21:26
Bonjour,
Je suis débutant dans l'utilisation de macro Excel et je dois faire l'opération suivante :
J'ai 2 fichiers :
* a-fichier session test, avec 3 colonnes: « Presentation _name » - « abstract text » et « code »
* b-fichier speaker test, avec 3 colonnes: "Speaker name" - "Abstract text Speaker" - "code"
Je voudrai copier le contenu de la colonne "Abstract text speaker" du fichier 2 dans la colonne "Abstract text" du fichier 1 à condition que le code soit le même dans les 2 fichiers.
Comment faire.
Merci par avance.
Afficher la suite 

6 réponses

Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
215
0
Merci
Bonjour,
Il te suffit donc de :
- ajouter les deux colonnes nécessaires à ton fichier 1
-parcourir en boucle le fichier 2 pour y lire chaque code
- pour chaque code ainsi lu utiliser la méthode Find (rubrique Range.find dans ton aide VBVA) pour y repérer (si présent) le même code en la colonne des codes du Fichier 1
- ajouter à cette ligne, dans les colonnes ajoutées au fichier 1, les données correspondantes des colonnes "Speaker name" et "Abstract text Speaker" du fichier 2

C'est là la réponse à :
"Comment faire. "
Reviens avec ton code d'essai écrit sur ces bases, si encore en difficulté
Commenter la réponse de ucfoutu
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
215
0
Merci
PS : il va de soi que ton fichier 2 ne doit comporter aucun dans sa colonne des codes. Mais je pense que tel est bien le cas (sinon : grave défait de conception).
Commenter la réponse de ucfoutu
Messages postés
9
Date d'inscription
dimanche 20 octobre 2013
Statut
Membre
Dernière intervention
22 octobre 2013
0
Merci
Je ne suis pas sur d'avoir compris ta deuxieme remarque? Voici la tete de mes 2 fichiers
Fichier 1 - a-fichier session test
Presentation _name / abstract_text / code
presentation_1 ................... code 1
presentation_2 ................... code 2
presentation_5 ................... code 5

Fichier 2 - b-fichier speaker test
Speaker_name / Abstract_text_Speaker / code
speaker_1 text 1 du speaker 1 code 1
speaker_1 text 2 du speaker 1 code 2
speaker_3 text 3 du speaker 3 code 3
speaker_5 text 5 du speaker 5 code 5

L'objectif est de copier "textx du speaker x" du fichier 2 dans le fichier 1 quand il trouve la meme valeur code dans les 2 fichiers. Il peut y a voir le cas ou un speaker fait 2 presentations. Y a t-il un pb de conception ?

D'autre part, c'est la premiere fois que je code qq chose en VBA. Peut tu me donner un lien sur VBA pour faire mon aprentissage et demarrer l'ecriture de ce programme.

Merci par avance.
Commenter la réponse de jonew
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
215
0
Merci
"D'autre part, c'est la premiere fois que je code qq chose en VBA. Peut tu me donner un lien sur VBA pour faire mon aprentissage et demarrer l'ecriture de ce programme. "
Tu trouveras plein de cours sur la toile.
Je n'en ai quant à moi suivi aucun. L'aide VBA m'a amplement suffi
"Il peut y a voir le cas ou un speaker fait 2 presentations. Y a t-il un pb de conception ? "
Et où mets-tu alors (dans ce cas), la seconde présentation ? (cette question est en soi la réponse à ton interrogation).
Commenter la réponse de ucfoutu
Messages postés
9
Date d'inscription
dimanche 20 octobre 2013
Statut
Membre
Dernière intervention
22 octobre 2013
0
Merci
Re-bonjour,

Merci pour les informations precedentes. Finalement apres bien des efforts j'ai reussi a faire tourner ce script pour mon cas de figure. La colonne "code" commune aux 2 tableaux etant en premiere colonne.
Mais j'ai un autre probleme. J'ai voulu tester dans la boucle (if z = ....) que si une cellule de la colonne "code" du 1er fichier etait vide il fallait continuer le traitement.... et je n'arrive pas a introduire ce test. Sinon le code s'arrete des qu'il trouve une cellule vide. Pouvez vous m'aider.

Voici le code utilise:

Sub AddAbstractTextToSession()
Dim ws1 As Worksheet, ws2 As Worksheet, ws3 As Worksheet, i1, i2, i3, k, kk, z
Set ws1 = Worksheets(1)
Set ws2 = Worksheets(2)
Set ws3 = Worksheets(3)
i1 = ws1.Range("A1").End(4).Row
i2 = ws2.Range("A1").End(4).Row
With ws1
For k = 1 To i1
z = .Range("A" & k)
For kk = 1 To i2
If z = ws2.Range("A" & kk) Then
ws3.Range("A" & i3 + 1) = z
ws3.Range("B" & i3 + 1) = .Range("B" & k)
ws3.Range("C" & i3 + 1) = ws2.Range("C" & kk)
ws3.Range("D" & i3 + 1) = ws2.Range("B" & kk)
ws3.Range("E" & i3 + 1) = ws2.Range("C" & kk)
i3 = i3 + 1
End If
Next
Next
End With
End Sub
Commenter la réponse de jonew
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
215
0
Merci
i1 = ws1.Range("A1").End(4).Row
à remplacer par :
i1 = ws1.Range("A" & rows.count).end(xlup).row

PS : présente toujours ton code entre balises code, s'il te plait)
2ème icône à partir de la droite.

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviend
ucfoutu
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
215 -
D'où mon message du 20 oct. 2013 à 10:31
C'est là un problème de conception.
Quelle est donc la tienne ? (tu n'as pas répondu).
jonew
Messages postés
9
Date d'inscription
dimanche 20 octobre 2013
Statut
Membre
Dernière intervention
22 octobre 2013
-
Je reviens au bureau, d'où mon délai pour te répondre. Voici une explication plus détaillée du pourquoi du script et des contraintes...
En fait le format et la syntaxe du fichier Excel avec les 2 feuilles « Session » et « Speaker » me sont imposées car ce sont les inputs à une application. Donc impossible de changer. Leur format pour être lue par l'application est de manière simplifier:
Feuille session :
« code » --- « session_name » ---- « speaker_abstract » (1 abstract par session)
Feuille speaker :
« code » --- « speaker_name » .... Pour un même speaker il peut y avoir plusieurs code tel que code1,code33,code10 signifiant qu'il fera 3 sessions et aura donc 3 abstracts.

Or la feuille session, est remplie manuellement à partir du Schedule du meeting et le contenu de la colonne « speaker_abstract » n'est pas remplie à l'origine.

La feuille speaker elle, contient à l' origine l'info pour « speaker_abstract » (car viens d'une inscription). Par contre pour être lu par l'application, elle n'aura plus cette colonne.
D'où le besoin du script pour basculer le contenu de la colonne « speaker_abstract » de la feuille speaker vers la feuille session en fonction du numéro de code de la session.

En fait quand j'obtiens la feuille speaker, je peux l'obtenir au step-1 avec 1 ligne par code. Et si un speaker doit présenter plusieurs abstracts (donc différents code), j'aurai autant de lignes que de code (avec le même nom de speaker). Donc le problème que je posai n'existe plus.
Par contre une fois passer le script, et afin d'être lue par l'application je dois supprimer de la feuille speaker la colonne « speaker_abstract » et surtout merger dans une seule ligne toute les lignes avec le même « speaker_name » et je dois me retrouver ainsi avec la syntaxe :
code1,code33,code10 ...... « speaker_name » ... donc merge + delete des lignes non utiles.
J'espère que j'ai été clair ?
D'où ma nouvelle question : comment faire cette dernière partie merge+ delete. Peux-tu me mettre sur la voie. Que dois-je utiliser ?
Merci encore.
ucfoutu
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
215 -
Pourquoi tout simplement ne pas aller directement au résultat recherché, plutôt que de passer par cette fusion et cette destruction des lignes devenues inutiles ?
Si tu avais répondu plus tôt à la question posée, tu aurais déjà eu ta réponse ! ===>>
Au lieu d'ajouter une ligne Excel, ajoute directement une ligne dans la cellule
Regarde ce que fait ceci (exemple) :
Range("A1").Value = "ligne 1"
Range("A1").Value = Range("A1").Value & Chr(10) & "ligne 2"

Cela devrait "faire tilt" (j'espère)
A toi de jouer...
jonew
Messages postés
9
Date d'inscription
dimanche 20 octobre 2013
Statut
Membre
Dernière intervention
22 octobre 2013
-
Excuses moi, mais cela n'a pas fait "tilt".
A quel moment je parle de rajouter une ligne excel?
dans quelle partie du probleme ce code peut-il s'appliquer?

Je suis surement lent a la detente en VBA... mais c'est mon premier code!
ucfoutu
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
215 -
je ne t'ai pas du tout parlé d'une nouvelle ligne Excel, mais d'une nouvelle ligne dans une cellule (pas pareil du tout).
A quel moment ? Ben ... lorsqu'une donnée est déjà présente !
Excuse-moi, mais je te laisse maintenant là.
Commenter la réponse de ucfoutu