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 :

Problèmes de boucle


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Inscrit en
    Novembre 2009
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 9
    Par défaut Problèmes de boucle
    Bonjour,

    J'ai un petit souci à la mise au point de ma macro. Voilà je souhaite créer une macro qui me converti une feuille XLS en fichier CSV avec comme séparateur la virgule et les données non vide des colonnes encadrées par des guillemets

    Voilà donc la code ci-dessous que j'ai créé.
    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
    46
    47
    Sub Export_CSV()
    Dim Classeur, Classeur2 As Workbook
    Dim NbCl, NbLg, FnCl  As Integer
    Dim ValCel, Guillemets As String
     
     
        Set Classeur = ActiveWorkbook
     
        NbLg = 1
        FnCl = 3    ' 206
        Guillemets = """"
     
         'Selection de la Feuille Tableau
         Classeur.Sheets("TABLEAU").Select
     
        'Boucle de test de ligne
        Do
         'Boucle de accès aux cellules (colonnes)
     
         For NbCl = 1 To FnCl Step 1
     
     
            ValCel = Cells(NbLg, NbCl)
     
            If ValCel <> "" Then
              Cells(NbLg, NbCl) = Guillemets & ValCel & Guillemets
            End If
     
         Next NbCl
     
        'Remise à 1 du compteur de colonne
         NbCl = 1
        'Avance d'un pas compteur de ligne
         NbLg = NbLg + 1
     
         If Cells(NbLg, NbCl) = "" Then
                MsgBox " Le nombre de vos lignes converties sont :" & NbLg
         End If
     
     
        Loop Until IsEmpty (Cells(NbLg, NbCl))
     
         Classeur.SaveAs Filename:="C:\Peupl.csv", FileFormat:=xlCSV, CreateBackup:=False, Local:=True
     
        Workbooks("Peupl.csv").Close savechanges:=True
     
    End Sub
    Malheureusement à chaque fois que j'execute cette macro j'obtiens bien un fichier CSV mais seul les données de ma première colonne sont encadrées par des guillemets. Pour les autres colonnes je me retrouve avec des double guillemets tel que :

    Données fichier XLS d'entrée :

    Nom|Prénom|Nom patrynomique|etc..

    Données du fichier CSV créé par ma macro

    "Nom",""Prénom"",""Nom patrynomique", etc..

    Pouvez ous m'aider je ne vois où j'ai bien put faire une erreur

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 130
    Par défaut
    Salut charnizay37 et le forum
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim Classeur As Workbook, Classeur2 As Workbook
    Dim NbCl As Integer, NbLg As Long, FnCl  As Integer
    Dim ValCel As String, Guillemets As String
    Pour tes déclarations tu dois être plus explicite. Si tu ne mets pas le type derrière, Excel par du principe que c'est un Variant.

    N'utilisant pas les csv (et pour cause de grosse flemme), pas envie d'en sortir un. Donc juste quelques idées :

    Mets un point d'arrêt sur ta macro juste avant de convertir et véririfies que tu as bien des guillements simples dans tes cellules. Si c'est le cas, ta "panne" vient de la conversion.

    Ne connaissant ni le csv, ni le but des guillemets, juste une suggestion : passe tes colonnes en format "Texte", et fais une conversion directement. si ça ne foctonne pas, essaie dessus ta macro.
    A+

  3. #3
    Membre averti
    Inscrit en
    Septembre 2009
    Messages
    31
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations forums :
    Inscription : Septembre 2009
    Messages : 31
    Par défaut
    A la limite tu peux aussi tenter de concaténer les cellules avant de transformer le fichier en format CSV, tu garderais alors des guillemets uniques, mais le code serait alors un petit peu plus long. Tu peux écrire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Cells(1,1) = Cells(1, 2) & ";" & Cells(1, 3)
    et ensuite supprimer les cellules

  4. #4
    Membre habitué
    Inscrit en
    Novembre 2009
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 9
    Par défaut
    Tout d'abord merci pour ces premiers élèments

    Comme je débute en VBA, je prends bonne note des modifications liées à la déclaration des variables, je pensais que je pouvais rassembler l'ensemble de mes variables par type en les séparants par un virgule.

    Maintenant, j'ai ajouté un point d'arret et dans mon fichier source (XLS) j'ai bien toutes les données de mes colonnes avec un seul guillemets. Par contre, lorsque je sors de ma boucle de conversion et execute l'instruction

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     Classeur.SaveAs Filename:="C:\Peupl.csv", FileFormat:=xlCSV, CreateBackup:=False, Local:=True
     
        Workbooks("Peupl.csv").Close savechanges:=True
    qui permet d'obtenir mon fichier CSV là j'obtiens mes doubles guillemets pour les données des la deuxième colonne. Sachant, que j'ai testé aussi le cas où je supprime mes boucles qui me permet d'ajouter ces fameux guillemets et là l'instruction indiquée ci-dessus me sépare bien les données d'une virgule mes je n'ai pas de guillemets.

    Or j'ai besoin de convertir ce fichier XLS en CSV avec guillemets et virgule afin que les données puissent être intégrées par une application d'intégration de peuplement de masse selon ce format

  5. #5
    Membre averti
    Inscrit en
    Septembre 2009
    Messages
    31
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations forums :
    Inscription : Septembre 2009
    Messages : 31
    Par défaut
    Essai ça:

    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
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    Sub Export_CSV()
    Dim Classeur, Classeur2 As Workbook
    Dim NbCl, NbLg, FnCl  As Integer
    Dim ValCel, Guillemets As String
     
     
        Set Classeur = ActiveWorkbook
     
        NbLg = 1
        FnCl = 3    ' 206
        Guillemets = """"
     
         'Selection de la Feuille Tableau
         Classeur.Sheets("TABLEAU").Select
     
        'Boucle de test de ligne
        Do
         'Boucle de accès aux cellules (colonnes)
     
         For NbCl = 1 To FnCl Step 1
     
     
            ValCel = Cells(NbLg, NbCl)
     
            If ValCel <> "" Then
              Cells(NbLg, NbCl) = Guillemets & ValCel & Guillemets
            End If
     
         Next NbCl
     
        'Remise à 1 du compteur de colonne
         NbCl = 1
        'Avance d'un pas compteur de ligne
         NbLg = NbLg + 1
     
         If Cells(NbLg, NbCl) = "" Then
                MsgBox " Le nombre de vos lignes converties sont :" & NbLg
         End If
     
     
        Loop Until IsEmpty(Cells(NbLg, NbCl))
            NbLg = 1
         Do
     
            For NbCl = 2 To FnCl Step 1
                Cells(NbLg, 1) = Cells(NbLg, 1) & ";" & Cells(NbLg, NbCl)
            Next NbCl
        NbCl = 1
         NbLg = NbLg + 1
        Loop Until IsEmpty(Cells(NbLg, NbCl))
           NbLg = 1
         NbLg = 1
         Do
     
            For NbCl = 2 To FnCl Step 1
                Cells(NbLg, NbCl) = ""
            Next NbCl
        NbCl = 1
         NbLg = NbLg + 1
        Loop Until IsEmpty(Cells(NbLg, NbCl))
         Classeur.SaveAs Filename:="C:\Peupl.csv", FileFormat:=xlCSV, CreateBackup:=False, Local:=True
     
        Workbooks("Peupl.csv").Close savechanges:=True
     
    End Sub

Discussions similaires

  1. Problème de boucles imbriquées
    Par Gnux dans le forum Algorithmes et structures de données
    Réponses: 9
    Dernier message: 09/12/2005, 20h26
  2. [Tableaux] Problème avec boucle
    Par MYster dans le forum Langage
    Réponses: 6
    Dernier message: 11/11/2005, 18h39
  3. Problème de boucle
    Par TheUltimaSephiroth dans le forum C
    Réponses: 8
    Dernier message: 10/10/2005, 13h58
  4. Problème de boucle
    Par Louis-Guillaume Morand dans le forum Langage SQL
    Réponses: 3
    Dernier message: 25/09/2005, 09h10
  5. Problème de boucle
    Par basclln dans le forum C++
    Réponses: 19
    Dernier message: 02/04/2005, 09h13

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