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 :

pb pour remplir 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
    Étudiant
    Inscrit en
    Juillet 2016
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2016
    Messages : 23
    Par défaut pb pour remplir tableau
    Bonjour à tous et a toutes,

    j'aurais svp besoin d'aide pour ma macro:
    enfaite je lui demande d'ouvrir un fichier puis de le trier et ordonner et enfin je remplis mon tableau, jusqu'ici tout va bien!! pour le remplissage de mon tableau je veux qu'elle s'arrete de s'executer si elle rencontre la date du 02/01/2015.
    seulement ca marche pas :/ et continue à remplir jusqu'au bout.

    code:
    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
     
    Option Base 1
     
    Sub test()
    Application.DisplayAlerts = False
    Dim DerLig As Long
    Dim Wbk1 As Workbook
    Dim tab2() As Variant
    Set Wbk1 = ThisWorkbook
    Dim a As Date
    a = Format(Date, "d m yyyy")
    a = 2 / 1 / 2015
     
    Workbooks.Open Filename:="\\ISSOU-BI01\Export\ACH\ACH_Archives\ACH-DSI-004-04_Lignes OA en cours et recues depuis 2ans.csv", Local:=True
     
    With Workbooks(Workbooks.Count) ' sélectionner toutes les feuilles qu'ilya dans le classeur ouvert juste avant
        With .Sheets("ACH-DSI-004-04_Lignes OA en cou")
     
     
            DerLig = .Range("j" & Rows.Count).End(xlUp).Row
     
            .Columns("A:AX").AutoFilter Field:=50, Criteria1:=Array("36E"), Operator:=xlFilterValues
            .Columns("A:AX").AutoFilter Field:=4, Criteria1:=Array("Livré"), Operator:=xlFilterValues
            .Columns("A:AX").Sort key1:=Range("W2"), order1:=xlAscending, Header:=xlYes
     
            ReDim tab2(1 To DerLig, 1 To 3) ' ca permet d'avoir un tableau à derlig2 ligne et à 4 colonnes
     
                'alimentation du tableau de la feuille 1
            Set plageVisible = .UsedRange.SpecialCells(xlCellTypeVisible)
            'Set plageVisible = .Range("A1:AX" & Lig).SpecialCells(xlCellTypeVisible)
     
            K = 1
            For Each Ligne In plageVisible.Rows
     
                tab2(K, 1) = .Range("j" & Ligne.Row)
                tab2(K, 2) = .Range("I" & Ligne.Row)
                tab2(K, 3) = .Range("W" & Ligne.Row)
     
                K = K + 1
                If Cells(K, 23).Value = a Then
                    Exit For
                End If
            Next Ligne
     
     
        End With
        .Close Savechanges:=False ' fermeture du classeur sans rien modifier
     
    End With
    With Wbk1
     
    For K = 1 To DerLig
        .Sheets("Feuil4").Range("A" & K) = tab2(K, 1)
        .Sheets("Feuil4").Range("B" & K) = tab2(K, 2)
        .Sheets("Feuil4").Range("C" & K) = tab2(K, 3)
     
    Next
     
    .Sheets("Feuil4").Columns("A:C").AutoFit
     
    End With
    End Sub

  2. #2
    Membre expérimenté
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 128
    Par défaut
    Bonjour,


    Je le répète encore une fois: si tu veux qu'on fasse l'effort de t'aider, fait l'effort de poster un sujet aux "normes".
    C'est à dire:

    - explique bien ton problème (tu l'as bien fais en début de sujet )
    - utiliser les balises à bon escient ! ( Si tu as du code à mettre, met seulement le code utile et utilise les balises [ CODE] [ /CODE] que tu as en appuyant sur le bouton représenté par un gros # )

    Merci !

    Slooby

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2016
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2016
    Messages : 23
    Par défaut
    Bonjour Slooby,
    voila c'est fait dsl pour l'erreur.
    c'est vrai que c'est plus simple à traiter comme ca

  4. #4
    Membre expérimenté
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 128
    Par défaut
    Bonjour,


    C'est très certainement ton
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim a As Date
    a = Format(Date, "d m yyyy")
    a = 2 / 1 / 2015
    Qui pose problème. Si tu regarde dans ta fenêtres Watches, tu verras que a = 00:01:26 donc c'est pas du tout ce que tu veux !



    Tes cellules en colonne 23 contiennent des dates au format 13/7/16 (pour aujourd'hui) ?
    Ou alors c'est du texte qui vaut "13/7/16" ?



    Slooby


    EDIT:
    La fonction FORMAT renvoie un STRING !!!
    Elle ne sert qu'à l'affichage d'une date, elle ne va pas venir modifier la variable de type Date

  5. #5
    Membre très actif
    Homme Profil pro
    Analyste programmeur
    Inscrit en
    Mai 2014
    Messages
    393
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Analyste programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2014
    Messages : 393
    Par défaut
    Bonjour,

    aurais-tu un exemple du classeur?

    Ensuite, tu utilises des dates, je te conseille d'utiliser DateDiff pour effectuer tes comparaisons. Ainsi, pas besoin de modifier le format des cellules dans ta plage de données, pas de sensibilité à la casse, etc... .

    En plus de cela, je simplifierais certaines choses et j'améliorerais la performance en modifiant un peu tes With et en ajoutant quelques variables :
    Essaye avec ceci :
    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
     
    Sub test()
        Dim DerLig As Long, k As Long, i As Long, Ligne As Long
        Dim Wbk1 As Workbook, wbkFin As Workbook
        Dim feui As Worksheet
        Dim tab2() As Variant
        Dim a As Date
     
        Application.DisplayAlerts = False
        Set Wbk1 = ThisWorkbook
     
        a = Format(Date, "d/m/yyyy")
        a = "2/1/2015"
     
        Workbooks.Open Filename:="\\ISSOU-BI01\Export\ACH\ACH_Archives\ACH-DSI-004-04_Lignes OA en cours et recues depuis 2ans.csv", Local:=True
        Set wbkFin = Workbook(Workbooks.Count)
     
        With wbkFin ' sélectionner toutes les feuilles qu'ilya dans le classeur ouvert juste avant
            Set feui = .Sheets("ACH-DSI-004-04_Lignes OA en cou")
            With feui
     
                DerLig = .Cells(Rows.Count, 10).End(xlUp).Row
     
                .Columns("A:AX").AutoFilter Field:=50, Criteria1:=Array("36E"), Operator:=xlFilterValues
                .Columns("A:AX").AutoFilter Field:=4, Criteria1:=Array("Livré"), Operator:=xlFilterValues
                .Columns("A:AX").Sort key1:=Range("W2"), order1:=xlAscending, Header:=xlYes
     
                ReDim tab2(1 To DerLig, 1 To 3) ' ca permet d'avoir un tableau à derlig2 ligne et à 4 colonnes
     
                    'alimentation du tableau de la feuille 1
                Set plageVisible = .UsedRange.SpecialCells(xlCellTypeVisible)
                'Set plageVisible = .Range("A1:AX" & Lig).SpecialCells(xlCellTypeVisible)
     
                k = 1
                For Each Ligne In plageVisible.Rows
     
                    tab2(k, 1) = .Cells(Ligne.Row, 10).Value 'Colonne j
                    tab2(k, 2) = .Cells(Ligne.Row, 9).Value 'Colonne i
                    tab2(k, 3) = .Cells(Ligne.Row, 23).Value 'colonne W
     
                    k = k + 1
                    If DateDiff("d", a, tab2(k, 23)) = 0 Then 'Si la date est la même (différence de jours entre les dates = 0)
                        Exit For
                    End If
                Next Ligne
     
            End With
            .Close Savechanges:=False ' fermeture du classeur sans rien modifier
     
        End With
     
        Set feui = Wbk1.Sheets("Feuil4")
        With feui
            For k = 1 To DerLig
                For i = 1 To 3
                    .Cells(k, i).Value = tab2(k, i)
                Next i
            Next
            .Columns("A:C").AutoFit
        End With
    End Sub
    En attendant, deux trucs m'ont paru bizarres dans ton code, ligne 40 (pour la vérification justement) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Cells(K, 23).Value = a Then
    Es-tu sûr de bien utiliser la bonne ligne (k)? la bonne colonne (W) ? La bonne feuille (ici ça utilise la feuille active) ? Enfin bref, cela me paraît un peu bizarre. En attendant, tu peux essayer avec ce que je t'ai donné.

    Le deuxième :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    a = Format(Date, "d m yyyy")
    a = 2 / 1 / 2015
    Ici, pour moi, il faut écrire ceci (au minimum) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    a = Format(Date, "d m yyyy")
    a =  "2 1 2015"
    mais je préfère ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    a = Format(Date, "d/m/yyyy")
    a = "2/1/2015"

  6. #6
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2016
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2016
    Messages : 23
    Par défaut
    Merci à vous deux,

    Slooby,
    mes cellules en colonne 23 sont bien en format date.

    Jeanmidudu,

    j'ai appliqué ton code et j'ai un soucis sur le type de variable pour Ligne!!
    oui je cherche bien par rapport à la ligne k et la colonne 23 soit W, et c'est bien à partir de la feuille indiqué que j'effectue le remplissage!

    je n'ai pas pu ajouter les fichiers car ils sont trop volumineux :/

  7. #7
    Membre très actif
    Homme Profil pro
    Analyste programmeur
    Inscrit en
    Mai 2014
    Messages
    393
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Analyste programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2014
    Messages : 393
    Par défaut
    Ne connaissant pas le type de données de ligne, je le déclare en variant cette fois :
    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
     
    Sub test()
        Dim DerLig As Long, k As Long, i As Long
        Dim Wbk1 As Workbook, wbkFin As Workbook
        Dim feui As Worksheet
        Dim tab2() As Variant, Ligne As Variant
        Dim a As Date
     
        Application.DisplayAlerts = False
        Set Wbk1 = ThisWorkbook
     
        a = Format(Date, "d/m/yyyy")
        a = "2/1/2015"
     
        Workbooks.Open Filename:="\\ISSOU-BI01\Export\ACH\ACH_Archives\ACH-DSI-004-04_Lignes OA en cours et recues depuis 2ans.csv", Local:=True
        Set wbkFin = Workbook(Workbooks.Count)
     
        With wbkFin ' sélectionner toutes les feuilles qu'ilya dans le classeur ouvert juste avant
            Set feui = .Sheets("ACH-DSI-004-04_Lignes OA en cou")
            With feui
     
                DerLig = .Cells(Rows.Count, 10).End(xlUp).Row
     
                .Columns("A:AX").AutoFilter Field:=50, Criteria1:=Array("36E"), Operator:=xlFilterValues
                .Columns("A:AX").AutoFilter Field:=4, Criteria1:=Array("Livré"), Operator:=xlFilterValues
                .Columns("A:AX").Sort key1:=Range("W2"), order1:=xlAscending, Header:=xlYes
     
                ReDim tab2(1 To DerLig, 1 To 3) ' ca permet d'avoir un tableau à derlig2 ligne et à 4 colonnes
     
                    'alimentation du tableau de la feuille 1
                Set plageVisible = .UsedRange.SpecialCells(xlCellTypeVisible)
                'Set plageVisible = .Range("A1:AX" & Lig).SpecialCells(xlCellTypeVisible)
     
                k = 1
                For Each Ligne In plageVisible.Rows
     
                    tab2(k, 1) = .Cells(Ligne.Row, 10).Value 'Colonne j
                    tab2(k, 2) = .Cells(Ligne.Row, 9).Value 'Colonne i
                    tab2(k, 3) = .Cells(Ligne.Row, 23).Value 'colonne W
     
                    k = k + 1
                    If DateDiff("d", a, tab2(k, 23)) = 0 Then 'Si la date est la même (différence de jours entre les dates = 0)
                        Exit For
                    End If
                Next Ligne
     
            End With
            .Close Savechanges:=False ' fermeture du classeur sans rien modifier
     
        End With
     
        Set feui = Wbk1.Sheets("Feuil4")
        With feui
            For k = 1 To DerLig
                For i = 1 To 3
                    .Cells(k, i).Value = tab2(k, i)
                Next i
            Next
            .Columns("A:C").AutoFit
        End With
    End Sub

  8. #8
    Expert confirmé Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Par défaut
    Bonjour,
    à jeanmidudu
    Ne connaissant pas le type de données de ligne
    dans le contexte et telle que la variable est codée c'est un "Range"
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur :resolu: si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  9. #9
    Membre très actif
    Homme Profil pro
    Analyste programmeur
    Inscrit en
    Mai 2014
    Messages
    393
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Analyste programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2014
    Messages : 393
    Par défaut
    En effet J'ai fait ce code un peu à la va-vite

  10. #10
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2016
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2016
    Messages : 23
    Par défaut
    jeanmidudu,

    pour datediff j'ai pas pu complier du coup j'ai mis cells(k, 23).value à la place de tab(k,23) mais je reviens au point zéro. voila j'ai ajouté un fait un fichier beaucoup plus petit pour que tu puisse me comprendre



    BDD.xlsx

    test.xlsm
    Fichiers attachés Fichiers attachés

  11. #11
    Membre très actif
    Homme Profil pro
    Analyste programmeur
    Inscrit en
    Mai 2014
    Messages
    393
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Analyste programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2014
    Messages : 393
    Par défaut
    Il y a une référence à activer pour gérer les dates je crois.

  12. #12
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2016
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2016
    Messages : 23
    Par défaut
    Bonjour jeanmidudu,
    comme je t'ai dis hier j'ai remplacé juste ton tab2(k,3) par cells(k,3).value et j'ai testé ca sur mon pc perso et ca marche super bien, donc tu as surement raison ca doit être une histoire de référence a activer, j'essayerai de voir lundi sur le pc du boulot.

    Merci

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

Discussions similaires

  1. [Tableaux] Fonction pour remplir un tableau
    Par renaud26 dans le forum Langage
    Réponses: 10
    Dernier message: 27/01/2008, 10h19
  2. Problème pour remplir un tableau.
    Par sandball22 dans le forum C
    Réponses: 2
    Dernier message: 02/05/2007, 14h54
  3. StringTokenizer pour remplir un tableau
    Par keumlebarbare dans le forum Collection et Stream
    Réponses: 6
    Dernier message: 20/12/2006, 12h54
  4. Conseil pour remplir un tableau excel depuis USF
    Par zouille dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 28/10/2006, 11h15

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