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 :

Extraire texte d'une collection [XL-2013]


Sujet :

Macros et VBA Excel

  1. #1
    Membre éclairé
    Homme Profil pro
    Constructeur ossature bois
    Inscrit en
    Mars 2014
    Messages
    897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Constructeur ossature bois
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Mars 2014
    Messages : 897
    Points : 650
    Points
    650
    Par défaut Extraire texte d'une collection
    Bonsoir le forum,

    voilà j'ai un petit souci pour extraire du texte dans une collection 1

    dans cette collection 1 j'ai plusieurs adresses web et j'aimerai extraire les 6 derniers caractères de chaque adresse afin de les consigner dans une autre collection 2

    pour extraire les caractères j'utilise
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Right("www.blabla/blabla/123456",6)
    Je pense qu'il faut que j'utilise une boucle "For each...In....next" afin de lui dire que "pour chaque adresse dans la collection , il faut extraire les 6 derniers caractère, et les additionner (.Add) dans la collection 2"

    Qu'en pensez-vous?

    enfin cette collection 2, servira à compléter par une boucle, plusieurs adresses web.

    A+ et merci d'avance

  2. #2
    Membre éprouvé
    Homme Profil pro
    Programmeur analyste
    Inscrit en
    Février 2009
    Messages
    546
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Canada

    Informations professionnelles :
    Activité : Programmeur analyste
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2009
    Messages : 546
    Points : 1 116
    Points
    1 116
    Par défaut
    Bonjour,
    je ferais la même chose

  3. #3
    Membre éclairé
    Homme Profil pro
    Constructeur ossature bois
    Inscrit en
    Mars 2014
    Messages
    897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Constructeur ossature bois
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Mars 2014
    Messages : 897
    Points : 650
    Points
    650
    Par défaut
    Bonsoir Gnain,
    Merci pour ta réponse, ça me rassure.....

    Mais mon souci est comment coder ce morceau....je bloque sur cette partie

    A+

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    À priori,je sais ce que c'est une collection! J'aimerais que tu me dises comment tu obtiens la tienne pour être sur que l'on parle de la même chose!

  5. #5
    Expert éminent
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Points : 6 871
    Points
    6 871
    Par défaut
    Bonjour,

    Une piste si on parle bien de "Collection" :
    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 Charger()
     
        Dim Tbl As New Collection
        Dim I As Integer
     
        On Error Resume Next 'gère l'erreur de l'existance de la clé
     
        Tbl.Add "www.blabla/blabla/123456", "www.blabla/blabla/123456"
        Tbl.Add "www.blabla/blabla/123457", "www.blabla/blabla/123457"
        Tbl.Add "www.blabla/blabla/123458", "www.blabla/blabla/123458"
        Tbl.Add "www.blabla/blabla/123459", "www.blabla/blabla/123459"
     
        On Error GoTo 0
     
        For I = 1 To Tbl.Count
     
            Debug.Print Split(Tbl(I), "/")(UBound(Split(Tbl(I), "/")))
     
        Next I
     
    End Sub
    Hervé.

  6. #6
    Membre éclairé
    Homme Profil pro
    Constructeur ossature bois
    Inscrit en
    Mars 2014
    Messages
    897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Constructeur ossature bois
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Mars 2014
    Messages : 897
    Points : 650
    Points
    650
    Par défaut
    Bonjour à tous,
    Bonjour rdurupt

    Voici un extrait du code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Set IEdocP = IEPartants.document
       'Mémoriser le Nb de partants pour chaque Courses
        For Each P In IEdocP.anchors
            If P.href Like "*programmes-et-pronostics/partants?id=*" Then
            ColNbPartants.Add P.href, P.href
            End If
        Next P
    Est-ce que tu veux?

    Edit:
    Bonjour Theze,

    Oui je parle bien de collection, mais dans ton code, il additionne chaque lien manuellement, non???
    Hors les numéros sont généré aléatoirement tous les jours, et je lance cette récup tous les jours
    A+

  7. #7
    Invité
    Invité(e)
    Par défaut
    nous préférons des dictionnaire à des collection (qui sont d'autres type de collectons) car nous pouvons mieux contrôlé l’existence d'une occurrence et on utiles pas le OnError!

    pour la deuxième partie, je me suis inspiré du code de Theze
    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
    Dim ColNbPartants As Object ' As New Collection
    Dim SplitNbPartants As Object ' As New Collection
    Dim t
    Set ColNbPartants = CreateObject("Scripting.dictionary")
    Set SplitNbPartants = CreateObject("Scripting.dictionary")
     
    For Each P In IEdocP.anchors
        If P.href Like "*programmes-et-pronostics/partants?id=*" Then
        If ColNbPartants.exists(P.href) = False Then ColNbPartants.Add P.href, P.href
    End If
    Next P
        For Each d In ColNbPartants.items
        t = Split(d, "id=")(UBound(Split(d, "id=")))
        If SplitNbPartants.exists(t) = False Then SplitNbPartants.Add t, t
    Next
    ceci dit nous pouvions n'utiliser qu'une collection!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    For Each P In IEdocP.anchors
        If P.href Like "*programmes-et-pronostics/partants?id=*" Then
           t = Split((P.href, "id=")(UBound(Split((P.href "id=")))
           If ColNbPartants.exists(t) = False Then ColNbPartants.Add t, t
       End If
    Next
    Dernière modification par Invité ; 20/03/2015 à 10h51.

  8. #8
    Membre éclairé
    Homme Profil pro
    Constructeur ossature bois
    Inscrit en
    Mars 2014
    Messages
    897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Constructeur ossature bois
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Mars 2014
    Messages : 897
    Points : 650
    Points
    650
    Par défaut
    Re,

    Merci pour le code, j'utiliserai la première version du code car dans ma procédure, la 1ère collection créée est utilisée une seconde fois plus loin.

    Bon après test, c niquel

    Je n'avais encore jamais utiliser les dictionary, c'est une première....

    Par contre j'ai besoin d'un éclairage pour ma culture vba:

    On déclare les collections comme objet
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim ColNbPartants As Object ' As New Collection
    Dim SplitNbPartants As Object ' As New Collection
    Mais automatiquement si je les passe en nouvelle collection
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim ColNbPartants  As New Collection
    Dim SplitNbPartants  As New Collection
    comme dois-je gérer cette partie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Set ColNbPartants = CreateObject("Scripting.dictionary")
    Set SplitNbPartants = CreateObject("Scripting.dictionary")
    et bien évidemment celle-ci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If ColNbPartants.exists(P.href)
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If SplitNbPartants.exists(t)
    MErci encore pour votre aide

  9. #9
    Invité
    Invité(e)
    Par défaut
    vue que l'on utilise CreateObject("Scripting.dictionary") on déclare comme un objet.
    Code exemple : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Dim ObjWord as object
    set ObjWord =CreateObject("Word.Application") 'pas besoin de bricoler dans le référence Excel
     
    dim AppWord as new Word.Application ' on a besoin de bricoler le référence Exel!

    Code dictionary : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    For Each d In ColNbPartants.items
        t = Split(d, "id=")(UBound(Split(d, "id=")))
        If SplitNbPartants.exists(t) = False Then SplitNbPartants.Add t, t
    Next


    Code Collection : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    For Each d In ColNbPartants
        t = Split(d, "id=")(UBound(Split(d, "id=")))
       on error resume next
       SplitNbPartants.Add t, t
      on error goto 0
    Next

  10. #10
    Membre éclairé
    Homme Profil pro
    Constructeur ossature bois
    Inscrit en
    Mars 2014
    Messages
    897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Constructeur ossature bois
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Mars 2014
    Messages : 897
    Points : 650
    Points
    650
    Par défaut
    Merci pour cette explication,

    En vue de ta réponse, j'ai créé deux procédures une avec collection et l'autre avec dictionary....

    Et avec dictionary la procédure va bien plus vite qu'avec une collection...

    Merci encore et à bientôt

    A+ et bonne journée

  11. #11
    Expert éminent
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Points : 6 871
    Points
    6 871
    Par défaut
    Re,

    Cocher la référence "Microsoft Scripting Runtime" --> Outils --> références --> cochez Microsoft Scripting Runtime
    Et après :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Dim ColNbPartants As New Dictionary
    comme dois-je gérer cette partie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Set ColNbPartants = CreateObject("Scripting.dictionary")
    Set SplitNbPartants = CreateObject("Scripting.dictionary")
    En partant de mon exemple précédent :
    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
     
    Sub Charger()
     
        Dim ColNbPartants As New Dictionary
        Dim I As Integer
        dim IEdocP as ...
        Dim P as ...
     
        For Each P In IEdocP.anchors
     
            If P.href Like "*programmes-et-pronostics/partants?id=*" Then
     
                If ColNbPartants.Exists(P.href) = False Then
     
                    ColNbPartants.Add P.href, P.href
     
                End If
     
            End If
        Next P
     
        On Error GoTo 0
     
        For I = 0 To ColNbPartants.Count - 1
     
            Debug.Print Split(ColNbPartants.Keys(I), "/")(UBound(Split(ColNbPartants.Keys(I), "/")))
     
        Next I
     
    End Sub
    Hervé.

  12. #12
    Expert éminent sénior
    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
    Points : 18 677
    Points
    18 677
    Par défaut




    Bonjour, bonjour !

    Si le besoin est juste d'extraire la fin d'une chaîne de caractères, je n'utiliserais qu'une simple variable tableau !
    Enfin tout dépend des tenants et des aboutissants …



    __________________________________________________________________________________________________
    Je suis Charlie - Je suis Bardo
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  13. #13
    Membre éclairé
    Homme Profil pro
    Constructeur ossature bois
    Inscrit en
    Mars 2014
    Messages
    897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Constructeur ossature bois
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Mars 2014
    Messages : 897
    Points : 650
    Points
    650
    Par défaut
    Merci Hervé,

    Jolie subtilité
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim ColNbPartants As New Dictionary
    Ne connaissant pas, je n'y aurai pas pensé

    Merci pour ta contribution

    Et à bientôt sur le forum

    A tchao

    Edit:

    Merci Marc-L de passer dans le coin,

    A+

  14. #14
    Membre éclairé
    Homme Profil pro
    Constructeur ossature bois
    Inscrit en
    Mars 2014
    Messages
    897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Constructeur ossature bois
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Mars 2014
    Messages : 897
    Points : 650
    Points
    650
    Par défaut
    Re à tous,

    Toujours dans mes collections...

    Après adaptation du code plus haut à mon code, un belle réussite d'ailleurs, je suis confronté à un autre dilemme ....

    Donc après récup de mes ID dans une collection, j'ai besoin d'appeler cette collection dans une autre procédure afin de faire évoluer une adresse web en fonction de celle-ci.

    Pour rappel voici la collection qui récupère les ID:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    For Each d In ColCourses '.Items
            T = Split(d, "id=")(UBound(Split(d, "id=")))
            On Error Resume Next
            ColIdC.Add T, T
            On Error GoTo 0
        Next
    Ma collection actuelle s'appelle ici
    ColIdC
    Dans mon autre procédure, je souhaite appeler "ColIdC"

    Pour ce faire j'utilise une boucle afin qu'à chaque item de la collection il l'incrémente à l'adresse suivante:
    Boucle:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For T = 1 To ColIdC.Count
        RecupNbPartants ColIdC(T)
        Next T
    Adresse:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    vURLPartants = "http://www.programmes-et-pronostics/course?id=" & ColIdC(T)
    Mais bien évidemment, j'ai une message d'erreur:
    L'indice n'appartient pas à la sélection
    Je comprends bien ce qu'il veut dire mais je ne sais pas comment avancer là-dessus

    Merci encore pour votre aide

    A+

  15. #15
    Expert éminent
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Points : 6 871
    Points
    6 871
    Par défaut
    Bonjour,

    Dans mon autre procédure, je souhaite appeler "ColIdC"

    Pour ce faire j'utilise une boucle afin qu'à chaque item de la collection il l'incrémente à l'adresse suivante:
    Boucle:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    For T = 1 To ColIdC.Count
        RecupNbPartants ColIdC(T)
        Next T
    J'ai un peu de peine à comprendre ce que tu souhaites faire !

    Hervé.

  16. #16
    Membre éclairé
    Homme Profil pro
    Constructeur ossature bois
    Inscrit en
    Mars 2014
    Messages
    897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Constructeur ossature bois
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Mars 2014
    Messages : 897
    Points : 650
    Points
    650
    Par défaut
    Bonjour Le Forum, et Bonjour Hervé,

    JE souhaite seulement faire évoluer une adresse web avec ce qu'il y a dans la collection "ColIdC" dans une autre procédure.

    Voici ce qu'il y a dedans
    "12345"
    "56789"
    "15978"
    "76342" etc...

    voici l'adresse à faire évoluer avec "ColIdC" dans la deuxième procédure:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    vURLPartants = "http://www.programmes-et-pronostics/course?id=" & ColIdC(T)
    Sauf que j'ai le message d'erreur "l'indice n'appartient pas à la sélection"...

    Bonne journée

  17. #17
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    bonjour,

    montre nous ou ce position ta ligne causant problème par rapport à ta boucle FOR ... si elle est après et à l'extérieur de ta boucle le message et cohérent étant donné que tu on index T est alors égal à ColIdC.Count +1 ....

  18. #18
    Membre éclairé
    Homme Profil pro
    Constructeur ossature bois
    Inscrit en
    Mars 2014
    Messages
    897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Constructeur ossature bois
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Mars 2014
    Messages : 897
    Points : 650
    Points
    650
    Par défaut
    Re,
    Et bonjour bbil,

    La ligne causant le problème dans la deuxième procédure est celle-ci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    vURLPartants = "http://www.programmes-et-pronostics/course?id=" & ColIdC(T)
    A+

  19. #19
    Invité
    Invité(e)
    Par défaut
    bonjour,
    ce qui m'échappe, c'est pourquoi faire une collection qui collecte les url?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    For Each P In IEdocP.anchors
     
            If P.href Like "*programmes-et-pronostics/partants?id=*" Then
     
                If ColNbPartants.Exists(P.href) = False Then
     
                    ColNbPartants.Add P.href, P.href
     
                End If
     
            End If
        Next P
    de balayer cette collection pour en récupérer les ID?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    For Each d In ColNbPartants.items
        t = Split(d, "id=")(UBound(Split(d, "id=")))
        If SplitNbPartants.exists(t) = False Then SplitNbPartants.Add t, t
    Next
    et enfin reconstituer l'URL presque identique?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    vURLPartants = "http://www.programmes-et-pronostics/course?id=" & ColIdC(T)
    alors qu'un Replace( P.href,"/partants?id=","/course?id=") suffirait?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    For Each P In IEdocP.anchors
        If P.href Like "*programmes-et-pronostics/partants?id=*" Then
           t = Split((P.href, "id=")(UBound(Split((P.href "id=")))
         Collection1.Add P.href,P.href
        Collection2.Add T,T
        Collection3.Add Replace( P.href,"/partants?id=","/course?id="),Replace( P.href,"/partants?id=","/course?id=")
     
       End If
    Next
    Dernière modification par Invité ; 21/03/2015 à 10h33.

  20. #20
    Membre éclairé
    Homme Profil pro
    Constructeur ossature bois
    Inscrit en
    Mars 2014
    Messages
    897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Constructeur ossature bois
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Mars 2014
    Messages : 897
    Points : 650
    Points
    650
    Par défaut
    Re à tous
    Bonjour rdurupt,

    Ohhh, très bonne idée à la quelle je n'avais pas pensé....

    de plus cela allège ma procédure.

    Je regarde cela et revient vous dire l'état d'avancement...

    Merci beaucoup de votre aide

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [XL-2007] Extraire texte d'une page HTML
    Par GuillaumeMorel dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 11/06/2014, 15h09
  2. reduire la taille du text d'une collection
    Par john_wili dans le forum Struts 1
    Réponses: 4
    Dernier message: 28/02/2009, 15h52
  3. [RegEx] Extraire du texte d'une balise
    Par GouKen dans le forum Langage
    Réponses: 1
    Dernier message: 28/01/2008, 17h17
  4. Réponses: 3
    Dernier message: 19/10/2006, 16h46
  5. Réponses: 4
    Dernier message: 19/10/2006, 14h29

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