IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Copie range dynamique en fonction de la date


Sujet :

Macros et VBA Excel

  1. #1
    Invité
    Invité(e)
    Par défaut Copie range dynamique en fonction de la date
    Bonjour,

    J'ai une feuille avec un calendrier (chaque jour correspond à une case sur une ligne) et j'aimerais copier le calendrier à partir de la date d'aujourd'hui et jusqu'au 20ième jour suivant.

    J'ai réalisé le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Dim Col As Integer, Col2 As Integer
    Col = Sheets("Janvier-Juillet").Application.Match(Date * 1, Rows(4), 0)
    Col2 = Sheets("Janvier-Juillet").Application.Match(Date * 20, Rows(4), 0)
    Dim vrange As Range
    vrange = Sheets("Janvier-Juillet").Range(Col & "4:" & Col2 & "29")
    vrange.Copy Destination:=Sheets("Impression").Range("Z4")
    Mais j'ai une erreur "incompatibilité de type" sur la 2ème ligne

    J'ai tester plusieurs solutions sans succès, et mes recherches sur le net ont été infructueuse

    Merci d'avance pour tout conseils, aide que vous pourrez m'apporter!

  2. #2
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 040
    Points
    20 040
    Par défaut
    Bonjour

    pour quoi multiplie tu la date par 20 ? Date * 20Il faut aussi préciser la feuille concernée devant tous tes Rows...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .... Sheets("Janvier-Juillet").Rows(4) ....

  3. #3
    Invité
    Invité(e)
    Par défaut
    le Date*20 c'était pour avoir la date d'aujourd'hui + 20 jours mais visiblement c'est pas ça, j'ai fait le changement que tu me conseillais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Dim Col As Integer, Col2 As Integer
    Col = Sheets("Janvier-Juillet").Application.Match(Date * 1, Sheets("Janvier-Juillet").Rows(4), 0)
    Col2 = Sheets("Janvier-Juillet").Application.Match(Date * 1, Sheets("Janvier-Juillet").Rows(4), 0) + 20
    Dim vrange As Range
    vrange = Sheets("Janvier-Juillet").Range(Col & "4:" & Col2 & "29")
    vrange.Copy Destination:=Sheets("Statistiques et Impression").Range("Z4")
    Et maintenant j'ai une erreur sur la ligne "vrange = ...". c'est une erreur sur " Variable objet ou variable de bloc with non défini"

    Merci pour ton aide

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 6
    Points : 7
    Points
    7
    Par défaut hello
    essaye cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    Sub test()
     
     
    Dim Col As Integer, Col2 As Integer
     
     
    ''''''''''
    Sheets("Janvier-Juillet").Select
    Columns("D:D").Select 'remplace .rows(4)
        Selection.Find(What:=Date, After:=ActiveCell, LookIn:=xlFormulas _
            , LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
            MatchCase:=False, SearchFormat:=False).Activate
     
    Col = ActiveCell.Row
    ''''''''''
    Columns("D:D").Select
        Selection.Find(What:=DateAdd("d", 20, Date), After:=ActiveCell, LookIn:=xlFormulas _
            , LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
            MatchCase:=False, SearchFormat:=False).Activate
     
    Col2 = ActiveCell.Row
     
    '''''''''''
     
    Sheets("Janvier-Juillet").Range("d" & Col & ":d" & Col2).Select
    Selection.Copy Destination:=Sheets("Impression").Range("Z4")
     
    End Sub

  5. #5
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 040
    Points
    20 040
    Par défaut
    Citation Envoyé par fowlie Voir le message
    le Date*20 c'était pour avoir la date d'aujourd'hui + 20 jours...
    pourquoi ton addition + se transforme-t'il en multiplication ?

    Les fiches VBA - Comprendre : Les fonctions de Date/Heure


    tu as regardé ce que te retourner ta fonction Match ? consulte l'aide en ligne ou affiche par la valeur de col ..
    PS : surtout n'oublie pas que les Select, Activate, activeCell, ActiveSheet ,Sélection ,c'est bon pour faire un diaporama pas pour travailler efficacement sur des feuilles..

  6. #6
    Invité
    Invité(e)
    Par défaut
    @bbil Mes variables col et col2 me renvoie le bon numéro de la colonne que je veux, mais pour utiliser Range il faut la lettre non? comment convertir ce numéro en la lettre correspondante?

    @kiila ton code me provoque une erreur sur la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Columns("D:D").Select 'remplace .rows(4)
    De plus je ne veux pas copier la colonne D, mais la ligne 4 ... donc je ne suis pas sur que ton algorythme corresponde à ce que je veux. Et comme bbil a fait remarquer :

    surtout n'oublie pas que les Select, Activate, activeCell, ActiveSheet ,Sélection ,c'est bon pour faire un diaporama pas pour travailler efficacement sur des feuilles..

  7. #7
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 040
    Points
    20 040
    Par défaut
    Ok .. utilise alors cells pour définir ta plage

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Dim vrange As Range 
    with Sheets("Janvier-Juillet").
         Set vrange = .Range(.Cells(4, Col), .Cells(29, Col2))
    en with

  8. #8
    Invité
    Invité(e)
    Par défaut
    Génial! Merci beaucoup pour ton aide =)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Affichage dynamique en fonction d'un champ et la date courante
    Par Catarssis dans le forum Développement Sharepoint
    Réponses: 2
    Dernier message: 10/04/2013, 12h51
  2. Range dynamique pour fonctions
    Par Wistar dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 22/11/2011, 10h22
  3. [MySQL] Afficher enregistrement dynamiquement en fonction de la date du jour
    Par Cedrinho dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 17/08/2010, 06h56
  4. Copy Paste Value en fonction de la date
    Par nono1712 dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 13/02/2009, 18h36

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo