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 :

Création tableau variant et analyse du tableau


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Janvier 2011
    Messages
    86
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 86
    Par défaut Création tableau variant et analyse du tableau
    Bonjour,

    Etant tout nouveau dans le grand monde du vba, je tâtonne pas mal, en particulier lorsque j'ai des erreurs. Je suis confronté à 2 erreurs, que vraiment, je ne comprends pas.

    Dans le cadre de mon travail, j'essaye de faire un suivi de mes dépenses en fonction de nombreux facteurs (année, n° service consommateur, n° compte comptable et n° produit).
    J'avais, jusqu'à présent, utilisé la formule equiv pour une recherchev multi-critères, mais je souhaiterai à présent utiliser le vba, qui est bien plus rapide (il faut environ 10-15 min pour traiter l'ensemble de mes données sans le vba).

    J'en suis à un point où j'ai mes données 2016 et 2017, par ordre croissant d'année, de service, de compte et décroissant de valeur consommée.
    Je dois extraire uniquement les données de 2016 dont la consommation ne se trouve pas en 2017 (cad un produit de 2016 non consommé sur 2017 sur un service et un compte).

    1) J'ai créé un tableau variant pour concaténer les données service, compte comptable et n° produit. L'objectif est de comparé si une valo se trouve 2 fois, car dans ce cas elle est présente en 2016 et 2017 (pour un produit, un compte et un service).
    Premier problème, j'ai par exemple le service 1870, le compte 94212 et le produit 9176196 et la concaténation me donne 1870942129176190.
    De la même façon, le service 1870, le compte 942221 et le produit 9477319 me donne en concaténation 18709422219477300.

    Pour le voir j'ai fait mon tableau variant et j'ai affiché les résultats dans une page annexe pour vérifier.
    J'ai pourtant déclaré mon tableau comme variant, donc je ne comprends pas ces arrondis.

    2) Mon second problème doit être un problème de syntaxe, car, après avoir créé toute ma colonne de concaténation de la longueur de mon tableau originel, je souhaite regarder, pour les données 2016, si la valo se trouve également en 2017.
    Je ne vous mets pas le code entier de tout mon travail, mais voici ce qui pourrait aider.

    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
    Dim tableau As Range, ligne_1 As Double, ligne_2 As Double, colonne_1 As Double, val As Double, tab_dyna_concatener As Variant, tab_dyna_base As Variant, a1 As Double
    Set tableau = Sheets("Base tri UF").Range("A1", Sheets("Base tri UF").Range("A1").End(xlDown)) 'longueur du tableau de données originel
     
    ligne_1 = 1
     
    'Création d'un tableau variant pour concatener les UFs, les comptes et les comptes produits en colonne A de ce tableau
    ReDim tab_dyna_concatener(1 To tableau.Count - 1, 1 To 2)
     
    Do Until ligne_1 > tableau.Count - 1 'pas besoin des libellés
     
        tab_dyna_concatener(ligne_1, 1) = Sheets("Base tri UF").Cells(ligne_1 + 1, 2) & Sheets("Base tri UF").Cells(ligne_1 + 1, 4) & Sheets("Base tri UF").Cells(ligne_1 + 1, 6)
        Sheets("Essai").Cells(ligne_1, 1) = tab_dyna_concatener(ligne_1, 1)
        ligne_1 = ligne_1 + 1
     
    Loop 'c'est là que je rencontre mon premier problème avec des valos arrondies :/
     
    'Variable indiquant le nombre lignes de 2016
    a1 = WorksheetFunction.CountIf(Sheets("Base tri UF").Range("A1:A" & tableau.Count), Sheets("Base tri UF").Range("A2"))
    ligne_1 = 1
     
    'En colonne B du tableau variant, indique pour les lignes de 2016 (cad les premières lignes car triées par années croissantes) si les comptes ne se trouvent qu'en 2016 (Oui),
    'ou en 2016 et 2017 (Non)
    Do Until ligne_1 > a1
     
        If Application.WorksheetFunction.CountIf(tab_dyna_concatener.Range("A1:A" & tableau.Count - 1), tab_dyna_concatener(ligne_1, 1)) > 1 Then 'erreur 484 d'objet, mais je ne vois pas pourquoi.
        tab_dyna_concatener(ligne_1, 2) = "Non"
        ligne_1 = ligne_1 + 1
        Else
        tab_dyna_concatener(ligne_1, 2) = "Oui"
        ligne_1 = ligne_1 + 1
        End If
     
    Loop
    Merci pour votre aide

  2. #2
    Membre confirmé
    Inscrit en
    Janvier 2011
    Messages
    86
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 86
    Par défaut
    Rebonjour,

    Je fais un double post, désolé, mais j'ai cherché pour l'arrondi, et il semble qu'Excel ne soit pas capable de gérer des nombres dont le nombre de caractères excèdent 15 caractères.
    En gros il vous affichera bien 999 999 999 999 999, mais il vous souhaitez rajouter un 9, il vous marquera 9 999 999 999 999 990.
    Mais j'ai l'impression qu'il conserve la valeur d'origine, il n'est juste pas capable de l'afficher.

  3. #3
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut
    Bonjour,

    une concaténation pouvant - devant même - être effectuée avec un type de donnée texte, aucun souci !
    Il est même conseillé d'insérer un séparateur entre les données concaténées …

    ___________________________________________________________________________________________________________
    Je suis Paris, Nigeria, New-York, Mogadicio, Barcelone, London, Manchester, Egypte, Stockholm, Istanbul, Berlin, Nice, Bruxelles, Charlie, …

  4. #4
    Membre extrêmement actif Avatar de mjpmjp
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2012
    Messages
    1 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hautes Alpes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2012
    Messages : 1 133
    Par défaut
    bonjour,

    J'ai pourtant déclaré mon tableau comme variant, donc je ne comprends pas ces arrondis.
    et si tu déclares ton tableau en "string" ?

    j'ai par exemple le service 1870, le compte 94212 et le produit 9176196 et la concaténation me donne 1870942129176190.
    effectivement, l'indication de Marc-L est intéressante : 1870|94212|9176196

    il est à noter que : A1870942129176196 a de grande chance d'être un "string"

    @+JP
    Caractéristiques (WEB) phpMyAdmin 4-74 , PHP 5-631 , Apache 2-427 , MySQL 5-719
    Présentation NAS DS-3615xs + 20Go , DSM 6.1.6-15266 Up1 , 12 * WD 4To WD4000F9YZ (10 raid 6+ )+(2 raid 1+) , LinkSys comutateur-switch lgs528p-eu , Onduleur UPS 720W Power Boxx Lcd (4*UPS + 4*MOD)
    Mes contributions (EXCEL) Form GRAPHIQUE: Gestion des boutons , Liste Onglet dynamique...GESTION de FILM

Discussions similaires

  1. [debutant] tableau variant
    Par kortnor dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 22/07/2008, 19h37
  2. Création de bitmap à partir d'un tableau de byte
    Par Phenix26 dans le forum Windows
    Réponses: 2
    Dernier message: 06/12/2007, 20h30
  3. [FTP] Créations de dossiers à partir d'un tableau
    Par Marshall_Mathers dans le forum Langage
    Réponses: 1
    Dernier message: 07/09/2007, 16h44
  4. [Tableaux] Analyser un tableau HTML
    Par laughingman dans le forum Langage
    Réponses: 5
    Dernier message: 13/08/2007, 14h13
  5. Réponses: 17
    Dernier message: 15/05/2006, 17h18

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