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 - fonction split [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
    Coordinator customer support
    Inscrit en
    Octobre 2015
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Coordinator customer support
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Octobre 2015
    Messages : 46
    Par défaut VBA - fonction split
    Bonjour,

    J'ai un double clic souris qui entraine le lancement d'une macro et le copier coller de la valeur de la cellule (données retranscries dans SAP).

    Les données se trouve dans un champs dynamique (BDD access que je ne contrôle pas).
    Le but de la manoeuvre est de spliter les numéros (encoder dans access dans un seul champ) qui sont séparés pas des ";", des espaces " ", "/", .. pour qu'après le copy, la paset s'effectue avec un saut de ligne.

    Je me suis intéressé à ce code (trouvé sur ce forum) mais jke ne parviens pas à l'adpater au double clic souris.

    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
    Option Explicit
    Sub test3()
    Dim Tablo() As String
    Dim i As Integer
    Dim j As Long, Der As Long
        With Worksheets("Table de Travail")
            Der = .Cells(Rows.Count, "L").End(xlUp).Row
            For j = 3 To Der
                Tablo = Split(.Cells(j, "L").Value, " ")
                For i = 0 To UBound(Tablo)
                    Worksheets("Feuil1").Cells(j - 2, i + 1) = Trim(Tablo(i))
                Next i
            Next j
        End With
    End Sub
    En résumé,

    Je veux qu'au double clic, celà copie ma série de numéros et colle avec un saut de ligne. Ceci dans n'importe quelle colonne

    Merci pour votre aide,

    Damien

  2. #2
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour
    mais jke ne parviens pas à l'adpater au double clic souris.
    1) Au clic souris sur quoi ? Un clic souris est un évènement et n'intervient que lorsque l'on clique sur un objet (un contrôle) comprenant cet évènement.
    2) le code que tu montres (ton éclatement par split) n'éclate que par rapport au caractère espace. Il te faudrait le faire sur chacun des caractères dont tu parles
    3) lorsque l'on rajoute ou supprime des lignes, il est impératif de le faire de bas en haut (sinon : croche-pattes garantis dans leur numérotation). Le code que tu montres, d'ailleurs, n'ajoute pas de lignes, mais écrase des lignes existantes.

  3. #3
    Membre averti
    Homme Profil pro
    Coordinator customer support
    Inscrit en
    Octobre 2015
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Coordinator customer support
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Octobre 2015
    Messages : 46
    Par défaut
    Hello

    - il s'agit d'un double-clic qui fait appel à :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    If Not Application.Intersect(Target, Range("L:L")) Is Nothing Then
     
       Call macro1
    End if
     
    End sub
    Macro1 fait un selction.copy et lance une procédure (SAP)
    Mon but est d'intégrer un split à cette commande.

    Un début de solution ?

    merci pour ton aide,
    Damien

  4. #4
    Membre averti
    Homme Profil pro
    Coordinator customer support
    Inscrit en
    Octobre 2015
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Coordinator customer support
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Octobre 2015
    Messages : 46
    Par défaut
    Alors,

    J'arrive +/- à avoir ce que je veux en récupérant ce bout de code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub splitNUM()
        Dim Table() As String
        Dim i As Integer
    
    Table = Split(Selection.Value, " ") 'sélection en cours + espace (comment ajouter d'autres séprateurs comme "/" et "-" ?)
    
        For i = 0 To UBound(Table)
            'Le résultat s'affiche dans la fenêtre d'execution de l'éditeur de macros mais j'aimerai que le résultat soit copier dans le clipboard
            Debug.Print Table(i)
        Next i
    End Sub
    Merci,
    Damien

  5. #5
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    'sélection en cours + espace (comment ajouter d'autres séprateurs comme "/" et "-" ?)
    en remplaçant par exemple par un espace, à tour de rôle, chacun des caractères "/" et "-", avant de faire ton "split" sur les espaces ne te parait pas une bonne idée ?
    Pour remplacer : fonction Replace à lire dans l'aide VBA

  6. #6
    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 134
    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 134
    Billets dans le blog
    53
    Par défaut
    Bonjour Damien,
    Juste pour info. le deuxième argument de la fonction Split est facultatif et prend comme valeur par défaut le caractère espacé
    Donc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Table = Split(Selection.Value, " ")
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Table = Split(Selection.Value)
    c'est pareil.
    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

  7. #7
    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 !

    Citation Envoyé par dedam Voir le message
    Le but de la manoeuvre est de spliter les numéros (encoder dans access dans un seul champ) qui sont séparés pas des ";", des espaces " ", "/", .. pour qu'après le copy, la paset s'effectue avec un saut de ligne.
    Avec un exemple avant / après ce serait définitivement clair …

    Sinon en dehors de Split il y a aussi ceci :   Les Expressions Rationnelles appliquées en VBA   …

    _________________________________________________________________________________________________________
    Je suis Paris, Istanbul, Berlin, Nice, Bruxelles, Charlie, …

  8. #8
    Membre averti
    Homme Profil pro
    Coordinator customer support
    Inscrit en
    Octobre 2015
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Coordinator customer support
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Octobre 2015
    Messages : 46
    Par défaut
    J'ai dans une cellule (table de donnée d'où mon évèvement sur double clic) dans laquelle peuvent ou non se trouver plusieurs numéro :

    Exemple : [41590580 41590581 41590583]

    ceci après le double clic :

    41590580
    41590581
    41590583

    Et que celà soit copié dans le clipboard.


    Avec les conseils de Philippe, que je salue au passage, j'ai donc modifé mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Sub splitNUM()
        Dim Table() As String
     
    Table = Split(Selection.Value)
    Table.copy
    end sub
    Je ne suis pasassez avancé pour appliquer les expression rationnelles appliquées ..

    Je joint un fichier d'exemple pour illustrer ma demande.
    demo.xlsm

    merci,
    Damien

  9. #9
    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

    Quelle est donc la séquence de fin de ligne attendue par le logiciel ?

    Sinon copier le résultat du Split dans des cellules puis les copier;
    au moins déjà essayer la copie manuellement pour vérifier si le logiciel l'interprète bien …

  10. #10
    Membre averti
    Homme Profil pro
    Coordinator customer support
    Inscrit en
    Octobre 2015
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Coordinator customer support
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Octobre 2015
    Messages : 46
    Par défaut
    Bonjour Marc-L,

    Mon code n'est pas fonctionnel car je ne sait pas comment récupérer le split en fait (je ne mange pas du code comme vous tous :-) )

    Le logiciel qui récpetionne les données collées est SAP et les données se colle l'une en dessous de l'autre dans des cellules.

    Damien

  11. #11
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    je ne sait pas comment récupérer le split en fait (je ne mange pas du code comme vous tous :-)
    Il va alors falloir que tu apprennes un peu à te nourrir et à ne pas te contenter d'ouvrir la bouche (tu es ici sur un forum de développement - une "cuisine, donc - et non dan,s un restaurant).
    La fonction split te retourne un array :
    - dont le 1er index est 0
    - le dernier index est Ubound(nom_de_l'array)
    - chaque élément est l'une des chaines de caractères séparées par ton espace dans la chaine éclatée par la fonction split.
    A toi de t'intéresser maintenant vite à tout cela, à préparer ta casserole et faire (au moins tenter) ta pitance sur ces bases, qui sont parmi les rudiments de VBA.

  12. #12
    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

    Restant donc sans réponse, aucune aide possible de ma part …


    Sinon encore une fois :

    Citation Envoyé par Marc-L Voir le message
    au moins déjà essayer la copie manuellement pour vérifier si le logiciel l'interprète bien …
    S'agissant juste de saisir des valeurs dans 3 / 4 cellules puis de les copier, faut pas pousser Mémé dans les orties ‼

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

Discussions similaires

  1. vba fonction split dans une boucle
    Par mymoi dans le forum VBA Access
    Réponses: 6
    Dernier message: 26/05/2009, 10h17
  2. [VBA] Délimiteur {tab} import fichier ou fonction split
    Par quanou dans le forum VBA Access
    Réponses: 2
    Dernier message: 15/05/2007, 22h42
  3. Réponses: 5
    Dernier message: 13/10/2005, 12h46
  4. procedure stockée et fonction "split"
    Par wehtam dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 18/07/2005, 16h21
  5. [Fortran 90] Fonction Split()
    Par gchazelle dans le forum Fortran
    Réponses: 2
    Dernier message: 02/03/2005, 10h16

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