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

  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 é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 ‼

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

  13. #13
    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
    Pour que tu comprennes certaines de mes réactions, dedam -->>
    1) Voici ce que tu as écrit :
    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.
    cela voudrait dire que la BDD traitée ne comporte (quelle drôle de BDD) qu'un seul champ ! Sinon, à quelle "nouvelle ligne par éclatement " attribuer les autres champs d'un même article ? -->> question plus que "existentielle", non ?
    2) "nous" t'avons expliqué (l'explication est également dans l'aide VBA, mais bon ...) ce qu'était et retournait la fonction Split.
    3) je t'ai également parlé de la distinction à faire entre faire sa popote et aller au restaurant (et je tiens personnellement à ce que l'on sache faire cette différence)
    4) A Partir de là (et uniquement - voir mon 1) - si ta BDD n'a pas d'autres champs à exploiter sur ta feuille Excel), la seule difficulté qui subsisterait serait l'éclatement sur plusieurs lignes d"une chaîne contenue dans une cellule. Je conçois que la chose peut paraître un peu plus ardue, mais elle ne saurait à mes yeux en aucun cas t'affranchir de tout le reste (l'éclatement en soi).
    Je me suis donc efforcé de construire (délibérément) un exemple dans lequel on "éclaterait des choses", mais en te forçant à travailler sur un éclatement distinct et en t'apprenant, dans la foulée, à travailler avec des matrices (bon et utile exercice) :
    Je te propose donc de faire ce petit test, sur un classeur tout neuf, avec :
    - des prénoms en colonne A (ceux que tu veux)
    - un bouton de commande Commanbutton1
    et ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Private Sub CommandButton1_Click()
    ReDim toto(0) ' je vais utiliser une matrice pour y mettre mes éclatements de chaines
    Dim derlig As Long, i As Long, j As Integer, titi
    titi = Range("A1:A" & Range("A" & Rows.Count).End(xlUp).Row) ' je mets dans une autre matrice les valeurs à traiter de la colonen A
    For i = 1 To UBound(titi, 1) ' je vais parcourir ainsi chaque élément le la matrice titi
      For j = 1 To Len(titi(i, 1)) '------------------| ici, moi, je vais éclater caractère par caractère et alimenter ma matrice toto
        toto(UBound(toto)) = Mid(titi(i, 1), j, 1) '  | (je veux en fait que tu comprennes)
        ReDim Preserve toto(UBound(toto) + 1) '-------| TOI, tu ne dois pas éclater caractère par caractères, mais par split, comme on te l'a dit plus haut
      Next
    Next
    ' et j'envoie en colonne B toutes les valeurs de ma matrice  toto
    ' TOI, tu peux les envoyer en colonne A et y écraser ce qui s'y trouve, bien sûr
    Range("B1:B" & UBound(toto)) = WorksheetFunction.Transpose(toto)
    End Sub
    Copier/coller ce code ne te servira selon toute évidence à rien dans le cas que tu veux traiter. Il te faudra l'analyser, le comprendre, et l'adapter à TON éclatement (différent).
    C'est ce que je SOUHAITE que tu fasses pour te lancer sur le seul chemin acceptable ici : celui de développeur.
    J'ai ajouté à mon code suffisamment de commentaires pour t'aider à parcourir ce chemin-là.
    Amitiés et bonne étude.

  14. #14
    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 à vous :-)

    Marc,


    J'ai déjà répondu en ce point mais je ne dois pas avoir bien compris la question.

    Quelle est donc la séquence de fin de ligne attendue par le logiciel ?
    Je ne suis pas certain de saisir. Je passe d'Excel à SAP pour y coller des numéros de comme dans une zone de critère, j'exécute et celà me trie une liste. C'est un genre de fonction filtre donc je vais tirer des données affichées dans une base de données dde call center.

    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 …
    Non, celà ne fonctionne pas, ce pourquoi j'essaye de trouver une parade. Quand je colle sans séparer les nombres, les données ne s'affichent pas car elle sont collées dans une seule cellule.

    Pour exemple, ces deux données provenant d'une seule et même cellule "85975222 85975224" vont donner ceci au collage dans le logiciel :

    Nom : Capture0.JPG
Affichages : 9330
Taille : 18,2 Ko


    unparia,

    Je te rassure, je ne viens pas au restaurant ; je résoud aussi des interrogations par moi même sur d'autre sujets.
    Et puis, je ne suis pas cuistot . j'aime bien tes métaphores, elles m'encouragent à percévérer.

    Le vif du sujet,

    Ma base de donnée est plus remplie que l'exemple que je montrai sur le fichier démo. En voici un aperçu :

    Nom : Capture.JPG
Affichages : 9396
Taille : 128,4 Ko

    Seules les données se trouvant dans les colonnes L, M, N, O me sont utiles pour chercher des données dans SAP.

    Je viens d'essayer l'exercice proposé et le split est, comme tu le construit, sur tous les caractères d'une cellule.

    Je lis beaucoup de documents sur boisgontierjacques mais tout n'est pas à ma portée.
    J'essaye de comprend au moins avec les miyens que j'ai et avec l'aide des pro de ce forum.

    J'aimerai vraiment comprendre et je vais m'efforcer de comprendre l'exercice que tu me propose. Je reviens vers vous dès que j'ai réussi à comprend celui-ci.

    Damien

  15. #15
    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 compris comment spliter la celulle.

    Ma parade est de copié la cellule et renvoyer vers une autre feuille dans la celulle A1. De là, j'exécute le code étali avec vos explications

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Sub split_cmde()
     Dim cmde As Byte
     
     tablo = Split(Range("A1"))
     For cme = 0 To UBound(tablo)
     Cells(cmde + 1, 1) = tablo(cmde)
     Next
     
     Range("A1:A" & Range("A" & Rows.Count).End(xlUp).Row).Copy 'me permet de copier le résultat dans le clip board
     
    End Sub

  16. #16
    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,
    Tu es certain que ce code fonctionne ?
    Tu déclares une variable nommée cmde en ligne 3 et ensuite tu utilises une variable cme pour ta boucle (d'où sort t'elle) et quand bien même tu utiliserais cmde, cela signifierait que tu écrases le contenu initial de A1
    Première remarque utilise l'Option Explicit en tête de module pour éviter ce genre de blague et si tu veux développer sans passer trop de temps en recherches inutiles.
    La variable cmde est typée Byte cela signifie que le nombre de mots de la chaîne en A1 séparés par un caractère espacé doit être inférieur à 255
    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

  17. #17
    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 Philippe,

    Erreur de copie / colle.

    Donc,
    Je sélectionne ma donnée qui est directement envoyée vers une sheet "temp"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
     
    Worksheets("temp").Range("a:a").ClearContents
        Sheets("Table de Travail").Select
    If Target.Count > 1 Then Exit Sub 'si plus d'une cellule sélectionnée, la macro s'arrete
    Target.Copy Destination:=Sheets("temp").Range("a1")
     
    End Sub
    Au double clic sur ma donnée, la procédure pour switcher vers SAP est lancé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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
     
    Sub launch_LT22()
    Application.ScreenUpdating = False
     
    On Error GoTo ErrMsg
     
        Dim App, Connection As Object, session As Object
        Set SapGuiAuto = GetObject("SAPGUI")
        Set App = SapGuiAuto.GetScriptingEngine
        Set Connection = App.Children(0)
        Set session = Connection.Children(0)
     
    Call split_num
     
    session.findById("wnd[0]").maximize
    session.findById("wnd[0]/tbar[0]/okcd").Text = "/nlt22"
    session.findById("wnd[0]").sendVKey 0
    session.findById("wnd[0]").sendVKey 17
    session.findById("wnd[1]/usr/txtV-LOW").Text = "CHECK DLV R HU"
    session.findById("wnd[1]/usr/txtENAME-LOW").Text = ""
    session.findById("wnd[1]/usr/txtENAME-LOW").SetFocus
    session.findById("wnd[1]/usr/txtENAME-LOW").caretPosition = 0
    session.findById("wnd[1]").sendVKey 8
    session.findById("wnd[0]").sendVKey 16
    session.findById("wnd[0]/usr/ssub%_SUBSCREEN_%_SUB%_CONTAINER:SAPLSSEL:2001/ssubSUBSCREEN_CONTAINER2:SAPLSSEL:2000/cntlSUB_CONTAINER/shellcont/shellcont/shell/shellcont[1]/shell").selectNode "        237"
    session.findById("wnd[0]/usr/ssub%_SUBSCREEN_%_SUB%_CONTAINER:SAPLSSEL:2001/ssubSUBSCREEN_CONTAINER2:SAPLSSEL:2000/cntlSUB_CONTAINER/shellcont/shellcont/shell/shellcont[1]/shell").topNode = "        229"
    session.findById("wnd[0]/usr/ssub%_SUBSCREEN_%_SUB%_CONTAINER:SAPLSSEL:2001/ssubSUBSCREEN_CONTAINER2:SAPLSSEL:2000/ssubSUBSCREEN_CONTAINER:SAPLSSEL:1106/txt%%DYN006-LOW").SetFocus
    session.findById("wnd[0]/usr/ssub%_SUBSCREEN_%_SUB%_CONTAINER:SAPLSSEL:2001/ssubSUBSCREEN_CONTAINER2:SAPLSSEL:2000/ssubSUBSCREEN_CONTAINER:SAPLSSEL:1106/txt%%DYN006-LOW").caretPosition = 0
    session.findById("wnd[0]/usr/ssub%_SUBSCREEN_%_SUB%_CONTAINER:SAPLSSEL:2001/ssubSUBSCREEN_CONTAINER2:SAPLSSEL:2000/ssubSUBSCREEN_CONTAINER:SAPLSSEL:1106/btn%_%%DYN006_%_APP_%-VALU_PUSH").press
    session.findById("wnd[1]/usr/tabsTAB_STRIP/tabpSIVA/ssubSCREEN_HEADER:SAPLALDB:3010/tblSAPLALDBSINGLE/txtRSCSEL_255-SLOW_I[1,0]").Text = ""
    session.findById("wnd[1]").sendVKey 24
    session.findById("wnd[1]").sendVKey 8
    session.findById("wnd[0]").sendVKey 8
     
    Sheets("Table de Travail").Select
     
    Exit Sub
    Application.ScreenUpdating = True
    App.Visible = True
     
    ErrMsg:
    MsgBox ("SAP n'est pas ouvert"), , "!! ATTENTION !!"
     
     
    End Sub
    Le split_num est lancé depuis la procédure précédente.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Sub split_num()
     Dim cptr As Byte
     
    Sheets("temp").Select
     
     tablo = Split(Range("A1"))
     For cptr = 0 To UBound(tablo)
            Cells(cptr + 1, 1) = tablo(cptr)
        Next
     
        Range("A1:A" & Range("A" & Rows.Count).End(xlUp).Row).Copy
     
     End Sub
    J'ai donc le résultat escompté même si c'est pas très "clean"

    J'ai appliqué ta remarque concernant Option Explicit

    Merci pour votre aide

    :-)
    Damien

  18. #18
    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,
    Erreur de copie / colle.
    C'est un peu curieux non ?
    C'est la première fois que j'entends que le Copier/Coller transforme des caractères.L

    J'ai appliqué ta remarque concernant Option Explicit
    Pour ne plus avoir à t'en préoccuper, modifie l'option de l'éditeur VBE (Outils/Options... [Editeur] cocher l'option Déclaration des variables obligatoire)
    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

+ 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