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 :

Déclarer un tableau non-typé vba [XL-2010]


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
    Août 2017
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2017
    Messages : 37
    Par défaut Déclarer un tableau non-typé vba
    Bonjour,

    Dans le cadre de mon travail, je dois stocké différentes variables dans un tableau pour pouvoir les copier dans des cellules de mon classeur. Néanmoins ces variables ne sont pas du même type(String, Single, Integer).

    Existe t-il un objet VBA ou un moyen pour manipuler des variables de type différents dans un tableau ?


    Merci d'avance,
    Solown

  2. #2
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Il y a toujours le type générique Variant.
    https://msdn.microsoft.com/fr-fr/VBA...iant-data-type
    Mais pourquoi ne pas faire un transfert de cellule à cellule ?

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2017
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2017
    Messages : 37
    Par défaut
    Pour t'expliquer au mieux mon problème, j'ai dans un fichier une chaine de caractère stocké dans une cellule, je dois découper cette chaine de caractère puis ranger chacune des parties découpés dans une colonne d'un autre classeur.

    J'ai donc codé :
    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
     
            Dim tmp As Variant
            tmp = Replace(wbImport.Sheets(1).Cells(i + 1, 1), """", "")
     
            Dim tabSplit As Variant
            tabSplit = Split(tmp, ",")
            If tabSplit(3) = "0" Then
               GoTo nextI
            End If
            For j = 4 To UBound(tabSplit) - 1
                If tabSplit(j) = "0" Or tabSplit(j) = "1" Then
                    tabSplit(j) = CInt(tabSplit(j))
                Else
                    tabSplit(j) = CCur(tabSplit(j))
                End If
            Next j
    Néanmoins, même en déclarant mon tableau en variant, cette ligne génère une erreur "Incompatibilité de type":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tabSplit(j) = CCur(tabSplit(j))
    Merci

  4. #4
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Il serait plus simple de copier l'ensemble des données sur ta destination puis de leur appliquer un TextToColumns pour séparer les données.
    https://msdn.microsoft.com/fr-fr/lib.../ff193593.aspx
    Comme ça, plus besoin de variables.

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2017
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2017
    Messages : 37
    Par défaut
    Effectivement c'est une solution mais je dois manipuler et changer les données avant, j'ai besoin de pouvoir modifier les variables à tous moments et simplement.

    J'ai trouvé une solution(très moche...) en utilisant comme tu m'avais indiqué Variant et deux tableaux.

    Néanmoins je suis confronté à un autre problème, la ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tabSplit(j) = CSng(tmp(j))
    renvoie comme erreur Incompatibilité de type, pourtant la trace d’exécution suivante montre bien que l'index du tableau auxquels je veux accéder n'est pas typé.

    Nom : PbFormat.PNG
Affichages : 233
Taille : 24,9 Ko

  6. #6
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par Solown Voir le message
    Effectivement c'est une solution mais je dois manipuler et changer les données avant, j'ai besoin de pouvoir modifier les variables à tous moments et simplement.
    Je vais sans doute paraitre insistant mais je ne vois toujours pas la nécessité de passer par des variables.
    Même si les données que tu places dans les cellules destination ne sont pas celles que tu souhaites, rien ne t'empêches ensuite de leur appliquer un traitement, exactement comme tu le fais sur ta variable tableau tabSplit.

  7. #7
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Salut.

    C'est étonnant que ton tabsplit, s'il est bien le résultat du split, possède des valeurs vides. Normalement, il devrait contenir des chaines vides si présence de deux séparateurs qui se suivent. Et ce serait alors normal que CCUR() renvoie une incompatibilité de type puisque tu ne peux pas passer une chaine de caractères (même vide, c-à-d égale à "") à la fonction CCUR() qui attend un nombre ou quelque chose qui peut être transtypé en nombre.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  8. #8
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Je suis assez d'accord avec Menhir. Surtout que tu pourrais alors utiliser les formules Excel pour traiter tes données. Il est pile poil l'outil pour réaliser cela, et il le réalisera en général plus vite et mieux que du code VBA. Qui plus est, tu transféreras ta logique métier dans les formules plutôt que l'avoir dans tes lignes de code.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  9. #9
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2017
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2017
    Messages : 37
    Par défaut
    Je dois rendre ce programme pour ce soir, voilà tout simplement pourquoi j'essaye de le faire rapidement avec des "techno" que je connais.

    Néanmoins si cela est la meilleur solution, je ne vois pas comment cela peut s'appliquer sur une chaine de caractère du type :

    "Prenom NOM,"surnom","lieu","0","0","0","0","0","0""

    J'avoue ne pas encore trop saisir le fonctionnement de cette fonction...

    Concernant ta première intervention Pierre Fauconnier, je split la chaine dans le tableau tmp puis je convertie ses valeurs dans le tableau tabSplit() . Pas de soucis pour les 4 premiers indices (les 3 premiers ne sont pas converties, le 4éme est convertie en Int avec CInt())

  10. #10
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2017
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2017
    Messages : 37
    Par défaut
    J'ai finalement trouvé une solution barbare à mon problème en transformant chacune de mes valeurs en une variable de type Variant, ce qui ne me lève plus l'erreur.

    Je me pencherais sur la fonction TextToColumn une fois la recette passé pour optimiser le programme et apprendre à l'utiliser.

    Merci pour votre aide à tous les deux.

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

Discussions similaires

  1. Recopie d'un tableau non contigu sur un autre en VBA (Strange!)
    Par IphilG00d dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 09/03/2018, 14h36
  2. [XL-2010] Déclarer un tableau de taille non connue
    Par raphael.abulker dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 27/11/2014, 10h45
  3. Réponses: 6
    Dernier message: 10/03/2011, 10h37
  4. [VBA-E] taille du tableau non connu
    Par Invité dans le forum Macros et VBA Excel
    Réponses: 21
    Dernier message: 26/07/2005, 16h51
  5. Réponses: 3
    Dernier message: 16/12/2002, 17h12

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