[excel vba] mise à jour données

devba77 Messages postés 22 Date d'inscription samedi 22 avril 2006 Statut Membre Dernière intervention 20 août 2006 - 16 août 2006 à 22:51
jrivet Messages postés 7393 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 - 21 août 2006 à 08:47
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

jrivet Messages postés 7393 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
17 août 2006 à 09:09
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
0
Molenn Messages postés 797 Date d'inscription mardi 7 juin 2005 Statut Membre Dernière intervention 23 février 2011 7
17 août 2006 à 10:25
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 ^^
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 17
17 août 2006 à 10:33
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"
0
jrivet Messages postés 7393 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
17 août 2006 à 10:40
>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
0

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

Posez votre question
Molenn Messages postés 797 Date d'inscription mardi 7 juin 2005 Statut Membre Dernière intervention 23 février 2011 7
17 août 2006 à 15:04
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
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 17
17 août 2006 à 15:45
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
0
jrivet Messages postés 7393 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
17 août 2006 à 16:02
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 
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 17
17 août 2006 à 16:06
Salut Ju,

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

Et reppassage de pommade....
0
jrivet Messages postés 7393 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
17 août 2006 à 16:08
0
devba77 Messages postés 22 Date d'inscription samedi 22 avril 2006 Statut Membre Dernière intervention 20 août 2006
20 août 2006 à 21:17
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 ! :-)
0
jrivet Messages postés 7393 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
21 août 2006 à 08:47
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
0
Rejoignez-nous