Bonjour,
Je débute sur VBA et j'aurais besoin d'un coup de main (je suis aussi ouvert aux idées d'amélioration 🙂) en code vba. J'ai cherché sur internet mais j'ai du mal à trouver des utilisations précises. J'espère donc qu'une âme charitable aura peût-être la bonté de jeter un coup d'oeil sur mon code et me dire pourquoi j'ai autant de débogage sur les variables date ou sinon pourquoi il ne se passse rien. J'ai un fichier de mise à jour base clientèle (prôtégé je ne peux donc même pas vous trnasmettre une version épurée 🙁 . J'essaierai donc d'être le plus explicite possible. Ma macro de copier coller fonctionne très bien j'ai plus de pb sur la déclaration de mes variables date et des conditions .
J'ai monté une macro VBA bouton sur la feuill1. Il y a deux dates :
1 date de dernière mise à jour fichier (janvier 2013 par exemple) dans la case A5.
1 date de rentrée de donnée en A1. (février 2013 par exemple) dans la case A1
Je veux que
-si je rentre une date antérieure à la dernière mise à jour fichier il y ait une msgbox pour me dire "les données ont été historisées". Si sur A1 je rentre novembre 2012 par exemple .
-Si je rentre une date égale à la date de dernière mise à jour mon copiercoller écrase les dernières données . En l'exemple si en A1 je rentre janvier 2013
-Si je rentre une date supérieur à la date de dernière mise à jour mon copiercoller se met à la suite et met à jour la date de dernière mise a jour. donc A5 prend la valeur de A1.
Comme je l'ai dit les parties de copiercoller marchent c'est plus les conditions et les déclarations variable date qui ont du mal a prendre.
Voici un extrait d ma macro
Sub Bouton1_Cliquer()
Dim pl1 As Range 'déclare la variable pl (PLage)
Dim dest1 As Range 'déclare la variable dest (DESTination)
Dim pl2 As Range 'déclare la variable pl (PLage)
Dim dest2 As Range 'déclare la variable dest (DESTination)
Dim pl3 As Range 'déclare la variable pl (PLage)
Dim dest3 As Range 'déclare la variable dest (DESTination)
Dim pl4 As Range 'déclare la variable pl (PLage)
Dim dest4 As Range 'déclare la variable dest (DESTination)
Dim date1 As Date
Dim date2 As Date
ActiveCell.Select 'enlève le focus au bouton
With Sheets("Feuil1")
IF IsDate(Date(A1)) THEN
date1 = A1
date2 = A5 ELSE
MsgBox "Erreur"
Exit Sub
End IF
IF date1<date2 THEN
MsgBox "Les données demandées ont été historisées"
Exit sub
ElseIF date1=date2 THEN
With Sheets("Feuil2") 'prend en compte l'onglet "Feuil2"
Set pl1 = .Range("XXXX") 'définit la plage pl
Set dest1 = .Range("IV30").End(xlToLeft).Offset(0, 0) 'définit la cellule de destination
Set pl2 = .Range("XX") 'définit la plage pl
Set dest2 = .Range("IV39").End(xlToLeft).Offset(0, 0) 'définit la cellule de destination
End With 'fin de la prise en compte de l'onglet "Feuil2"
With Sheets("Feuil3") 'prend en compte l'onglet "Feuil3"
Set pl3 = .Range("XXXX") 'définit la plage pl
Set dest3 = .Range("IV34").End(xlToLeft).Offset(0, 0) 'définit la cellule de destination
Set pl4 = .Range("XX") 'définit la plage pl
Set dest4 = .Range("IV47").End(xlToLeft).Offset(0, 0) 'définit la cellule de destination
End With 'fin de la prise en compte de l'onglet "Feuil3"
pl1.Copy
dest1.PasteSpecial Paste:=xlPasteValues 'copie la plage pl dans la cellule de destination
pl2.Copy
dest2.PasteSpecial Paste:=xlPasteValues 'copie la plage pl dans la cellule de destination
pl3.Copy
dest3.PasteSpecial Paste:=xlPasteValues 'copie la plage pl dans la cellule de destination
pl4.Copy
dest4.PasteSpecial Paste:=xlPasteValues 'copie la plage pl dans la cellule de destination
ELSE
With Sheets("Feuil2") 'prend en compte l'onglet "Feuil2"
Set pl1 = .Range("XXXX") 'définit la plage pl
Set dest1 = .Range("IV30").End(xlToLeft).Offset(0, 1) 'définit la cellule de destination
Set pl2 = .Range("XXX") 'définit la plage pl
Set dest2 = .Range("IV39").End(xlToLeft).Offset(0, 1) 'définit la cellule de destination
End With 'fin de la prise en compte de l'onglet "Feuil2"
With Sheets("Feuil3") 'prend en compte l'onglet "Feuil3"
Set pl3 = .Range("XXXXX") 'définit la plage pl
Set dest3 = .Range("IV34").End(xlToLeft).Offset(0, 1) 'définit la cellule de destination
Set pl4 = .Range("XXXX") 'définit la plage pl
Set dest4 = .Range("IV47").End(xlToLeft).Offset(0, 1) 'définit la cellule de destination
End With 'fin de la prise en compte de l'onglet "Feuil3"
pl1.Copy
dest1.PasteSpecial Paste:=xlPasteValues 'copie la plage pl dans la cellule de destination
pl2.Copy
dest2.PasteSpecial Paste:=xlPasteValues 'copie la plage pl dans la cellule de destination
pl3.Copy
dest3.PasteSpecial Paste:=xlPasteValues 'copie la plage pl dans la cellule de destination
pl4.Copy
dest4.PasteSpecial Paste:=xlPasteValues 'copie la plage pl dans la cellule de destination
date1.copy.Cells(5,1)
End IF
End Sub
En vous remerciant par avance,
Cordialement,
ARE
Je débute sur VBA et j'aurais besoin d'un coup de main (je suis aussi ouvert aux idées d'amélioration 🙂) en code vba. J'ai cherché sur internet mais j'ai du mal à trouver des utilisations précises. J'espère donc qu'une âme charitable aura peût-être la bonté de jeter un coup d'oeil sur mon code et me dire pourquoi j'ai autant de débogage sur les variables date ou sinon pourquoi il ne se passse rien. J'ai un fichier de mise à jour base clientèle (prôtégé je ne peux donc même pas vous trnasmettre une version épurée 🙁 . J'essaierai donc d'être le plus explicite possible. Ma macro de copier coller fonctionne très bien j'ai plus de pb sur la déclaration de mes variables date et des conditions .
J'ai monté une macro VBA bouton sur la feuill1. Il y a deux dates :
1 date de dernière mise à jour fichier (janvier 2013 par exemple) dans la case A5.
1 date de rentrée de donnée en A1. (février 2013 par exemple) dans la case A1
Je veux que
-si je rentre une date antérieure à la dernière mise à jour fichier il y ait une msgbox pour me dire "les données ont été historisées". Si sur A1 je rentre novembre 2012 par exemple .
-Si je rentre une date égale à la date de dernière mise à jour mon copiercoller écrase les dernières données . En l'exemple si en A1 je rentre janvier 2013
-Si je rentre une date supérieur à la date de dernière mise à jour mon copiercoller se met à la suite et met à jour la date de dernière mise a jour. donc A5 prend la valeur de A1.
Comme je l'ai dit les parties de copiercoller marchent c'est plus les conditions et les déclarations variable date qui ont du mal a prendre.
Voici un extrait d ma macro
Sub Bouton1_Cliquer()
Dim pl1 As Range 'déclare la variable pl (PLage)
Dim dest1 As Range 'déclare la variable dest (DESTination)
Dim pl2 As Range 'déclare la variable pl (PLage)
Dim dest2 As Range 'déclare la variable dest (DESTination)
Dim pl3 As Range 'déclare la variable pl (PLage)
Dim dest3 As Range 'déclare la variable dest (DESTination)
Dim pl4 As Range 'déclare la variable pl (PLage)
Dim dest4 As Range 'déclare la variable dest (DESTination)
Dim date1 As Date
Dim date2 As Date
ActiveCell.Select 'enlève le focus au bouton
With Sheets("Feuil1")
IF IsDate(Date(A1)) THEN
date1 = A1
date2 = A5 ELSE
MsgBox "Erreur"
Exit Sub
End IF
IF date1<date2 THEN
MsgBox "Les données demandées ont été historisées"
Exit sub
ElseIF date1=date2 THEN
With Sheets("Feuil2") 'prend en compte l'onglet "Feuil2"
Set pl1 = .Range("XXXX") 'définit la plage pl
Set dest1 = .Range("IV30").End(xlToLeft).Offset(0, 0) 'définit la cellule de destination
Set pl2 = .Range("XX") 'définit la plage pl
Set dest2 = .Range("IV39").End(xlToLeft).Offset(0, 0) 'définit la cellule de destination
End With 'fin de la prise en compte de l'onglet "Feuil2"
With Sheets("Feuil3") 'prend en compte l'onglet "Feuil3"
Set pl3 = .Range("XXXX") 'définit la plage pl
Set dest3 = .Range("IV34").End(xlToLeft).Offset(0, 0) 'définit la cellule de destination
Set pl4 = .Range("XX") 'définit la plage pl
Set dest4 = .Range("IV47").End(xlToLeft).Offset(0, 0) 'définit la cellule de destination
End With 'fin de la prise en compte de l'onglet "Feuil3"
pl1.Copy
dest1.PasteSpecial Paste:=xlPasteValues 'copie la plage pl dans la cellule de destination
pl2.Copy
dest2.PasteSpecial Paste:=xlPasteValues 'copie la plage pl dans la cellule de destination
pl3.Copy
dest3.PasteSpecial Paste:=xlPasteValues 'copie la plage pl dans la cellule de destination
pl4.Copy
dest4.PasteSpecial Paste:=xlPasteValues 'copie la plage pl dans la cellule de destination
ELSE
With Sheets("Feuil2") 'prend en compte l'onglet "Feuil2"
Set pl1 = .Range("XXXX") 'définit la plage pl
Set dest1 = .Range("IV30").End(xlToLeft).Offset(0, 1) 'définit la cellule de destination
Set pl2 = .Range("XXX") 'définit la plage pl
Set dest2 = .Range("IV39").End(xlToLeft).Offset(0, 1) 'définit la cellule de destination
End With 'fin de la prise en compte de l'onglet "Feuil2"
With Sheets("Feuil3") 'prend en compte l'onglet "Feuil3"
Set pl3 = .Range("XXXXX") 'définit la plage pl
Set dest3 = .Range("IV34").End(xlToLeft).Offset(0, 1) 'définit la cellule de destination
Set pl4 = .Range("XXXX") 'définit la plage pl
Set dest4 = .Range("IV47").End(xlToLeft).Offset(0, 1) 'définit la cellule de destination
End With 'fin de la prise en compte de l'onglet "Feuil3"
pl1.Copy
dest1.PasteSpecial Paste:=xlPasteValues 'copie la plage pl dans la cellule de destination
pl2.Copy
dest2.PasteSpecial Paste:=xlPasteValues 'copie la plage pl dans la cellule de destination
pl3.Copy
dest3.PasteSpecial Paste:=xlPasteValues 'copie la plage pl dans la cellule de destination
pl4.Copy
dest4.PasteSpecial Paste:=xlPasteValues 'copie la plage pl dans la cellule de destination
date1.copy.Cells(5,1)
End IF
End Sub
En vous remerciant par avance,
Cordialement,
ARE