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 :

Utiliser une méthode Replace sur un recordset, avant d'utiliser la méthode copyfromrecordset [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Mai 2008
    Messages
    80
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2008
    Messages : 80
    Par défaut Utiliser une méthode Replace sur un recordset, avant d'utiliser la méthode copyfromrecordset
    Bonjour à tous !

    Je pense que l'intitulé de mon problème est assez explicite :

    je cherche à savoir si il est possible de faire une méthode Replace sur toutes les valeurs contenu dans mon recordset, afin de supprimer les retours chariots et les sauts de lignes, avant de faire un copyfromrecordset sur mon fichier excel !

    Si vous avez besoin de précision n'hésitez pas, mais je ne vois pas comment être plus clair ^^

    Merci d'avance !

    Peace

  2. #2
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Mai 2008
    Messages
    80
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2008
    Messages : 80
    Par défaut
    Bonjour !

    Toujours personne ?

    J'ai fait pas mal de recherche mais je n'ai pas trouvé comment faire !

    J'avais pensé faire mon Replace sur chaque ligne du recordset, mais on a pas d'éléments du style "Row", donc pas moyen :X A moins que quelqu'un sache comment faire ?^^

    Ou autrement j'avais pensé à une autre chose : est-ce possible d'effectuer mon replace sur tout le contenu du recordset sans avoir besoin de traiter chaque ligne ?

    Merci,

    Peace

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour

    As-tu essayé d'utiliser le Replace dans la requête SQL qui alimente ton Recordset ?

    Philippe

  4. #4
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Mai 2008
    Messages
    80
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2008
    Messages : 80
    Par défaut
    Bonjour Philippe !

    Merci deja pour ta réponse ! Et bien je n'y avais pas pensé !

    Mais à vrai dire je ne vois pas trop comment faire : voici mon 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
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    Sub SelectSQL()
        Dim supcar As String
        Dim plage, cellule As Range
     
        On Error GoTo SelectSQL_Error
            nbrecords = 0
            supcar = ""
            CHR_SUP_A = Chr(10)
            CHR_SUP_B = Chr(13)
            'On déclare le recordset
            Set rs = New ADODB.Recordset
            'Exécute la requête
            rs.CursorLocation = adUseClient
            rs.Open REQ_SELECT, connect_foxpro, adOpenStatic, adLockReadOnly
            'On sélectionne la feuille de destination
            ActiveWorkbook.Sheets(NOM_FEUILLE_SELECT).Activate
            'On efface l'ensemble du contenu précédent
            ActiveSheet.Cells.Clear
            'On vérifie que l'on a bien récupéré des enregistrements
            If Not rs.EOF Then
                rs.MoveFirst
                Set targetrange = ActiveWorkbook.Sheets(NOM_FEUILLE_SELECT).Cells(1, 1)
                'Mise en place des noms de champs comme entêtes de colonne
                For intcolindex = 0 To rs.Fields.Count - 1
                    targetrange.Offset(0, intcolindex).Value = UCase(rs.Fields(intcolindex).Name)
                Next
                Application.StatusBar = "Extraction des enregistrements ..."
                'Intègre le contenu du jeu d'enregistrements dans la feuille de calcul Excel
                targetrange.Offset(1, 0).CopyFromRecordset rs
    Je renseigne ma requete via une constante, mais je vois pas à quel moment je pourrais utiliser le recordset sur ma requete entre le moment où j'y fais appel, et le moment où mon recordset l'utilise !!

    J'espère que je suis assez clair :$

    Merci d'avance,

    Peace

  5. #5
    Membre Expert
    Avatar de tototiti2008
    Homme Profil pro
    Formateur/développeur
    Inscrit en
    Octobre 2008
    Messages
    1 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Formateur/développeur

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 152
    Billets dans le blog
    2
    Par défaut
    Bonjour à tous,

    Mais à vrai dire je ne vois pas trop comment faire
    Il faut modifier le SQL contenu dans REQ_SELECT, pour ça...

    mais comme nous n'avons pas accès à ce contenu...

  6. #6
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Mai 2008
    Messages
    80
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2008
    Messages : 80
    Par défaut
    Bonjour tototiti2008 !

    Ba ecoute, c'est pas plus compliqué :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Public Const REQ_SELECT As String = "Select * from client"
    Ma requete est toute simple, mais je vois pas vraiment ou est que l'on utilise un replace là-dessus :/

    J'admet que j'ai encore jamais utilisé ça, et c'est la première fois que j'en entends parlé !!

    Merci,

    Peace

  7. #7
    Membre Expert
    Avatar de tototiti2008
    Homme Profil pro
    Formateur/développeur
    Inscrit en
    Octobre 2008
    Messages
    1 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Formateur/développeur

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 152
    Billets dans le blog
    2
    Par défaut
    Re,

    Comme ta requête utilise * (qui signifie tous les champs), il faudrait la modifier pour citer chaque champ à lire, puis essayer un Replace sur chacun d'entre eux... bref pas forcément simple
    en plus tu as l'air de te connecter à foxpro (?) et je ne connais pas les éventuelles spécificités du SQL foxpro

    L'autre solution est de ne pas utiliser un copyfromrecordset mais de boucler sur chaque champ et chaque enregistrement pour ecrire dans chaque cellule, ce qui permettrait de remplacer avant d'ecrire dans la cellule

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

Discussions similaires

  1. [XL-2007] Utiliser 3 fois Replace sur un seul mot; Une solution ?
    Par apt dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 04/10/2012, 21h35
  2. Méthode Open sur un recordSet
    Par hydroxygen dans le forum Pascal
    Réponses: 0
    Dernier message: 23/09/2009, 10h53
  3. une requete SQL sur un recordSet
    Par skillipo dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 30/11/2007, 13h15
  4. Comment utiliser une police spécifique sur un site
    Par Halukard dans le forum Mise en page CSS
    Réponses: 9
    Dernier message: 04/05/2007, 16h35
  5. [Font] utiliser une même police sur Windows et sur Linux ?
    Par iubito dans le forum Interfaces Graphiques en Java
    Réponses: 6
    Dernier message: 10/05/2005, 16h41

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