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 :

VBA - Comment intialiser un Array() de dimension 1 par fusion de 2 Array () de dimension 1 avec Split Join ? [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé

    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    1 027
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 1 027
    Billets dans le blog
    45
    Par défaut VBA - Comment intialiser un Array() de dimension 1 par fusion de 2 Array () de dimension 1 avec Split Join ?
    Bonjour,

    J'ai testé plusieurs méthode pour fusionner 2 objets Array mais avec un succès mitigé car l'instruction qui fonctionne génère un Array à 2 dimensions alors que l'objectif est un array à 1 dimension!

    La solution d'une boucle est hors champ de cette question car très bien documentée sur différents sites !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
        '----------------------------------------------------------------------------------------------------
        ' erreur 13 incompatibilité de type
        '----------------------------------------------------------------------------------------------------
        Dim arr1() As Variant, arr2() As Variant, arr3() As Variant
        
        arr1 = Array("a1", "b1"): arr2 = Array("a2", "b2")     
        arr3 = Split(Join(arr1, ",") & "," & Join(arr2, ","), ",")   ' ---> NOk :  erreur 13 incompatibilité de type
    Nom : mergeArray1.JPG
Affichages : 279
Taille : 37,9 Ko

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
        '----------------------------------------------------------------------------------------------------
        ' Intialisation d'un Array à 2 dimensions alors que l'objectif est de 1 dimension
        '----------------------------------------------------------------------------------------------------
        Dim arr1() As Variant, arr2() As Variant, arr3() As Variant
        
        arr1 = Array("a1", "b1"): arr2 = Array("a2", "b2")     
        arr3 = arr3 = Array(Split(Join(arr1, ",") & "," & Join(arr2, ","), ","))   ' ---> Ok mais arr3 à 2 dimensions
    Nom : mergeArray2.JPG
Affichages : 272
Taille : 40,7 Ko

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 169
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Enlevez les parenthèses des variables déclarées comme Dim arr1 As Variant, arr2 As Variant, arr3 As Variant
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  3. #3
    Membre Expert Avatar de Nain porte koi
    Homme Profil pro
    peu importe
    Inscrit en
    Novembre 2023
    Messages
    1 177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : peu importe

    Informations forums :
    Inscription : Novembre 2023
    Messages : 1 177
    Par défaut
    Bonjour Philippe,

    tu pourrais nous donner l'explication de cette subtilité steuplé ?
    Merci

  4. #4
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 169
    Billets dans le blog
    53
    Par défaut
    Bonjour Jièl,
    En VBA, il est important de distinguer entre déclarer une variable comme Variant simple et déclarer une variable comme tableau de Variant.

    Déclaration avec Parenthèses
    Quand tu déclares une variable avec des parenthèses comme Dim arr1() As Variant , tu indiques explicitement que arr1 est un tableau de Variant. Un tableau nécessite généralement d'être dimensionné (soit avec ReDim, soit initialisé directement avec une fonction qui retourne un tableau comme Array()).

    Déclaration sans Parenthèses
    En revanche, Dim arr1 As Variant déclare arr1 comme une variable de type Variant simple, qui peut contenir n'importe quel type de données, y compris un tableau. Quand tu utilises arr1 = Array("a1", "b1"), arr1 devient automatiquement un tableau car la fonction Array retourne un tableau.

    Pourquoi le Changement de Déclaration Résout-il l'Erreur ?

    Dans le code initial
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim arr1() As Variant, arr2() As Variant, arr3() As Variant
    arr1 = Array("a1", "b1")
    arr2 = Array("a2", "b2")
    arr3 = Split(Join(arr1, ",") & "," & Join(arr2, ","), ",")
    Le problème survient avec arr3. On a déclaré arr3() comme un tableau, mais on essaie ensuite de l'affecter avec le résultat de la fonction Split, qui retourne également un tableau. Normalement, cela devrait fonctionner, mais VBA peut parfois être capricieux avec les types de données complexes comme les tableaux imbriqués ou manipulés via des fonctions.

    En déclarant arr3 comme Variant simple, tu laisses VBA gérer le type de données dynamiquement. Le fait que cela fonctionne sans les parenthèses suggère que VBA a mieux géré la conversion implicite des types sans préconception du type spécifique.

    Bonne Pratique
    Dans la situation, où tu manipules des tableaux dynamiques et des données qui peuvent changer de type (par exemple, de simple valeur à tableau), il est souvent plus sûr de déclarer ces variables comme Variant sans préciser qu'il s'agit de tableaux. Cela offre plus de flexibilité et laisse VBA gérer le typage dynamiquement.
    Cela permet également lorsque j'utilise une fonction générique qui doit me renvoyer un tableau ou rien de vérifier au retour avec la fonction IsArray si c'est un tableau ou pas
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  5. #5
    Membre Expert Avatar de Nain porte koi
    Homme Profil pro
    peu importe
    Inscrit en
    Novembre 2023
    Messages
    1 177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : peu importe

    Informations forums :
    Inscription : Novembre 2023
    Messages : 1 177
    Par défaut
    Merci beaucoup pour cette belle explication bien détaillée.

  6. #6
    Membre éprouvé

    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    1 027
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 1 027
    Billets dans le blog
    45
    Par défaut
    Citation Envoyé par Philippe Tulliez Voir le message
    Bonjour,
    Enlevez les parenthèses des variables déclarées comme Dim arr1 As Variant, arr2 As Variant, arr3 As Variant

    Merci Philippe pour la solution qui fonctionne parfaitement et ton explication qui permet de s'endormir plus intelligent comme toujours

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

Discussions similaires

  1. [Protégé] Est-il possible de relier un individu à une classe par une relation ?
    Par nissam1 dans le forum Ontologies
    Réponses: 4
    Dernier message: 12/04/2012, 09h07
  2. Réponses: 1
    Dernier message: 09/02/2012, 17h00
  3. Réponses: 1
    Dernier message: 28/04/2009, 02h12
  4. Réponses: 2
    Dernier message: 08/07/2008, 11h28
  5. [VBA-E] Comment créer un bouton ds une wksheet par un code vba
    Par moicwill dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 29/05/2006, 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