déclaration de date

are

XLDnaute Nouveau
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
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : déclaration de date

Bonjour Are, bonour le forum,

Marrant comme TON code me parle grave !... Si tu n'as aucune plage nommée XX, XXX, XXXX, toutes les lignes du type :
Code:
pl2 = .Range("XX") 'définit la plage pl
vont planter...
sinon ton code modifié :
Code:
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(.Range("A1")) Then
        date1 = A1
    Else
        MsgBox "Erreur"
        .Range("A1").Select
        Exit Sub
    End If
    If IsDate(.Range("A5")) Then
        date2 = A5
    Else
        MsgBox "Erreur"
        .Range("A5").Select
        Exit Sub
    End If
End With
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
        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
    Copy.Cells(5, 1).Value = date1
End If
End Sub
 

are

XLDnaute Nouveau
Re : déclaration de date

Bonjour Robert,

Lol ouais désolé je l'avais déjà "pompé "en grande partie sur un topic sur lequel tu avais donné la solution (j'aurais dû mettre le copyright désolé quand je disais mon code je parlais plus du fichier :eek:). Oui les plages XX sont toutes définies. Comme je débute je farfouille énormément sur le forum.

Merci pour la précédente solution et pour l'actuelle.


Cordialement,
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : déclaration de date

Bonjour Are, bonjour le forum,

Arff !... Pas de copyright faut pas déc...ner. C'est juste que ça m'a fait tilter car je suis pratiquement le seul à écrire :
Code:
ActiveCell.Select

Ce qui fait beaucoup rire un certain José à qui je pense très fort aujourd'hui et que même j'embrasse grave malgré nos hétérosexualités assumées et notre dégoût mutuel pour les peaux barbues (enfin sur le visage veux-je dire)...
 

are

XLDnaute Nouveau
Re : déclaration de date

Bonjour,

Ok j'ai testé déjà sa débog pas :p. après bizarre quelquesoit les dates il écrase la dernière colonne de données mais ne fait pas la MAJ sur les autres onglets ni sur la cellule A5 . Je vais relire parce que je comprend pas.

NP pas de copyright une petite réf la prochaine fois : ) (activecell.select je dois reconnaitre que j'avais pas compris mais je me disais c'était comme option explicit ^^).
 

Discussions similaires

Réponses
3
Affichages
211