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 :

Problème pour compléter un tableau


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Contrôle de gestion
    Inscrit en
    Février 2014
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Contrôle de gestion

    Informations forums :
    Inscription : Février 2014
    Messages : 19
    Par défaut Problème pour compléter un tableau
    Bonjour,

    Je tente de compléter un tableau vba à l'aide du code ci dessous :

    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
    29
    30
    31
    32
    33
    34
    35
    Sub Tablo()
     
    Dim an%, nbj%, i%, c%, dateDébut As Date, dep As Range, mois, jour As Long
    Dim pâques, Lundi_de_Pâques, Ascension, Pentecôte As Variant
    Dim saisie, Jour_de_noël As Variant
    Dim Longue, Large As Variant
        Cells.Select
        Selection.Delete Shift:=xlUp
     
    saisie = Application.InputBox("Saisir l'année de début du tableau ? ", "Saisie de l'année de référence", 0, 500, 500, , , 1)
     
    If Not IsNumeric(saisie) Then Exit Sub
     
    If saisie = False Then MsgBox "Vous n'avez rien saisi"
     
    dateDébut = "1/5/" & saisie 'Première date
     
    Set dep = [A1] 'Coin supérieur gauche du calendrier.
     
     
    nbj = DateSerial(Year(dateDébut) + 1, Month((dateDébut)), Day(dateDébut)) - dateDébut
     
    Dim tabdate() As Variant
    ReDim tabdate(nbj)
    Dim iii As Long
    For iii = LBound(tabdate, 1) To UBound(tabdate, 1)
    tabdate = Range(dateDébut)
    dateDébut = dateDébut + 1
    Next
    Sheets("Feuil1").Activate
    Application.EnableEvents = False
    With Sheets("Feuil1")
    .Range("B5").Resize(UBound(tabdate, 1), UBound(tabdate, 2)) = tabdate
    End With
    Application.EnableEvents = True

    Cela "plante" sur l'instruction tabdate = Range(dateDébut)

    Savez vous pourquoi et pouvez vous m'expliquer s'il vous plaît ?

    D'avance merci.

    Philippe

  2. #2
    Membre Expert
    Homme Profil pro
    Retraité
    Inscrit en
    Juillet 2009
    Messages
    1 794
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 86
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2009
    Messages : 1 794
    Par défaut
    Bonjour,
    Vous avez dimensionné un tableau à 1 dimension
    Or dans la boucle vouse mettez tabdate = ....
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For iii = LBound(tabdate, 1) To UBound(tabdate, 1)
    tabdate = Range(dateDébut)
    dateDébut = dateDébut + 1
    Essayez
    tabdate(iii)=dateDébut

    Mais alors une nouvelle erreur apparaît là
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    With Sheets("Feuil1")
    .Range("B5").Resize(UBound(tabdate, 1), UBound(tabdate, 2)) = tabdate
    End With
    car le tableau est à une dimension et vous évoquez une deuxième dimension
    ce qui est hors indice évidemment

  3. #3
    Membre averti
    Homme Profil pro
    Contrôle de gestion
    Inscrit en
    Février 2014
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Contrôle de gestion

    Informations forums :
    Inscription : Février 2014
    Messages : 19
    Par défaut
    Merci pour votre réponse.

    Toutefois, j'avais aussi essayé d'ajouter la variable "iii" à tabdate mais cela donne Nom : Capture.PNG
Affichages : 187
Taille : 8,7 Ko

    Je pense que range attend autre chose qu'une variable et je bloque.

    Cordialement.

    Philippe


    En fait, je viens de trouver et c'était tout simple. il suffit d'enlever le range en tapant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tabdate(iii) = dateDébut
    et l'affaire est jouée !

    En revanche, il faut que je revois ma copie sur la date puisqu'il me recopie 365 fois (dans la cas ou ma variable dateDébut est 2014 ) le 1/5/2014 sans tenir compte de l'instruction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dateDébut = dateDébut + 1
    qui devrait avancer la date d'un jour.

    Cordialement.

    Philippe

  4. #4
    Membre averti
    Homme Profil pro
    Contrôle de gestion
    Inscrit en
    Février 2014
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Contrôle de gestion

    Informations forums :
    Inscription : Février 2014
    Messages : 19
    Par défaut
    Re bonsoir,

    J'ai avancé et cela ne plante plus. En revanche, le résultat obtenu n'est pas celui espéré :

    avec le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("Feuil1").Range(Cells(1, 1), Cells(UBound(tabdate), 1)).Value = Application.WorksheetFunction.Transpose(tabdate)
    J'ai bien quelque chose qui se copie sur ma "Feuil1" mais pas ce que j'espère.

    En effet, au lieu de me copier la liste des dates allant du 1/5/N au 30/4/N+1, j'ai une succession de mauvaise date et de bonnes dates (voir image ci dessous) :

    Nom : Capture.PNG
Affichages : 148
Taille : 4,9 Ko

    J'ai bien vérifié dans ma fenêtre variable que "tabdate" contient les bons éléments (voir image ci-dessous):
    Nom : Capture.PNG
Affichages : 133
Taille : 8,9 Ko

    L'erreur semble séquentielle puisqu'elle ne se reproduit que sur les douze premiers jours de chaque moi.

    Je vous recopie ci dessous l'ensemble de mon code pour plus de compréhension :

    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
    29
    30
    31
    32
    33
    Sub Tablo()
     
    Dim an%, nbj%, i%, c%, dateDébut As Date, dep As Range, mois, jour As Long
    Dim pâques, Lundi_de_Pâques, Ascension, Pentecôte As Variant
    Dim saisie, Jour_de_noël As Variant
    Dim Longue, Large As Variant
        Cells.Select
        Selection.Delete Shift:=xlUp
     
    saisie = Application.InputBox("Saisir l'année de début du tableau ? ", "Saisie de l'année de référence", 0, 500, 500, , , 1)
     
    If Not IsNumeric(saisie) Then Exit Sub
     
    If saisie = False Then MsgBox "Vous n'avez rien saisi"
     
    dateDébut = "1/5/" & saisie 'Première date
     
    Set dep = [A1] 'Coin supérieur gauche du calendrier.
     
     
    nbj = DateSerial(Year(dateDébut) + 1, Month((dateDébut)), Day(dateDébut)) - dateDébut
     
    Dim tabdate() As Variant
    ReDim tabdate(nbj)
    Dim iii As Long
    For iii = LBound(tabdate, 1) To UBound(tabdate, 1)
    tabdate(iii) = dateDébut
    dateDébut = dateDébut + 1
    Next
    Sheets("Feuil1").Activate
    Application.EnableEvents = False
    Sheets("Feuil1").Range(Cells(1, 1), Cells(UBound(tabdate), 1)).Value = Application.WorksheetFunction.Transpose(tabdate)
    Application.EnableEvents = True
    Merci pour votre aide.

    Cordiales salutations.

    Philippe

  5. #5
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Bonjour,

    Ici, sans passer par un tableau :
    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
     
    Sub Test()
     
        Dim dateDebut As Date
        Dim Nbj As Long
        Dim Saisie
     
        Saisie = Application.InputBox("Saisir l'année de début du tableau ? ", "Saisie de l'année de référence", 0, 500, 500, , , 1)
     
        If Not IsNumeric(Saisie) Or Saisie = False Then Exit Sub
     
        dateDebut = "1/5/" & Saisie 'Première date
     
        Nbj = DateSerial(Year(dateDebut) + 1, Month((dateDebut)), Day(dateDebut)) - dateDebut
     
        Range("A1").Value = dateDebut
        Range("A1").Offset(1, 0).Value = dateDebut + 1
        Range("A1").AutoFill Range(Range("A1"), Range("A1").Offset(Nbj))
     
    End Sub
    Hervé.

    Et tu peux même supprimer cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Range("A1").Offset(1, 0).Value = dateDebut + 1
    Hervé.

  6. #6
    Membre averti
    Homme Profil pro
    Contrôle de gestion
    Inscrit en
    Février 2014
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Contrôle de gestion

    Informations forums :
    Inscription : Février 2014
    Messages : 19
    Par défaut
    Bonjour et merci pour cette réponse.

    Je souhaite toutefois passer par l'utilisation de tableau afin de gagner du temps de traitement (j'avais déjà réussi l'opération sans tableau mais cela dure trop longtemps).

    Pour aller plus loin dans l'observation du résultat décrit dans les post plus haut, je constate que, lorsque ma macro va copier les données contenues dans mon tableau sur la "feuil1",
    les douze premières valeurs mensuelles ont un format date de type MM/JJ/AAAA alors que le reste des dates du mois sont recopiées sous un format "standard".

    Merci pour vos remarques et solutions.

    Cordiale salutations.

    Philippe

Discussions similaires

  1. probléme pour parcourir un tableau dans une JSP
    Par nightcyborg dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 02/12/2007, 17h28
  2. Problème pour remplir un tableau.
    Par sandball22 dans le forum C
    Réponses: 2
    Dernier message: 02/05/2007, 14h54
  3. [MySQL] Problème pour trier un tableau
    Par jojo57 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 11/04/2007, 13h12
  4. problème pour trier un tableau de hashage
    Par Jasmine80 dans le forum Langage
    Réponses: 1
    Dernier message: 25/02/2007, 13h02
  5. [Tableaux] Problème pour contrôler un tableau
    Par renaud26 dans le forum Langage
    Réponses: 5
    Dernier message: 10/04/2006, 11h45

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