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 :

Insertion d'un tableau dynamique (1 dimension)


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 369
    Par défaut Insertion d'un tableau dynamique (1 dimension)
    Bonjour tout le monde,

    Je n'arrive pas du tout à utiliser le tableau dynamique et je sollicite ainsi votre aide

    Je souhaiterai intégrer un tableau dynamique qui me permette de stocker les valeurs du tableau "Feuille" dont la condition n'est pas respectée, donc sur cette partie du code.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     Else
                MsgBox ("Données de l'onglet " & Feuille(i) & " datées de plus de 1 semaine, veuillez renouveler les données")
                Errorr = Errorr + 1
                Workbooks.Open "Z:\PBR_LOG\ARIBA_2019\TestVBA\" & Feuille(i) & "\" & Feuille(i) & ".xlsx"
            End If
    et je souhaiterai aussi que toutes les valeurs comprises dans ce tableau dynamique soient ainsi sorties dans le MsgBox de telle sorte qu'il soit affiche :

    "Il y a 2 fichiers à mettre à jour : Nom 1, Nom 2"

    Voici le code complet dont l'objectif est de vérifier quels sont les fichiers source (parmi TOTAL, Commandes, Contrats_Actifs) qui ont été modifiés depuis plus de 1 semaine par rapport au fichier sur lequel je travaille. Dans quel cas, il ouvre chacun de ces fichiers pour que les mises à jours des données soient effectuées (fichiers ne pouvant être automatisées car ce sont des extractions effectuées sur des logiciels tiers).

    J'ose espérer que ma question a été claire et que la description du code l'était aussi. Je vous remercie d'avance

    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
    Sub TestMAJ()
        Dim i As Integer
        Dim Errorr As Integer
        Errorr = 0
        Dim Feuille
     
        Dim diff As Integer
     
        Feuille = Array("TOTAL", "Commandes", "Contrats_Actifs")
     
        For i = 0 To 2
            diff = DateDiff("w", FileDateTime("Z:\PBR_LOG\ARIBA_2019\TestVBA\" & Feuille(i) & "\" & Feuille(i) & ".xlsx"), FileDateTime("Z:\PBR_LOG\ARIBA_2019\TestVBA\CF_Copie_Test.xlsm"))
            If diff = 0 Then
                MsgBox ("Données de l'onglet " & Feuille(i) & " datées de moins de 1 semaine")
            Else
                MsgBox ("Données de l'onglet " & Feuille(i) & " datées de plus de 1 semaine, veuillez renouveler les données")
                Errorr = Errorr + 1
                Workbooks.Open "Z:\PBR_LOG\ARIBA_2019\TestVBA\" & Feuille(i) & "\" & Feuille(i) & ".xlsx"
            End If
        Next i
        MsgBox ("Il y a " & Errorr & " fichiers à mettre à jour")
    End Sub

  2. #2
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    Salut rêver,

    Quelle est précisément la problématique? Quel message d'erreur sur quelle ligne de code (surlignée généralement en jaune).

    Pour ma part, je préfère ne pas écrire de formules trop longes.
    Le contrôle des paramètres est alors plus ardu.

    Je coderais plus volontiers

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub essai_filedate()
    Dim d As Date
    d = FileDateTime("\\prnas02\33\NETSHARE_STAT PART PRO\commun\Outils_logiciels\Imprimés Fiscaux et SDC\CP_SDC_NOVA_V11.xlsm")
    Debug.Print DateDiff("w", Now, d)
    End Sub
    Intègre dans ton code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Debug.Print FileDateTime("Z:\PBR_LOG\ARIBA_2019\TestVBA\" & Feuille(i) & "\" & Feuille(i) & ".xlsx")
    et contrôle le résultat dans la fenêtre Exécution (CTRL + G)

  3. #3
    Membre chevronné
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 369
    Par défaut
    Je n'avais pas d'erreur, puisque je n'avais même pas créé le tableau dynamique. Je l'ai créé ici sous le nom de "Ferror()"
    Je souhaiterai le dimensionner automatiquement en ligne 22 (avant le End If). L'objectif de ce tableau dynamique est de successivement stocker les valeurs "Feuille(i)" dont la DateDiff diffère de 0.

    Je souhaiterai de plus que les valeurs contenues dans ce tableau dynamique Ferror() soient intégrées dans le MsgBox de cette manière :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MsgBox ("Il y a " & Errorr & " fichiers à mettre à jour : " & Ferror(1...n) &")
    Je dois avouer que pour la syntaxe, c'est très certainement pas ça du tout, j'espère que j'ai été plus clair que précédemment

    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
    Sub TestMAJ()
        Dim i As Integer
        Dim d As Date
        Dim Errorr As Integer
        Errorr = 0
        Dim Feuille
        Dim Ferror()
     
     
        Feuille = Array("TOTAL", "Commandes", "Contrats_Actifs")
     
        For i = 0 To 2
            d = FileDateTime("Z:\PBR_LOG\ARIBA_2019\TestVBA\" & Feuille(i) & "\" & Feuille(i) & ".xlsx")
            Debug.Print FileDateTime("Z:\PBR_LOG\ARIBA_2019\TestVBA\" & Feuille(i) & "\" & Feuille(i) & ".xlsx")
            Debug.Print DateDiff("w", d, Now)
            If DateDiff("w", d, Now) = 0 Then
                MsgBox ("Données de l'onglet " & Feuille(i) & " datées de moins de 1 semaine")
            Else
                MsgBox ("Données de l'onglet " & Feuille(i) & " datées de plus de 1 semaine, veuillez renouveler les données")
                Errorr = Errorr + 1
                Workbooks.Open "Z:\PBR_LOG\ARIBA_2019\TestVBA\" & Feuille(i) & "\" & Feuille(i) & ".xlsx"
            End If
        Next i
        MsgBox ("Il y a " & Errorr & " fichiers à mettre à jour")
    End Sub

  4. #4
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    Salut,

    D'accord.

    Dans ce cas, tu initialises une chaîne de caractères à vide.
    Celle-ci se verra incrémenter pour chaque donnée.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Dim lemessage as String, i as Byte, n AS Byte
    lemessage = ""
    n = 0
     
    For i = 1 to 10
      If lerreur =... Then 
        lemessage = lemessage & i
        n = n+1
      End If
    Next i
     
    lemessage = "Il y a " & n & " fichiers" & dont voici la liste " & lemessage
     
    Msgbox Prompt:=lemessage, Buttons:=Vbcritical, Title:="Alerte"
    Je te laisse adapter.

  5. #5
    Membre chevronné
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 369
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    IIf (lemessage="",lemessage = lemessage & Feuille(i), lemessage = lemessage & ", " & Feuille(i))
    Je me suis dit, quitte à faire un "If" autant essayer de faire un "IIf" mais je suppose que si tu ne me l'as pas proposé c'est que ça ne marche pas ? Il me dit "Erreur de syntaxe".

    Du coup j'ai adapté le code que tu m'as proposé à ma situation et cela fonctionne très bien, je l'ai un peu peaufiné par ailleurs histoire que ce soit plus agréable au niveau de la lecture du MsgBox. Je lui ai donc demandé de traiter 2 cas différents. Le premier si "lemessage = "" " afin qu'il me rajoute simplement le nom de la 1ère feuille "en retard", et le second cas qui intègre une virgule et un espace pour améliorer la visibilité.

    Il ne me reste plus qu'à faire une vérification au niveau du Workbooks.Open. Si les fichiers sont déjà ouverts, dans ce cas il ne se passe rien. Je suppose que même si le fichier est ouvert, lui redemander est une action inutile.

    Nouvelle petite question, j'ai remarqué dans ton code que tu déclarais "i" en tant que Byte, et que moi je restais en Integer. Pourquoi utilises-tu le type Byte ?

    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 TestMAJ()
        Dim i As Integer
        Dim d As Date
        Dim Errorr As Integer
        Errorr = 0
        Dim Feuille
        Dim lemessage As String
        lemessage = ""
     
     
        Feuille = Array("TOTAL", "Commandes", "Contrats_Actifs")
     
        For i = 0 To 2
            d = FileDateTime("Z:\PBR_LOG\ARIBA_2019\TestVBA\" & Feuille(i) & "\" & Feuille(i) & ".xlsx")
            Debug.Print FileDateTime("Z:\PBR_LOG\ARIBA_2019\TestVBA\" & Feuille(i) & "\" & Feuille(i) & ".xlsx")
            Debug.Print DateDiff("w", d, Now)
     
            If DateDiff("w", d, Now) = 0 Then
                MsgBox ("Données de l'onglet " & Feuille(i) & " datées de moins de 1 semaine")
            Else
                MsgBox ("Données de l'onglet " & Feuille(i) & " datées de plus de 1 semaine, veuillez renouveler les données")
                Errorr = Errorr + 1
                If lemessage = "" Then
                    lemessage = lemessage & Feuille(i)
                Else
                    lemessage = lemessage & ", " & Feuille(i)
                End If
                Workbooks.Open "Z:\PBR_LOG\ARIBA_2019\TestVBA\" & Feuille(i) & "\" & Feuille(i) & ".xlsx"
            End If
        Next i
        MsgBox ("Il y a " & Errorr & " fichiers à mettre à jour : " & lemessage)
    End Sub

  6. #6
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    Salut,
    Nouvelle petite question, j'ai remarqué dans ton code que tu déclarais "i" en tant que Byte, et que moi je restais en Integer. Pourquoi utilises-tu le type Byte ?
    La réponse est toute simple.
    J'ai considéré un maximum de 255 cas.

    S'il y en a plus, aucun problème pour une déclaration en Integer (32700 environ).

    Cela dit, tu as raison, l ne coûte absolument rien , en termes de ressource, de voir "large".

    Ainsi, une déclaration pour un numéro de ligne s'effectuera toujours en Long.
    Pour un nombre de colonnes, je considérerais une déclaration en Integer, en sachant que, du moins sur les versions actuelles d'Excel, le nombre de colonnes par feuille de travail est de 16384.

    Pour te documenter sur les variables, numériques et autres, tu peux consulter cet espace.

Discussions similaires

  1. Tableau dynamique à deux dimensions
    Par David Fouejio dans le forum MFC
    Réponses: 4
    Dernier message: 05/03/2007, 09h37
  2. [HashSet] Tableau dynamique à 2 dimensions
    Par ppopov dans le forum Collection et Stream
    Réponses: 5
    Dernier message: 21/01/2007, 16h21
  3. Réponses: 4
    Dernier message: 19/12/2006, 20h06
  4. declaration d'un tableau dynamique 2 dimensions
    Par mike600river dans le forum C++Builder
    Réponses: 4
    Dernier message: 22/05/2006, 08h53
  5. Réponses: 1
    Dernier message: 09/03/2006, 17h25

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