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 : Récupérer des donnees d'une cellule


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2012
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2012
    Messages : 44
    Par défaut VBA : Récupérer des donnees d'une cellule
    Bonjour,

    j'ai posté un message pour l'outil soap ui mais je cherche d'autre solutions pour le problème que j'enonce ci-dessous :
    Je lance des requetes via SOAP UI et j'ai la possibilité de récupérer des bouts de code XML dans une cellule Excel, exmple :


    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <PivotContrat>
                <q1:NumeroContrat>57000789</q1:NumeroContrat>
                <q1:FamilleProduit>EPA</q1:FamilleProduit>
            </PivotContrat>
            <PivotContrat>
                <q1:NumeroContrat>59000585</q1:NumeroContrat>
                <q1:FamilleProduit>EPA</q1:FamilleProduit>
            </PivotContrat>
    Je souhaiterais récupérer les numéros de contrats pour les enseinger dans un tableau d'un autre feuille.
    je connais un code qui permet de récupérer des donnes xml sur un fichie mais étant données que c'est dans le cadre d'une automatisationd e test j ene peux générer un fichier avec es numéros de contrat pour chaque client ca ferait beaucoup et je préfère stocker un extrait du code xml qui m'interesse dans une cellule. Je voudrai spour autant récupéer les donnes mais je ne sais pas trop comment débute.

    Bien cordialement.

  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
    En supposant que tes données soient en colonne A et commencent en ligne 1.
    Mets en B1 la formule :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SI(ESTERREUR(TROUVE("NumeroContrat>";A1));"";STXT(A1;TROUVE(">";A1)+1;8))
    Recopie B1 vers le bas autant que nécessaire.

  3. #3
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2012
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2012
    Messages : 44
    Par défaut
    Merci, c'est la formule qu'il me faut mais j'ai besoin d'une boule parce que je veux que a me cree plusieurs ligne de réponse avec les contrat.
    Disons que le tableau de depart est comme suit (j'aurais du le préciser avant )


    IdClient1 XML1
    IdClient2 XML2
    idClient3 XML3


    Et le XML1 est comme suit :

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <PivotContrat>
                <q1:NumeroContrat>57000789</q1:NumeroContrat>
                      <q11:Avenant>avenant1</q11:Avenant>
                      <q11:Avenant>avenant2</q11:Avenant>
                <q1:FamilleProduit>EPA</q1:FamilleProduit>
            </PivotContrat>
            <PivotContrat>
                <q1:NumeroContrat>59000585</q1:NumeroContrat>
                <q1:FamilleProduit>EPA</q1:FamilleProduit>
            </PivotContrat>

    Et la table finale doit être comme ca :

    IdClient1 Numcontrat1 Avenant1
    IdClient1 Numcontrat2 Avenant2
    IdClient1 Numcontrat3
    IdClient2
    IdClient3 Numcontrat1

    Une ligne représente un cas avec un Id Clint, un contrat, un avenant au contrat
    L'id Client est toujours renseigné, mais il peu ne pas avoir de contrat dans ce cas le champs contrat est vide ou pas d'avenant dans ce cas le cham avenant est vide.
    Une line a forcement un id clien, mais lel peut avoir le reste de cette colonne vide.

    Du coup je me dis qu'il me faut une boucle avec la formule que vous m'avez donnée mais dans une macro VBA.
    En fait il me faut des boucles imbriquées mais je ne sais pas faire ça sur excel, achant que qd le fihcier est XML il a juste à repérer les neoud et un For EACH element suffit.

    c'est possible de variabiliser le 1 de [B1] ?

    La difficulté est du faite que l'on ne sait pas combien de contrat il y a pour chaque client donc le i sa valeur final pour faire une boucle est compliqué pour moi, n'étant pas en plus particulièrement spécialiste VBA. Mais j'ai nvie d'apprendre.

    Citation Envoyé par Menhir Voir le message
    En supposant que tes données soient en colonne A et commencent en ligne 1.
    Mets en B1 la formule :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SI(ESTERREUR(TROUVE("NumeroContrat>";A1));"";STXT(A1;TROUVE(">";A1)+1;8))
    Recopie B1 vers le bas autant que nécessaire.
    J'ai peut être parlé un peu vite j'ai appliqué cette formule mais elle m'a retournée NumeroCl, peut etre il y a une inversion qqpart à faire

  4. #4
    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 dedey63 Voir le message
    J'ai peut être parlé un êu vite j'ai appliqué cette formule mais elel m'a reourné NumeroCl, peut etre il y a une inversion qqpart à faire
    J'ai fait le test sur l'exemple que tu as donné et ça m'a bien sorti les deux numéros de contract.
    Mais pour ça, j'avais supposé que le contenu de XML était copié dans la colonne A du tableau Excel avec une ligne par cellule.

  5. #5
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2012
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2012
    Messages : 44
    Par défaut
    Non en fai tle XML est dans une cellule.
    Du coup tu penses qu'on peut toujours apliquer ta formule?

    En fait j'ia un code pour récupérer directement quand le fichier est xml :

    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
    Sub Lire()
     
    'Initialisation du parseur
    Set xmlDoc = CreateObject("Microsoft.XMLDOM")
     
    'Ouverture du fichier xml
    xmlDoc.Async = "false"
    xmlDoc.Load ("WS\Projets\CCEV3\ReponseCCEV3")
     
    'Declaration d'un compteur de Numero de compte
    Dim i As Integer
    i = 2
     
    'On récupère tous les noeuds PivotContrat dans le xml
    For Each PivotContratElement In xmlDoc.SelectNodes("soapenv:Envelope/soapenv:Body/ser-root:getDataResponse/PivotContrat")
     
    'On recupere les NumContrat
    NumeroContrat = PivotContratElement.SelectSingleNode("NumeroContrat").Text
    Cells(i, 7) = NumeroContrat 'Ecris le numéros de contrat sur la colonne G
     
    'MsgBox "NumeroContrat : " & NumeroContrat, vbOKOnly + vbInformation, "Test"
     
    i = i + 1
    Next
     
    'Destruction du parseur
    Set xmlDoc = Nothing
     
    End Sub
    Mais le problème c'est que ma requete SOAP UI va être lancé peut etre 100 fois et je ne veux pas générer 100 fichier xml.
    Je préfere selectionner la partie qui m'interesse dans la réponse et la mettre dans un tableau.
    Donc pour chaque numClient requeté il va nregitrer le num client et l'extrait de code xml dans un tableau excel.
    L'idée étant de reprendre ur un autre feuill par exemple le numero de client et ls contrat attaché et les avenant attaché à un contrat, de la facon que j'ai illustré ci-dessus.

    bien cordialement

  6. #6
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2012
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2012
    Messages : 44
    Par défaut
    Je pense avoir trouvé une solution, mais j'ai un petit problème.

    Je réutilise la même macro pour récupérer le xml, à ceci près que je ne passe pas en paramètre un chemin mais une cellule pour xmlDoc.Load


    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
    Sub LireC()
     
    'Declaration des variables peut être à utiliser
    'Dim celluleCible, celluleOrigine As Range
    'Dim NumeroContrat, NumeroAvenant As Integer
     
    'Initialisation du parseur
    Set xmlDoc = CreateObject("Microsoft.XMLDOM")
     
    'Declaration du compteur i
    Dim i As Integer
    i = 2
    'celluleOrigine commence à B3
    celluleOrigine = Cells(3, 2)
     
     
    'Ouverture du fichier xml
    xmlDoc.Async = "false"
    xmlDoc.Load (celluleOrigine) 'à c moment là j'ai véirifié celluleOrigine est bien égal au xml
     
    'On récupère tous les noeuds PivotContrat dans le xml
    For Each PivotContratElement In xmlDoc.SelectNodes("PivotContrat")
     
        'On recupere les NumContrat
        NumeroContrat = PivotContratElement.SelectSingleNode("NumeroContrat").Text
        Cells(i, 7) = NumeroContrat 'Ecris le code ptf sur la colonne G
     
        i = i + 1
     
    Next
     
    End Sub
    Alors quand je met en mode debug, la celluleOrigine a bien la valeur du xml, seulement il passe de For Each sans entrer à l'interieur à Next et End Sub.
    Je ne comprend pas pourquoi il n'entre pas à l'intérieur.
    Lorsque je copie:colle le contenu de la cellule dans notepad je me rend compte que excel rajoute des "" entre le debut et la fin du XML, il fait "XML" mais quand dans excel je fait remplacer " par vide il me dit qu'il n y a aucun "
    Du coup je ne sais pas déjà si c'est ca qui fait qu'il n'entre pas dans la boucle.

    Voici comment se présente le XML en gros :

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    "<PivotContrat>
      <NumeroContrat>388</NumeroContrat>
      <FamilleProduit>UUU</FamilleProduit>
      <CategorieProduit>87</CategorieProduit>
      <DateEffet>2004-07-12T00:00:00</DateEffet>
      <EtatContrat>1</EtatContrat>
      <DateChgtEtat>2004-07-26T00:00:00</DateChgtEtat>
      <LibelleInformationContrat/>
      <Portefeuille>408640485</Portefeuille>
      <SAGestionContrat>O</SAGestionContrat>
     </PivotContrat>"

    S'il cous plaît aider moi à fair emarcher ce truc je suis un peu à cours d'idée

  7. #7
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2012
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2012
    Messages : 44
    Par défaut
    J'ai essayé autre chose.
    je me suis dis qu'il fallait ombiné les deux méthode.

    1) Creer un fichie xml qui servirait de variable temporaire
    2) Coller le contenu de la cellule dans ce fichier
    3) Vider le contenu du fichier

    J'ai rentré le code suivant :

    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
    Public Function EcrireXML(numLigne As Integer)
    Close
    Chemin = "\Recette\WS\Projets\CCEV3"
    Open Chemin & "Tempo.xml" For Output As #1
    Print #1, Worksheets("Feuil1").Cells(numLigne, 2)
    Close
     
    End Function
     
     
    Sub EcrireInXML()
     
        Dim i As Integer
        i = 4
        EcrireXML (i)
     
    End Sub
    Mais quand je debug il ne fait rien du tout.
    Il ne crée pas le fichier et si je crée le fihcier à la main il ne le rempli pas.

    Je ne vois pas ce qui cloche.

Discussions similaires

  1. Récupérer des valeurs dans une unique variable VBA
    Par LaMite dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 28/04/2014, 12h06
  2. [Toutes versions] Récupérer des valeurs dans une ligne dont une seule cellule est selectionnée
    Par Tommy57 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 07/02/2010, 20h37
  3. IMPORTANT : Récupérer des données sur une base de donnee externe
    Par _cece dans le forum Développement de jobs
    Réponses: 0
    Dernier message: 17/10/2008, 16h57
  4. Réponses: 2
    Dernier message: 17/10/2006, 11h25
  5. [VBA-E]récupérer l'adresse d'une cellule
    Par julyBL dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 06/06/2006, 19h29

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