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 :

Concatenation à plage variable


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
    Juin 2018
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meuse (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2018
    Messages : 51
    Par défaut Concatenation à plage variable
    Bonjour à tous,
    Je souhaite réaliser une concaténation à plage variable. En effet je réalise une extraction de SAP qui m'indique un certain nombre d'information concernant un produit, l'idée est de regrouper ces info's dans une seule cellule. Cependant je n'arrive pas à me débrouiller avec les plages variables... ( un produit peu avoir plusieurs info's ou aucune)
    Le code suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Public Function cc(ByVal NomCol As Integer, Debut As Integer, fin As Integer) As String
     
    cc = ""
    For i = Debut To fin
        cc = cc & Chr(10) & Cells(i, NomCol).Value
    Next
     
    End Function
    Me permet de de concatener la plage que je souhaite mais je dois indiquer les valeurs à chaque fois, sur un tableau regroupant plusieurs 100 aines de produits il serait utile de pouvoir définir une plage variable ...
    Pour définir ma plage j'ai utilisé la fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SI(C2=C1;"";LIGNE(C2))
    +
    cela me permet de trouver la ligne d'apparition de chaque produit.
    Si vous avez des pistes de réflexions, je suis preneur.

  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 serait plus simple de transmettre les paramètres en terme de références de cellules.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Public Function cc(ByVal Debut As Range, ByVal Fin As Range) As String
    Dim CurCell As Range
        cc = ""
        For Each CurCell in Range(Debut, Fin)
            cc = cc & Chr(10) & CurCells.Value
        Next CurCell
    End Function
    Le gros avantage, c'est que quand tu utilises cette fonction dans Excel, les paramètres peuvent être des références relatives qui se modifieront d'elles-même à la copie.

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2018
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meuse (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2018
    Messages : 51
    Par défaut
    Merci Menhir, j'étais arrivé à la même conclusion hier et j'avais fait une mouture à peu prêt identique
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     
    Public Function cc(ByVal plage As Range) As String
    cc = ""
    Dim cellule As Range
    Dim Chaine
     For Each cellule In plage
     Chaine = Chaine & Chr(10) & cellule.Value
     Next cellule
    cc = Chaine
     
     
    End Function
    Par contre On est bien d'accord que Chr(10) fait référence à la table ascii et devrai faire un renvoie à la ligne systématique ? car ça ne le fait pas )=

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 266
    Par défaut
    Bonjour,

    il faut que 'Renvoyer à la ligne automatiquement' soit coché.
    eric

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2018
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meuse (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2018
    Messages : 51
    Par défaut
    Merci Eriic,
    J'ai une autre erreur qui a "pop", en voulant tester la solution de Menhir, j'ai mis ma solution en commentaire. Quand j'ai voulu la réutiliser, le message d'erreur " #Nom? est apparu, je ne comprends pas pourquoi étant donné que la fonction été bien défini 5 min auparavant.

  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 SAP_Excel Voir le message
    Quand j'ai voulu la réutiliser, le message d'erreur " #Nom? est apparu, je ne comprends pas pourquoi étant donné que la fonction été bien défini 5 min auparavant.
    Je suppose que tu as mis l'autre en commentaire (parce que deux fonctions avec le même nom, Excel va en perdre son latin).
    Tu as vu aussi que les deux fonctions n'ont pas le même nombre de paramètres.

    Petit détail : dans ta macro, déclare le type de la variable Chaine, ce sera plus sûr. Ou supprime-la, ce qui serait encore mieux.

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

Discussions similaires

  1. Concatener une variable a un object?
    Par critok dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 25/02/2006, 19h38
  2. Interaction sur un bouton + Concatenation de variable.
    Par Cydreav dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 03/02/2006, 14h49
  3. Concatener 2 variables de type "long"
    Par jamesleouf dans le forum C
    Réponses: 9
    Dernier message: 04/12/2005, 22h24
  4. Concaténer des variables
    Par pcdj dans le forum Linux
    Réponses: 1
    Dernier message: 26/10/2005, 22h30
  5. [C#] Concatener 2 variables pour en faire une 3ème
    Par Thomas Lebrun dans le forum Windows Forms
    Réponses: 6
    Dernier message: 11/05/2004, 21h02

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