Liaisons entre 2 classeurs

Résolu
Anathorn Messages postés 12 Date d'inscription lundi 28 octobre 2002 Statut Membre Dernière intervention 5 septembre 2006 - 5 sept. 2006 à 11:17
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 - 5 sept. 2006 à 12:29
Bonjour tout le monde,

On me demande de développer une petite macro et je n'y connais rien...



<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??>
 




J’explique :


2 classeurs : A.xls et B.xls



 




Dans A se trouve une colonne avec des noms de services codés :


SERVICE

,

----

AU12

,

----

AS03

,

----

PE00

,

----

PE00

,

----

EN03

,

----

FP05

,

----

EN10

,

----

PE00

,

----

TC04


……..



 




Dans B se trouve le véritable nom de ces services :



 




AD00A

,
AG de la direction du développement urbain

,

----

AD00B

,
Construction LGV

,

----

AD00C

,
Programme Urbain

,

----

AD01

,
Planification urbaine

,

----

AD01A

,
AG de l'urbanisme

,

----

AD01B

,
Elaboration et suivi des POS

,

----

AD01C

,
Etudes d'urbanisme


…….



 




Le but de la macro serait de remplacer ce qui se trouve dans A par le véritable nom de service correspondant… Mais je ne vois pas du tout comment m’y prendre… Quelqu’un pourrait-il m’aider ?



 




D’avance merci

8 réponses

jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
5 sept. 2006 à 11:49
Salut,
Place un bouton directement sur ta feuille ou tu veux remplacer les codes (A.xls)

Et Place ce code:

Private Sub CommandButton1_Click() 
Dim Wb As Workbook 
Dim ColService As New Collection 
Dim UnCell As Range 

'Ouvre le fichier ou se trouve tout les nom des services
'S'assurer donc qu il est ferme
Set Wb =  Application.Workbooks.Open("C:\B.Xls") 
'remplacer Feuil1 par le nom de ta feuille
Wb.Worksheets("Feuil1").Range("A1", Selection.End(xlDown)).Select 

For Each UnCell In Selection 
    'Rempli la collection avec comme item le nom du service et comme cle d'acces le code
    Call ColService.Add(Worksheets("Feuil1").Range("B" & UnCell.Row).Text,  CStr (UnCell.Value)) 
Next 
'fermeture du classeur sans sauvegarder
Call Wb.Close(False) 

Set Wb  = Application.Workbooks("A.xls") 

'remplacer Feuil1 par le nom de ta feuille
Wb.Worksheets("Feuil1").Range("A1", Selection.End(xlDown)).Select 

'Ici je place le résultat dans la colonne B pour l'exemple
For Each UnCell In Selection 
    On Error Resume Next   'ceci permet d'eviter l'erreur si on trouve un code inconnu
        Wb.Worksheets("Feuil1").Range("B" & UnCell.Row).Value =  ColService( CStr (UnCell.Value)) 
    On Error GoTo 0 
Next 

End Sub 
 

<small> Coloration syntaxique automatique [AFCK]</small>
       

Mais comme te précise  =6078 MPi et 528680 Molenn
Pour que mon code soit efficace et en suivant ton exemple il faut au moins que dans A.xls on retrouve les codes suivant:
AD00A<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??>

, AG de la direction du développement urbain

, ----
AD00B

, Construction LGV

, ----
AD00C

, Programme Urbain

, ----
AD01

, Planification urbaine

, ----
AD01A

, AG de l'urbanisme

, ----
AD01B

, Elaboration et suivi des POS

, ----
AD01C

, Etudes d'urbanisme

@+,   Ju£i?n
3
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
5 sept. 2006 à 11:28
Salut,

Il faudrait retrouver au moins les 2 noms équivalents ensemble dans la même feuille, côte à côte.

Est-ce le cas ?

MPi
0
Anathorn Messages postés 12 Date d'inscription lundi 28 octobre 2002 Statut Membre Dernière intervention 5 septembre 2006
5 sept. 2006 à 11:33
Désolé, mais je n'ai pas trop compris la question :-\
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
5 sept. 2006 à 11:40
En fait, pour pouvoir remplacer un acronyme par un autre, il faut que le programme(ur) sache avec quoi remplacer.


Si dans une feuille, tu as AU12 sur une ligne et son équivalent AD00A
sur la même ligne, il sera assez simple de faire la conversion. Il faut
donc avoir un genre de table avec tous les acronymes dans une colonne
et l'équivalent ou remplacement dans une autre colonne et que les
valeurs de remplacement soient toutes sur les bonnes lignes...


plus clair ?

MPi
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_carvals Messages postés 50 Date d'inscription lundi 20 novembre 2000 Statut Membre Dernière intervention 23 janvier 2008
5 sept. 2006 à 11:44
salut,

Comment connais tu le vrai nom AU12 par exemple, ou trouves tu cette info?

carvals
0
Molenn Messages postés 797 Date d'inscription mardi 7 juin 2005 Statut Membre Dernière intervention 23 février 2011 7
5 sept. 2006 à 11:45
En français dans le texte :


Si tu ne retrouves pas quelque part sur la même ligne, dans ton fichier A ou B, les codes correspondants (a priori, ce n'est pas le cas : ton classeur A contient des codes sur 4 caractères et ton classeur B sur 5 caractères), tu ne pourras jamais trouver parce que pour faire le lien, il faut au moins une donnée commune (et unique) dans un fichier pour faire le rapprochement.


Ensuite, nul besoin de macro pour faire cette liaison :
il suffit de déclarer une zone de nom (menu Insertion\Nom\définir) contenant le code et le nom complet du service, dans un classeur.
Avec la formule RECHERCHEV ou RECHERCHEH suivant ta structure, tu remontes automatiquement l'équivalent (cette fonction opère aussi entre différents classeurs).


Molenn
0
Anathorn Messages postés 12 Date d'inscription lundi 28 octobre 2002 Statut Membre Dernière intervention 5 septembre 2006
5 sept. 2006 à 11:50
Je n'ai pas été suffisamment précis, il y a 800 services avec pour chacun un code spécifique...  Je n'ai mis qu'un echantillon en exemple...

Aussi : La personne pour qui je dois developper cette macro reçoit régulièrement un fichier du type "A.xls" et grace à son fichier "B.xls", elle veut modifier le tableau A.xls...
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
5 sept. 2006 à 12:29
Ça te prend donc, comme on disait, une feuille de référence avec tous
les codes de base et leur valeur de remplacement, côte à côte.


Ensuite, sans macro, une simple RechercheV , puis un copier/coller en valeur devrait suffire.


À moins qu'on te demande de faire une macro pour te mettre "au test"

MPi
0
Rejoignez-nous