Anathorn
Messages postés12Date d'inscriptionlundi 28 octobre 2002StatutMembreDernière intervention 5 septembre 2006
-
5 sept. 2006 à 11:17
cs_MPi
Messages postés3877Date d'inscriptionmardi 19 mars 2002StatutMembreDernière intervention17 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 ?
jrivet
Messages postés7392Date d'inscriptionmercredi 23 avril 2003StatutMembreDernière intervention 6 avril 201260 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
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" /??>
cs_MPi
Messages postés3877Date d'inscriptionmardi 19 mars 2002StatutMembreDernière intervention17 août 201823 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
Vous n’avez pas trouvé la réponse que vous recherchez ?
Molenn
Messages postés797Date d'inscriptionmardi 7 juin 2005StatutMembreDernière intervention23 février 20117 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).
Anathorn
Messages postés12Date d'inscriptionlundi 28 octobre 2002StatutMembreDerniè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...