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 ?
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
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" /??>
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...
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).
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...