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 :

Concatener des valeurs dans un tableau par macro [XL-2003]


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2010
    Messages : 26
    Points : 27
    Points
    27
    Par défaut Concatener des valeurs dans un tableau par macro
    J'ai fait une petite macro qui traite un tableau.
    Celle-ci me permet de concaténer des valeurs de 2 colonnes dans une seul. J'utilise un tableau afin de gagner du temps lors du traitement.
    Pour l'instant ma macro fonctionne pour 398 lignes mais pas plus (For i = 7 To 398)
    Qqun aurait une idé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
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
     
    Sub Concat()
        Dim i As Integer
        Dim NomTableau As Variant
     
        NomTableau = Range("A1:k423").Value
        'Copie les valeurs de la feuille dans le tableau
     
        For i = 1 To 300
               NomTableau(i, 10) = NomTableau(i, 10) & NomTableau(i, 11)
               NomTableau(i, 11) = ""
            'Concatène la colonne J et K
            'MsgBox NomTableau(i, 10)
            'Affiche le résultat dans une Message Box
     
        Next i  'Passe à la ligne suivante
     
        'Transfère les éléments du tableau dans la feuille de calcul
     
        Range(Cells(1, 1), Cells(UBound(NomTableau, 1), UBound(NomTableau, 2))) = NomTableau
     
     
    End Sub
    Bien à vous,

    Kernkraft

  2. #2
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 898
    Points : 8 529
    Points
    8 529
    Par défaut
    Salut
    Fais un essai avec ca

    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 Concat()
        Dim i As Integer
        Dim NomTableau As Variant
     
        NomTableau = Range(Range("A1"), Cells(Rows.Count, "K").End(xlUp)).Value
        'Copie les valeurs de la feuille dans le tableau
     
        For i = 1 To UBound(NomTableau, 1)
               NomTableau(i, 10) = NomTableau(i, 10) & NomTableau(i, 11)
               NomTableau(i, 11) = ""
            'Concatène la colonne J et K
            'MsgBox NomTableau(i, 10)
            'Affiche le résultat dans une Message Box
     
        Next i  'Passe à la ligne suivante
     
        'Transfère les éléments du tableau dans la feuille de calcul
     
        Range(Cells(1, 1), Cells(UBound(NomTableau, 1), UBound(NomTableau, 2))) = NomTableau
     
     
    End Sub
    Par contre le code suppose que la colonne K contient toujours une valeur.
    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  3. #3
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Si tu n'as rien au delà de la colonne K, une méthode assez rapide
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub CommandButton1_Click()
    Application.ScreenUpdating = False
    With Sheets("Feuil1")
       With .Range("L2:L3000")
          .FormulaR1C1 = "=concatenate(RC[-2] , RC[-1])"
          .Value = .Value
       End With
       .Columns("J:K").Delete
    End With
    End Sub
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2010
    Messages : 26
    Points : 27
    Points
    27
    Par défaut
    Malheureusement, ma colonne k n'est pas toujours remplie et le code ne fonctionne pas.
    Donc, je vais essayer de trouver une autre solution qui me permet d'aller plus loin que 398 dans le compteur de ma boucle for...

  5. #5
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Tu veux concaténer les données de la colonne J avec celles de la colonne K, c'est ça?
    si tu n'as pas de données dans les colonnes L et les suivantes, ma proposition (qui est assez rapide et sans boucle) permet d'utiliser la colonne L, résultat de la concaténation de J et K, et de les supprimer après.
    De ce fait, cette colonne L devient J et la colonne M (supposée vide) sera la K
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2010
    Messages : 26
    Points : 27
    Points
    27
    Par défaut
    Erreur trouvée un cellule contenait un mauvais encodage:

    =-ALOT/A PLATS BRAS P

    Une idée pour pouvoir gérer ce genre d'erreur?

  7. #7
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    '-ALOT/A PLATS BRAS P
    commence par une apostrophe pour que le tiret ne sera pas considéré comme le signe "moins", c'est à dire le contenu sera interprété comme étant une formule (d'où l'ajout automatique du signe =)
    Edit
    Pour se limiter à la plage de cellules de la ligne J
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub Test()
    Dim LastLig As Long
     
    Application.ScreenUpdating = False
    With Sheets("Feuil1")
       LastLig = .Cells(.Rows.Count, "J").End(xlUp).Row
       With .Range("L1:L4" & LastLig)
          .FormulaR1C1 = "=concatenate(RC[-2] , RC[-1])"
          .Value = .Value
       End With
       .Columns("J:K").Delete
    End With
    End Sub
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  8. #8
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 898
    Points : 8 529
    Points
    8 529
    Par défaut
    Salut
    Si tu veux garder les boucles (volonté d'avoir une valeur et non une formule, si c'est ce que tu souhaites, je ne sais pas), voila une correction, cette fois le code tient compte du contenu de la colonne A (il ne doit pas y avoir de cellule vide) si ça ne va encore pas, donne la colonne qui servirait de référence.
    Ou encore mieux remplace le A de
    par la colonne a utiliser.
    Et si tu n'a pas vraiment de colonne de référence, il reste l'utilisation de UsedRange pour récupérer la dernière ligne.

    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 Concat()
        Dim i As Integer
        Dim NomTableau As Variant
     
        NomTableau = Range(Range("A1"), Cells(Cells(Rows.Count, "A").End(xlUp), "K")).Value
        'Copie les valeurs de la feuille dans le tableau
     
        For i = 1 To UBound(NomTableau, 1)
               NomTableau(i, 10) = NomTableau(i, 10) & NomTableau(i, 11)
               NomTableau(i, 11) = ""
            'Concatène la colonne J et K
            'MsgBox NomTableau(i, 10)
            'Affiche le résultat dans une Message Box
     
        Next i  'Passe à la ligne suivante
     
        'Transfère les éléments du tableau dans la feuille de calcul
     
        Range(Cells(1, 1), Cells(UBound(NomTableau, 1), UBound(NomTableau, 2))) = NomTableau
     
     
    End Sub
    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 02/05/2014, 11h47
  2. [WD10] Afficher des valeurs dans un tableau
    Par dj-julio dans le forum WinDev
    Réponses: 4
    Dernier message: 19/03/2014, 11h32
  3. Trier par ordre croissant des valeurs dans un tableau
    Par ftrap dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 26/06/2013, 10h35
  4. [Tableaux]Ajouter des valeurs dans un tableau
    Par Antoine1183 dans le forum Collection et Stream
    Réponses: 13
    Dernier message: 03/04/2005, 13h41
  5. Décaler des valeurs dans un tableau
    Par sh2003 dans le forum Langage
    Réponses: 6
    Dernier message: 20/03/2004, 16h01

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