Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 12/10/2011, 11h04   #1
Invité de passage
 
Thibault
Inscription : mai 2010
Messages : 8
Détails du profil
Informations personnelles :
Nom : Thibault

Informations forums :
Inscription : mai 2010
Messages : 8
Points : 2
Points : 2
Par défaut Problèmes points virgules

Bonjour,

Je vous expose mon problème.

J'ai un classeur Excel composé de 2 feuilles.

La première contient des infos de personnes de la forme suivantes :

Nom | prenom | adresse | code postal

Ma deuxième feuille doit etre de la forme suivante (question de convention) :

Code :
1
2
3
01 | UneValeurfixe | Nom | etc
02 | UneValeurfixe | Prenom | UneValeurfixe | etc
03 | Adresse | UneValeurfixe | UneValeurfixe | etc
J'ai donc créé une macro et l'ai modifié un peu sous VB.

Le but final est de créer un fichier texte de la forme suivante :

Code :
1
2
3
01;laValeurFixe;Nom;
02;laValeurFixe;Prenom;laValeurFixe;
03;Adresse;laValeurFixe;laValeurFixe;
Mon programme fonctionne bien à l'exception qu'à chaque fin de ligne 01 et 03, il me rajoute une dizaine de ";" !

Voici à quoi ressemble mon code :

Code :
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
For k = 1 To 8 Step 1
 
Range("A" & i).Select
        ActiveCell.FormulaR1C1 = "08"
        Range("B" & i).Select
        ActiveCell.FormulaR1C1 = "0064"
        Sheets("Feuil1").Select
        Range("A" & j).Select
        Selection.Copy
        Sheets("Feuil2").Select
        Range("C" & i).Select
        ActiveSheet.Paste
        Range("D" & i).Select
        Application.CutCopyMode = False
        ActiveCell.FormulaR1C1 = "01012011"
        Range("E" & i).Select
        ActiveCell.FormulaR1C1 = "31129999"
        Sheets("Feuil1").Select
        Range("J" & j).Select
        Selection.Copy
        Sheets("Feuil2").Select
        Range("F" & i).Select
        ActiveSheet.Paste
 
        i = i + 1
next i
i correspond au numéro de la ligne.

Et voici ce que j'obtiens :

Code :
8;64;301302;1012011;31129999;VALEURFIXE;;;;;;
Et je ne sais pas comment apparaissent ces points virgules...


Si quelqu'un a une solution, j'en serais très ravi
Merci à vous.
Thiebs est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/10/2011, 14h07   #2
Membre habitué
 
Avatar de issoram
 
Homme Zeco
Développeur informatique
Inscription : janvier 2009
Messages : 219
Détails du profil
Informations personnelles :
Nom : Homme Zeco
Localisation : France, Saône et Loire (Bourgogne)

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : janvier 2009
Messages : 219
Points : 121
Points : 121
Envoyer un message via MSN à issoram
Bonjour,

Dans un premier temps harmonise tes variables qui te servent de compteur (il y' du i du j et du k....) Je ne pense pas que ça vienne de là pour les ; mais c'est une première étape:

Code :
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
For i = 1 To 8 Step 1
 
        Range("A" & i).Select
        ActiveCell.FormulaR1C1 = "08"
        Range("B" & i).Select
        ActiveCell.FormulaR1C1 = "0064"
        Sheets("Feuil1").Select
        Range("A" & i).Select
        Selection.Copy
        Sheets("Feuil2").Select
        Range("C" & i).Select
        ActiveSheet.Paste
        Range("D" & i).Select
        Application.CutCopyMode = False
        ActiveCell.FormulaR1C1 = "01012011"
        Range("E" & i).Select
        ActiveCell.FormulaR1C1 = "31129999"
        Sheets("Feuil1").Select
        Range("J" & i).Select
        Selection.Copy
        Sheets("Feuil2").Select
        Range("F" & i).Select
        ActiveSheet.Paste
 
        i = i + 1
next i
issoram est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/10/2011, 14h15   #3
Membre Expert
 
Avatar de Jean-Pierre49
 
Homme J-Pierre Catherine
Conception Calcul
Inscription : juillet 2007
Messages : 659
Détails du profil
Informations personnelles :
Nom : Homme J-Pierre Catherine
Âge : 57
Localisation : France, Maine et Loire (Pays de la Loire)

Informations professionnelles :
Activité : Conception Calcul
Secteur : Industrie

Informations forums :
Inscription : juillet 2007
Messages : 659
Points : 1 856
Points : 1 856
Bonjour,

Je suppose que tu enregistre en csv après avoir bouclé
Si ta page recevant les valeurs (celle qui va devenir csv) n’est pas propre du peut obtenir des ; superflus

Supprime la et relance ta macro

Toutefois si je peux me permettre le code si dessous conviendrait


Code :
1
2
3
4
5
6
7
8
9
    For k = 1 To 8
        Range("A" & i).Value = "08"
        Range("B" & i).Value = "0064"
        Range("C" & i).Value = Sheets("Feuil2").Range("A" & j).Value
        Range("D" & i).Value = "01012011"
        Range("E" & i).Value = "31129999"
        Range("F" & i).Select = Sheets("Feuil2").Range("J" & j).Select
        i = i + 1
    Next i
Maintenant pour enregistrer le csv en même temps que ta boucle, tu peux adapter le code ci dessous

Fait attention à la boucle qui renseigne ta variable j

Code :
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
                            Dim Appli                           As Object
                            Dim Chemin                          As String
 
                            Dim Creation                        As Object
                            Dim Enregistrement                  As String
 
 
Dim k
Dim j
 
    Chemin = "C:\.......\.......\" 'Chemin pour enregistrement de ton fichier
    Set Appli = CreateObject("Scripting.FileSystemObject")
 
    ' Création du fichier csv
    Set Creation = Appli.CreateTextFile(Chemin & "XXXXXXXXX.csv", True) ' XXXXXXXXX.csv = nom de ton fichier
    Creation.Write "AAA;BBB;CCC;DDD" & vbCrLf ' Entête de champs
 
    'Boucle sur les valeurs ( je suppose que j vient d'une autre boucle
    For k = 1 To 8
        Enregistrement = "08"
        Enregistrement = Enregistrement & ";0064"
        Enregistrement = Enregistrement & ";" & Sheets("Feuil2").Range("A" & j).Value
        Enregistrement = Enregistrement & ";01012011"
        Enregistrement = Enregistrement & ";31129999"
        Enregistrement = Enregistrement & ";" & Sheets("Feuil2").Range("J" & j).Select
        Creation.Write Enregistrement & vbCrLf ' enregistre dans le fichier csv
    Next i
 
    Creation.Close 'ferme le fichier csv
    Set Creation = Nothing
__________________
Jean-Pierre Pensez à Voter pour les réponses qui vous ont aidés, d'avance merci
---------Et n'oubliez pas de mettre : ..quand c'est le cas !---------
Jean-Pierre49 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/10/2011, 21h43   #4
Membre habitué
 
Avatar de issoram
 
Homme Zeco
Développeur informatique
Inscription : janvier 2009
Messages : 219
Détails du profil
Informations personnelles :
Nom : Homme Zeco
Localisation : France, Saône et Loire (Bourgogne)

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : janvier 2009
Messages : 219
Points : 121
Points : 121
Envoyer un message via MSN à issoram
En tous cas il y' a un problème de cohérence avec cette boucle :

Code :
1
2
3
4
For k = 1 To 8
  .......
  i = i + 1
Next i
issoram est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 13/10/2011, 08h31   #5
Membre Expert
 
Avatar de Jean-Pierre49
 
Homme J-Pierre Catherine
Conception Calcul
Inscription : juillet 2007
Messages : 659
Détails du profil
Informations personnelles :
Nom : Homme J-Pierre Catherine
Âge : 57
Localisation : France, Maine et Loire (Pays de la Loire)

Informations professionnelles :
Activité : Conception Calcul
Secteur : Industrie

Informations forums :
Inscription : juillet 2007
Messages : 659
Points : 1 856
Points : 1 856
Bonjour issoram

tu a tout a fait raison

Cordialement

bonne journée
__________________
Jean-Pierre Pensez à Voter pour les réponses qui vous ont aidés, d'avance merci
---------Et n'oubliez pas de mettre : ..quand c'est le cas !---------
Jean-Pierre49 est déconnecté   Envoyer un message privé Réponse avec citation 01
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 04h37.


 
 
 
 
Partenaires

Hébergement Web