[Catégorie modifiée VB6 -> VBA] Mise à jour entre classeurs

shixo Messages postés 3 Date d'inscription dimanche 11 novembre 2007 Statut Membre Dernière intervention 18 juin 2011 - 16 juin 2011 à 16:50
shixo Messages postés 3 Date d'inscription dimanche 11 novembre 2007 Statut Membre Dernière intervention 18 juin 2011 - 18 juin 2011 à 13:05
Bonjour,

Je souhaite réaliser un script vba qui effectue la mise a jour (modification, suppression et ajout) d'un tableau (M2) dans le classeur MajBD2 à partir d'un tableau(M1) situé dans un autre classeur MajBD.

Etant débutant en VBA, j'ai néanmois réussi à faire la mise à jour concernant l'ajout. Cependant je perds la mise en forme que je souhaite conserver.

Script:

Sub majModifAjout()
Set Src = Sheets("M1")
Set Dest = Sheets("M3")
For Each c In Range(Src.[A15], Src.[A65000].End(xlUp))
p = Application.Match(c, Dest.[B20:B1000], 0)
If Not IsError(p) Then
Dest.Cells(5 + p, 5) = c.Offset(0, 5)
Else
Dest.[B65000].End(xlUp).Offset(1, 0) = c
Dest.[B65000].End(xlUp).Offset(0, 1) = c.Offset(0, 1)
Dest.[B65000].End(xlUp).Offset(0, 2) = c.Offset(0, 2)
Dest.[B65000].End(xlUp).Offset(0, 3) = c.Offset(0, 3)
Dest.[B65000].End(xlUp).Offset(0, 4) = c.Offset(0, 4)
Dest.[B65000].End(xlUp).Offset(0, 5) = c.Offset(0, 5)

End If
Next c
End Sub

J'aimerai avoir de l'aide pour finaliser ce script sachant qu'il s'agit d'une tache qui m'est demandée pour fin Juin dans le cadre de mon stage.

Je vous remercie par avance de l'aide que vous m'apporterez.

2 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
16 juin 2011 à 20:05
Salut

Note :
- VB6 n'est pas la version 6 de VBA : Catégorie modifiée
- Quand tu colles du code, merci d'utiliser la coloration syntaxique (3ème icone à droite) : Cela conserve l'indentation du code (décalages de début de ligne) = plus facile à relire, surtout quand il y a des boucles.

Ça fait plaisir de voir un débutant qui utilise les bonne techniques (For Each, IsError, Offset, ...)

Quand tu écris, par exemple,
Dest.Cells(5 + p, 5) = c.Offset(0, 5)
sans avoir précisé quel attribut transférer, l'attribut par défaut est .Value.
De préférence, il vaut mieux toujours préciser ce qu'on veut récupérer, ça évite quelques fois des anomalies et c'est surtout plus complet à relire.

" je perds la mise en forme "
Parles-tu du format d'affichage de la donnée ou bien de la cosmétique qui accompagne tes cellules (couleurs, encadrements, etc)
Regarde si les autres attributs .Value2 et .Text peuvent répondre à ton souhait.
Sinon, pour tout ce qui est cosmétique, le plus aisé est de faire un .Copy puis un .PasteSpecial dans lequel tu pourras préciser ce que tu souhaites copier (valeur, formule, mise en forme, etc), notamment xlPasteAll

Vala
Jack, =fr MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
shixo Messages postés 3 Date d'inscription dimanche 11 novembre 2007 Statut Membre Dernière intervention 18 juin 2011
18 juin 2011 à 13:05
Bonjour,

Je te remercie pour les pistes de recherches. En effet je parlais de la cosmétique et j'ai finalement résolu mon problème avec un .copy destination.

Cdt
0
Rejoignez-nous