Liaisons entre 2 classeurs [Résolu]

Signaler
Messages postés
12
Date d'inscription
lundi 28 octobre 2002
Statut
Membre
Dernière intervention
5 septembre 2006
-
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
-
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

Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
55
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
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
18
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
Messages postés
12
Date d'inscription
lundi 28 octobre 2002
Statut
Membre
Dernière intervention
5 septembre 2006

Désolé, mais je n'ai pas trop compris la question :-\
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
18
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
Messages postés
50
Date d'inscription
lundi 20 novembre 2000
Statut
Membre
Dernière intervention
23 janvier 2008

salut,

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

carvals
Messages postés
797
Date d'inscription
mardi 7 juin 2005
Statut
Membre
Dernière intervention
23 février 2011
5
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
Messages postés
12
Date d'inscription
lundi 28 octobre 2002
Statut
Membre
Dernière intervention
5 septembre 2006

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...
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
18
Ç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