[excel vba] mise à jour données

Signaler
Messages postés
22
Date d'inscription
samedi 22 avril 2006
Statut
Membre
Dernière intervention
20 août 2006
-
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
-
Bonjour à tous,
Je dispose de 7 fichiers Excel, qui contiennent chacun la même structure.
Une colonne de ces fichiers contient des codes.
Certains de ces codes ne sont plus valables, et ont été mis à jour.
Je dispose d'un deuxième fichier Excel qui contient dans une colonne le code ancien
avec le nouveau code dans une colonne à côté.

Je voudrai mettre à jour les codes dans chacun de ces fichiers.

Voici un exemple :

Fichier1.xls (de même pour les 6 autres fichiers)

Colonne6
01LA
02LA
03LA
560A
etc..

FichierCorrespondance.xls

colonne1 colonne2
01LA 482Z
02LA 235S
03LA 692X

Voici ce que je voudrai obtenir

Fichier1.xls (de même pour les 6 autres fichiers)

Colonne6
482Z
235S
692X
560A
etc..

Je ne connais pas assez pour développer qque chose en vba

D'avance, Merci à tous pour vos réponses

<!-- / message -->

11 réponses

Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
58
Salut


J espere que le code qui suit peu t'aider.


Il suffit de mettre un bouton sur un feuille de Fichier1.xls et de mettre ce code pour le bouton.








Private Sub CommandButton1_Click() 
Dim ColCorrespondance As New Collection 
Dim i As Integer 
Dim Wb As Workbook 
Dim ValTmp As String 
'S'assurrer que le fichier de correspondance soit bien fermer
'avant d'executer la macro
Set Wb =  Application.Workbooks.Open("C:\FichierCorrespondance.xls") 

'Je suppose que les codes mis a jour sont dans la feuille
' 1 du fichier de correspondace
i = 1 
While Wb.Worksheets(1).Range("A" & i) <> "" 
    Call ColCorrespondance.Add(Wb.Worksheets(1).Range("B" & i).Text, Wb.Worksheets(1).Range("A" & i).Text) 
    i = i + 1 
Wend 

'A partir d'ici la collection contient les codes mis a jours
Call Wb.Close(False) 
Set Wb = Nothing 

Call Application.Workbooks("Fichier1.xls").Activate 
'Boucle faite jusqu a ce que l on trouve une case vide
i = 1 
While ActiveWorkbook.Worksheets(1).Range("F" & i) <> "" 
    'Ceci evite les erreurs (qui surviennent si le code n'a pas été mis a jour)
    ' Et donc ne possede pas de correspondance
    On Error Resume Next 
        'On remplace la valeur du code par sa valeur mis a jour
        ActiveWorkbook.Worksheets(1).Range("F" & i) = ColCorrespondance(ActiveWorkbook.Worksheets(1).Range("F" & i).Text) 
    On Error GoTo 0 
    i = i + 1 
Wend 

End Sub 

 







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

       









 




: Règlement
=>
:Moteur de recherche
Messages postés
797
Date d'inscription
mardi 7 juin 2005
Statut
Membre
Dernière intervention
23 février 2011
7
Sinon, comme d'hab, une solution toute bête sans code, avec des formules EXCEL.
Dans ton fichier 1, tu insères une colonne, qui deviendra mettons la colonne 7. Dans cette colonne, tu mets en formule RECHERCHEV (l'aide est bien faite d'EXCEL, et cette fonction peut chercher dans des fichiers différents). Et tu remonteras les correspondances de tes codes de la colonne 6.

Te resteras plus qu'à faire un copier/coller Valeur pour remplacer les formules par ton code et supprimer al colonne 6 si tu n'en as plus besoin.

Magique !

Molenn

P.S. : Je n'ai pas le courage de donner la formule Exacte, si tu n'y arrives pas, regarde dans mes derniers messages, j'ai fait un post avec exactement la même chose il y a une 10aine de jours.

P.P.S. : Je pense de plus en plus à le créer, ce Comité pour la Promotion d'Excel et Contre le Code à Tout Va ^^
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
Molenn, j'attends toujours ton invit...
ah et pour ton "PPS", t'es quand même sur vbfrance, et non excelfrance !!

A l'origine, les membres veulent du code, donc on leur fourni du code ...

@++

  --Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
58
>528680 Molenn: =647037 mortalino a raison, les gens veulent du code. Mais je suis tout a fait d'accord avec toi, c'est toujours mieux d'essayer de le faire directement. Mais personnellement je trouve vachement plus simple parfois de passer par du code, que par des "Formules" pas toujours simple proposée par Excel.

: Règlement=>:Moteur de recherche
Messages postés
797
Date d'inscription
mardi 7 juin 2005
Statut
Membre
Dernière intervention
23 février 2011
7
Ce n'est pas faux (et non "C'est pas faux" Mortalino ... C'est donc que 'jai tout compris et que je ne masque pas mon ignorance ) ...

Effectivement, on vient sur ce forum pour avoir du code.
Mais trop de code tue le code comme qui dirait l'autre et ... Il n'y a pas de meilleurs codes que son absence justement.
Trop souvent, on tente de faire un truc en VBA qui existe déjà dans l'appli qu'on utilise. Et il n'y aura jamais rien de plus rapide/facile à entretenir qu'utiliser les outils de l'applis. Refaire en code une fonction qui existe déjà n'est pas le top.
En VBA, l'idéal est de coder que si on ne peut pas faire autrement.
Je t'accorde que certaines formules d'EXCEL ne sont pas très évidentes, mais c'est comme tout, quand on les a utilisé une fois ou deux, après, on n'utilise plus que ça en se demandant bien pourquoi on refusait avant de le faire (j'ai bien mis 6 mois avant d'utiliser RECHERCHEV sur mes fichiers professionnel. Depuis, je n'utilise plus que ça. Les gens changent ... à moins que je ne devienne une vraie feignasse ? )

Ca c'était pour le fond (de ma pensée ).
Pour la forme, effectivement, savoir le faire en code n'est pas un mal ... C'est pourquoi je viens toujours en complément de vous autres spécialistes </mode passe de pommade activé > qui avez déjà donné le code. Je ne présente qu'une autre manière de faire.

Molenn
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
Passage de pommade aussi :

Nous sommes complémentaires, spécialistes Excel & VBA font la force de Codes Sources.

C'est quoi déjà les initiales de ton Comité ?
Sinon, je propose SEVSCS lol
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
58
Re,


Bon  528680 Molenn=647037 mortalino, c est fini le passage de pommade.
Tout de facon on sais même si cela règle son problème...







@+ Juli?n





: Règlement

=>
:Moteur de recherche 
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
Salut Ju,

ton code est digne d'un développeur professionnel. Ce code devrait lui aller ! ;)

Et reppassage de pommade....
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
58
Messages postés
22
Date d'inscription
samedi 22 avril 2006
Statut
Membre
Dernière intervention
20 août 2006

bonjour à tous,

et d'abord un grand merci d'avoir répondu à ma question...
en ce qui concerne le code ou les formules, je débute donc les deux me conviennent bien sûr..
Pour le moment je ne cherche que le résultat.
Donc dans tout les cas, j'aurai passer bcp de temps à écrire ce code et peut-être passer ce même temps à chercher une subtilité pour l'utilisation de la formule.

Merci encore A TOUS (developpeur et "formuleur EXCEL"), à bientôt ! :-)
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
58
Salut,


Mais de rien, tant que cela a pu t'aider.


En revanche si tu estime que ton problème est résolu alors appui sur Réponse acceptée sur le ou les post qui ont pu te dépanner.


C'est le meilleur moyen de remercier ceux qui t'aident.






@+, Julien