[Catégorie modifiée VB6 -> VBA] Mise à jour entre classeurs
shixo
Messages postés3Date d'inscriptiondimanche 11 novembre 2007StatutMembreDernière intervention18 juin 2011
-
16 juin 2011 à 16:50
shixo
Messages postés3Date d'inscriptiondimanche 11 novembre 2007StatutMembreDernière intervention18 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.
A voir également:
[Catégorie modifiée VB6 -> VBA] Mise à jour entre classeurs
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 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)