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 :

Récuperer des informations dans une ligne


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France, Calvados (Basse Normandie)

    Informations forums :
    Inscription : Juin 2007
    Messages : 60
    Points : 56
    Points
    56
    Par défaut Récuperer des informations dans une ligne
    Bonjour,

    Je voudrais une information, j'ai beau chercher sur le forum je n'ai pas trouvé :-(.

    Donc en faite je vous explique je récupère une information dans la base de donnée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     .Options = rs.Fields("Options").Value
    Qui donne en gros par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .Options = "Options : 1 Grande Gouttière, 1 Kit Décor, 2 Rampe d'accès, à livrer avant le [Date]"
    Donc en faite je voudrais récupérer les options pour les afficher dans un tableau excel.

    Colone 1 - Colonne 2
    Qté - Désignation
    1 - Grande Gouttière
    1 - Kit Décor
    2 - Rampe d'accès
    Si quelqu'un aurait une idée s'il vous plaît ?

    Merci

  2. #2
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Une idée ? Oui ! La meilleure ? pas sûr...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub test
    Dim Tablo As Variant, i as integr
     
         Tablo = Split(Replace(.option, ":", ","), ",")
         Ligdeb = 5 ' première ligne du report des données, à adapter
         Cells(Ligdeb, 1) = "Qté"
         Cells(Ligdeb, 2) = "Désignation"
         For i = Ligdeb + 1 To Ligdeb + UBound(Tablo) - 1
              Cells(i, 1) = Split(Tablo(i - Ligdeb), " ")(1)
              Cells(i, 2) = "'- " & Right(Tablo(i - Ligdeb), Len(Tablo(i - Ligdeb)) - 2)
         Next
    End Sub
    Mais Cafeine va certainement te donner un code plus sioux

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France, Calvados (Basse Normandie)

    Informations forums :
    Inscription : Juin 2007
    Messages : 60
    Points : 56
    Points
    56
    Par défaut
    Re ;-)

    Donc après quelque test voici se que j'ai construit mais j'ai une erreur C marque :

    Erreur d'exécution '9' :
    L'indice n'appartient pas à la selection
    Sachant que

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    objCommande.Options = "OPTIONS: 1 Grande gouttière 100mm 2 pentes <=3,0m, 1 Kit décor (Planches de rive, jardinière, haut de fenêtre festonnées, 1 Rampes d'accés 100x100)"
    Apparament le problème viendrais du <=3,0m, je parle principalement de la "," qui doit m'ennuyer :-(

    Sachant également que je n'ai pas besoin de note qui sont entre parenthèse
    )Planches de rive, jardinière, haut de fenêtre festonnées, 1 Rampes d'accés 100x100)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Private Sub AjoutLigneOption(objCommande As Commande)
        Dim LigneOptionAs Variant, i As Integer
     
        LigneOption= Split(Replace(objCommande.Options, ":", ","), ",")
            For i = Ligne + 1 To Ligne + UBound(Tablo) - 1
                Cells(i, 1) = Split(LigneOption(i - Ligne), " ")(1)
                Cells(i, 2) = "'- " & Right(LigneOption(i - Ligne), Len(LigneOption(i - Ligne)) - 2)
            Next
     
    End Sub
    Si tu as une petit solution s'il te plait ?
    J'ai pas compris tout le code actuellement, j'essaye de le traduire pour essayer de me débrouiller tout seul.
    Merci

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France, Calvados (Basse Normandie)

    Informations forums :
    Inscription : Juin 2007
    Messages : 60
    Points : 56
    Points
    56
    Par défaut
    Rebonjour,

    Donc je cherche toujours actuellement je voudrais supprimer tout se qui me sers a rien comme se qu'il y a entre parenthèse donc j'avais commencer à faire ceci :

    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
    Public Sub Recherche()
    Dim LigneOption As Variant, m As Integer, Ligne As Long
     
        Ligne = 1
     
        Options = "OPTIONS: 1 Grande gouttière 100mm 2 pentes <=3,0m, 1 Kit décor (Planches de rive, jardinière, haut de fenêtre festonnées, 1 Rampes d'accés 100x100), Standby"
     
        Debut = InStr(1, Options, "(")
        Fin = InStr(1, Options, ")") + 1
     
        For m = Debut To Fin
                OptionsFinal = Replace(Options, "(", "", Debut)
                Debut = Debut + 1
                Cells(1, 3) = OptionsFinal
        Next
     
        Cells(1, 1) = Debut
        Cells(1, 2) = Fin
     
     
    End Sub
    Mais sa me supprime tout le début de ma ligne :-(

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France, Calvados (Basse Normandie)

    Informations forums :
    Inscription : Juin 2007
    Messages : 60
    Points : 56
    Points
    56
    Par défaut
    Coucou,

    Donc j'ai trouvé une solution en m'aidant de ceci :

    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
    Sub Command1()
     
    Dim sChaine As String
    Dim sString As String
    Dim iLocateFirst As Integer
    Dim iLocateSecond As Integer
    Dim iDiff As Integer
     
    sChaine = "OPTIONS: 1 Grande gouttière 100mm 2 pentes <=3,0m, 1 Kit décor (Planches de rive, jardinière, haut de fenêtre festonnées), 1 Rampes d'accés 100x100, Standby"
    '"Pomme (123456789)"
     
    iLocateFirst = InStr(1, sChaine, "(")
    iLocateSecond = InStr(iLocateFirst, sChaine, ")")
    sDiff = iLocateSecond - iLocateFirst
     
     
    sString = Mid$(sChaine, iLocateFirst, sDiff)
    DebutString = Mid$(sChaine, 1, iLocateFirst - 1)
    FinString = Mid$(sChaine, iLocateSecond + 1, sDiff)
    FinalString = DebutString & FinString
     
    Cells(5, 1) = sString
    Cells(6, 1) = DebutString
    Cells(7, 1) = FinString
    Cells(8, 1) = FinalString
     
     
    End Sub

  6. #6
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Il est clair que mon code ne pouvait fonctionner que si les données présentait toujours un format identique et que la quantité, elle-même séparée par un espace de la virgule qui la précède, était séparée également par un espace de l'article.
    Donc, tant mieux si tu as pu trouver un code qui correspond à tes besoins

  7. #7
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Résolu ? Alors vite un clic sur en bas de cette fenêtre

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France, Calvados (Basse Normandie)

    Informations forums :
    Inscription : Juin 2007
    Messages : 60
    Points : 56
    Points
    56
    Par défaut
    Coucou,

    Voila mon code presque finalisé mais j'ai une erreur a la fin :-(, il ne me met pas le numero dans la 1ère colone :-(.

    Si tu as un peu de temps pour voir se qui cloche s'il te plait.

    Car je n'ai pas encore compris à quoi servent les Split, Right, Lent :-(

    Merci

    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
     
    Public Sub TraitementOption()
        Dim LigneOption As Variant, i As Integer, Ligne As Integer
        Dim iLocateFirst As Integer, iLocateSecond As Integer, sDiff As Integer
        Dim sString As String, DebutString As String, FinString As String, FinalString As String, LesOptions As String
     
        Options = "OPTIONS: 1 Grande gouttière 100mm 2 pentes <=3,0m, 1 Kit décor (Planches de rive, jardinière, haut de fenêtre festonnées), 1 Rampes d'accés 100x100, 1 Standby(pkoi pas lol)"
        Ligne = 1
     
        LesOptions = Replace(Options, "OPTIONS: ", "")
     
        While InStr(1, LesOptions, "(") <> 0
            iLocateFirst = InStr(1, LesOptions, "(")
            iLocateSecond = InStr(iLocateFirst, LesOptions, ")")
            sDiff = iLocateSecond - iLocateFirst
     
            sString = Mid$(LesOptions, iLocateFirst, sDiff)
            DebutString = Mid$(LesOptions, 1, iLocateFirst - 1)
            FinString = Mid$(LesOptions, iLocateSecond + 1, sDiff)
            LesOptions = DebutString & FinString
        Wend
     
        LigneOption = Split(Replace(LesOptions, ", ", ";"), ";")
     
        For i = Ligne + 1 To Ligdeb + UBound(LigneOption) - 1
              Cells(i, 1) = Split(LigneOption(i - Ligne), " ")(1)
              Cells(i, 2) = Right(LigneOption(i - Ligne), Len(LigneOption(i - Ligne)) - 2)
        Next
     
    End Sub

  9. #9
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Mon code ne fonctionnera pas si le format de ta ligne n'est pas identique pour chaque ligne.
    En outre, tu mets dans ton premier message
    .Options = rs.Fields("Options").Value
    Le point qui précède Options a un sens. J'ignore lequel mais il s'agit d'un objet.
    Si tu obtenais ta ligne avec ce code, tu dois peut-être passer par une variable intermédiaire.
    Par exemple LaLigne = .Options
    Mais là je suis dans le flou.
    Le mieux, pour qu'on voit plus clair, serait que tu mettes comment tu récupères .Options.

    Split
    Split convertit un string en tableau dont la taille correspond au nombre de séparateurs que comporte le string. Le premier indice est 0 (zéro)
    La syntaxe est
    LeTableau = Split(LeString, LeSéparateur)
    LeString = "Je prends un exemple"
    LeTableau = Split(LeString, " ")
    Tu obtiendras Ubound(LeTableau) = 3
    LeTableau(0) = "Je"
    LeTableau(1) = "prends"
    etc.

    Replace
    Remplace un caractère partout dans un string
    Replace(.option, ":", ",") remplace ":" par une virgule.

    Pourquoi le code que je t'ai passé ne fonctionnera pas ?
    La première valeur de .Options que tu as citée était
    LeString = "Options: 1 Grande Gouttière, 1 Kit Décor, 2 Rampe d'accès, à livrer avant le [Date]"
    En remplaçant ":" par une virgule puis en utilisant l'espace comme séparateur, je pouvais en déduire la quantité
    Par contre, dans l'exemple suivant tu mets ",0m," sans espace après la virgule et sans espace entre 0 et m.
    Mon code ne trouvant pas de séparateur, cette ligne
    Cells(i, 1) = Split(Tablo(i - Ligdeb), " ")(1)
    devient fausse à deux titres : Il n'y a pas d'espace dans "0m", il n'existe donc pas d'indice 1
    Bref, ou tu as mis n'importe quoi... ou tes données ne sont pas cohérentes entre elles, auquel cas tu ne peux pas utiliser mon code.
    Voilà.
    A toi de préciser ce qu'il en est.

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France, Calvados (Basse Normandie)

    Informations forums :
    Inscription : Juin 2007
    Messages : 60
    Points : 56
    Points
    56
    Par défaut
    Bonjour,

    Merci pour ses précisions, en faite

    .Options = rs.Fields("Options").Value

    Récupère des données dans la base de donnée, ici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .Options = "OPTIONS: 1 Grande gouttière 100mm 2 pentes <=3,0m, 1 Kit décor (Planches de rive, jardinière, haut de fenêtre festonnées), 1 Rampes d'accés 100x100"
    C'est pour cela que j'ai supprimé se qu'il y a entre parenthèse pour simplifier la ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .Options = "OPTIONS: 1 Grande gouttière 100mm 2 pentes <=3,0m, 1 Kit décor, 1 Rampes d'accés 100x100"
    J'ai par la suite supprimé "Options :"

    Pour que cela donne maintenant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .Options = "1 Grande gouttière 100mm 2 pentes <=3,0m, 1 Kit décor, 1 Rampes d'accés 100x100"
    Donc au lieu de demander comme séparateur "," j'ai voulu mettre ", " se qui me permettait de passer a travers le "<=3,0m"

    C'est gentil de m'aider mais je comprend que c'est compliqué dans mon cas :-S

    Je vais encore chercher, merci

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France, Calvados (Basse Normandie)

    Informations forums :
    Inscription : Juin 2007
    Messages : 60
    Points : 56
    Points
    56
    Par défaut
    Bonjour,

    Donc j'ai trouvé une méthode pour régler mon problème qui est beaucoup plus compliquer, je n'avais pas vue que chaque option était enregistrer en t'en que article dans la base de donnée.

    Je vais aller les rechercher dedans sa sera beaucoup plus simple ;-)

    Merci encore pour vos précieuses information que je met de coté et qui me servirons bientôt ;-)

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

Discussions similaires

  1. [Débutant] Récuperer les informations d'une ligne sélectionnée dans un datagrid
    Par ejourdan dans le forum Silverlight
    Réponses: 1
    Dernier message: 19/04/2013, 15h10
  2. Réponses: 9
    Dernier message: 19/09/2006, 19h27
  3. regrouper des informations dans une seule ligne
    Par rozow dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 11/04/2006, 16h03
  4. Regrouper des colonnes dans une ligne
    Par aturlan dans le forum Access
    Réponses: 1
    Dernier message: 11/01/2006, 21h05
  5. Chercher des mots dans une ligne
    Par chemouz dans le forum C++
    Réponses: 1
    Dernier message: 17/12/2005, 12h42

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