OVH Cloud OVH Cloud

Comparaisons entre fichiers

2 réponses
Avatar
youpi!
Bonjour tout le monde,

2 classeurs avec chacun 1 liste de 4500 lignes sur 8 colonnes
1 des colonnes de chaque classeur contient un code unique

J'ai besoin de 3 choses :
1 - mettre a jour la ligne du classeur 1 à partir du classeur 2 si le code
existe dans les deux
2 - si le code existe en 2 mais pas en 1, ajouter/copier ligne classeur 2
sur classeur 1
3 - si le code existe en 1 mais pas en 2, copier ligne classeur 1 dans
classeur 3 puis supprimer ligne classeur 1

Pour la comparaison sur les codes, je pense utiliser un recherchev ou du
moins son équivalent vba, mais ce que je ne sais pas faire, c'est passer
d'un classeur à l'autre et se positionner sur une feuille donnée. J'ai
essayé ce qui suit mais je me prends une erreur de type ???

Dim ActualWBook, UpdtBook, As String '(classeur 1, classeur 2)
UpdtBook = Application.GetOpenFilename("Excel Files (*.xls), *.xls")
Workbooks.Open Filename:=UpdtBook
Workbook(UpdtBook).activate

En clair, si je passe par une variable, j'obtiens une erreur (alors que la
valeur de la var est correcte), si je code le nom en dur, ça passe !?

Bref, si qqun à un lien qui parle de de genre de manips, je suis preneur
(j'ai déjà fouiné sur les grands classiques genre Excelabo, bien entendu).

Mercizatous
Alain

2 réponses

Avatar
j
chez moi, en retirant la virgule avant "as string" et le
"Workbook(UpdtBook).activate", ça marche
le Workbook(UpdtBook).activate est très incorrect (et tout à fait inutile
puisque le classeur qui vient d'être ouvert est automatiquement actif)
il faut dire Workbooks et pas workbook et mettre entre les parenthèses le
nom d'un fichier ouvert
si tu y tiens tu peux écrire :
nomfich = UpdtBook
Do While InStr(nomfich, "") > 0
nomfich = Right(nomfich, Len(nomfich) - 1)
Loop
Workbooks(nomfich).Activate

ou bien
Set fich = Workbooks.Open(UpdtBook)
.....
Workbooks(fich.Name).Activate

enfin,
Application.Dialogs(xlDialogOpen).Show
reste quand même plus simple que tout ça...



"youpi!" a écrit dans le message de news:

Bonjour tout le monde,


Dim ActualWBook, UpdtBook, As String '(classeur 1, classeur 2)
UpdtBook = Application.GetOpenFilename("Excel Files (*.xls), *.xls")
Workbooks.Open Filename:=UpdtBook
Workbook(UpdtBook).activate

En clair, si je passe par une variable, j'obtiens une erreur (alors que la
valeur de la var est correcte), si je code le nom en dur, ça passe !?

Bref, si qqun à un lien qui parle de de genre de manips, je suis preneur
(j'ai déjà fouiné sur les grands classiques genre Excelabo, bien entendu).

Mercizatous
Alain




Avatar
youpi!
"" a écrit
chez moi, en retirant la virgule avant "as string" et le
"Workbook(UpdtBook).activate", ça marche
le Workbook(UpdtBook).activate est très incorrect (et tout à fait
inutile

puisque le classeur qui vient d'être ouvert est automatiquement actif)


Bien Maître, je prends note que ma vision du pb est coditiquement incorrecte
:-)

il faut dire Workbooks et pas workbook et mettre entre les parenthèses le
nom d'un fichier ouvert
si tu y tiens tu peux écrire :
nomfich = UpdtBook
Do While InStr(nomfich, "") > 0
nomfich = Right(nomfich, Len(nomfich) - 1)
Loop
Workbooks(nomfich).Activate

ou bien
Set fich = Workbooks.Open(UpdtBook)
.....
Workbooks(fich.Name).Activate

enfin,
Application.Dialogs(xlDialogOpen).Show
reste quand même plus simple que tout ça...


Groumph ! J'avais mal cherché, alors. Bon, ben Yapuka.
En tous cas, merci Jacques.

Alain