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 16/12/2011, 16h19   #1
Membre actif
 
Homme
Étudiant
Inscription : août 2011
Messages : 128
Détails du profil
Informations personnelles :
Sexe : Homme

Informations professionnelles :
Activité : Étudiant
Secteur : Finance

Informations forums :
Inscription : août 2011
Messages : 128
Points : 184
Points : 184
Par défaut Insersions de nouvelles colonnes sur un Fichier texte

Bonjour Forum,

J'ai un fichier texte qui fait 29 colonnes, je voudrais insérer les 4 nouvelles colonnes se trouvant sur ma feuille Excel et contenant 361 lignes à partir de ma 18 ieme colonne.

Mon Fichier texte est numéroté par la deuxième colonne intitulée "period" qui va de 0 à 360 pour reprendre encore de 0 à 360 jusqu'a la fin du fichier qui peut faire facilement 1000000 lignes.

Je joint à ce post un exemple

Merci d'avance
erlerwade est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/12/2011, 16h52   #2
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
Il y a 2 solutions pour le faire

Tout d’abord on créer un fichier txt avec les nouvelles valeurs

1er solution :
On lit le fichier en le décomposant avec la méthode
Et à la 28ème on intercale les valeurs
Code :
Split(Lecture, ";")(27)
Et on réécrit la ligne dans un fichier temporaire

Une fois terminé on détruit le fichier d’origine et on renomme le fichier temporaire

2ème on requête en bloque on lit les enregistrements
On reconstruit la ligne et après le 28ème champs
Code :
Requete.Fields(27).Value
on intercale les nouvelles valeurs

Et on réécrit la ligne dans un fichier temporaire

Une fois terminé on détruit le fichier d’origine et on renomme le fichier temporaire

Je te regarde cela ce week end, si je peux

A+
__________________
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 30
Vieux 16/12/2011, 17h07   #3
Membre actif
 
Homme
Étudiant
Inscription : août 2011
Messages : 128
Détails du profil
Informations personnelles :
Sexe : Homme

Informations professionnelles :
Activité : Étudiant
Secteur : Finance

Informations forums :
Inscription : août 2011
Messages : 128
Points : 184
Points : 184
D'accord Monsieur JP, Moi de mon côté, même si je suis pessimiste je vais essayer le weekend de m'y mettre, pour voir si je vais arriver à réussir la deuxième méthode que tu as proposé
je te joint tout de même une 20 ligne du fichier texte
Bon weekend end JP
et merci !!!!!!!!!!!!!!!!!!!!!!
Fichiers attachés
Type de fichier : txt onthly.txt (15,1 Ko, 3 affichages)
erlerwade est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 17/12/2011, 12h16   #4
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
Je suis parti sur la 1er solution ce sera la plus rapide (lecture du fichier)
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
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
66
67
68
 
Option Explicit
Option Base 1
Sub MonTest()
                                Dim Appli                   As Object
                                Dim Creation                As Object
 
                                Dim Chemin                  As String
                                Dim NomFichier              As String
 
                                Dim CompA                   As Integer
                                Dim CompB                   As Integer
 
                                Dim ind                     As Integer
                                Dim Lecture                 As String
                                Dim LectureTemp             As String
 
    Dim TableauSpread(362) As String ' 361 + 1 pour la ligne entête
    With Sheets("Spread") ' je considère les valeurs sur les colonnes A,B,C,D
        For CompA = 1 To 362 ' on stock les nouvelles valeurs dans un tableau sous forme de ligne
            For CompB = 1 To 4
                Lecture = Lecture & ";" & .Cells(CompA, CompB)
            Next CompB
            Lecture = Mid(Lecture, 2) ' Enleve le ; mis par défaut au début de Lecture
            TableauSpread(CompA) = Lecture
            Lecture = ""
        Next CompA
    End With
' Les chemins (Faire attention)..........................
' ceux là ce sont les miens..............
    Chemin = "E:\"
    NomFichier = "Base.txt"
 
    Set Appli = CreateObject("Scripting.FileSystemObject")
 
    Set Creation = Appli.CreateTextFile(Chemin & "TempB.txt", True) ' On créer TempB
    Open Chemin & NomFichier For Input As #1 ' On ouvre notre fichier
        Do While Not EOF(1) ' On lit notre fichier
            Input #1, Lecture ' on lit la ligne
                ind = ind + 1 ' on incrémente
 
                For CompA = 0 To 17 ' on réécrit la premiere Partie
                    LectureTemp = LectureTemp & ";" & Split(Lecture, ";")(CompA)
                Next CompA
 
                LectureTemp = LectureTemp & ";" & TableauSpread(ind) ' on intercale
 
                For CompA = 18 To 28
                    LectureTemp = LectureTemp & ";" & Split(Lecture, ";")(CompA) ' on réécrit la dernière Partie
                Next CompA
 
                LectureTemp = Mid(LectureTemp, 2) ' Enleve le ; mis par défaut au début de LectureTemp
                Creation.Write LectureTemp & vbCrLf ' on écrit la ligne dans TempB
 
                If ind = 362 Then ind = 1  'on remet le compteur à 1 (ne pas reprendre la ligne d'entête) pour la première lecture
 
                LectureTemp = "" 'on efface la valeur LectureTemp
        Loop ' et on recommence
    Close #1 ' On ferme notre fichier
 
' On ferme et on déinstancie
    Creation.Close
    Set Creation = Nothing
 
' ceux là ce sont les miens..............
    Kill Chemin & "Base.txt" ' On supprime le fichier de base
    Name Chemin & "TempB.txt" As Chemin & "Base.txt" ' on renomme le fichier Temporaire
End Sub
J’ai testé

Tu dis
__________________
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 30
Vieux 19/12/2011, 11h01   #5
Membre actif
 
Homme
Étudiant
Inscription : août 2011
Messages : 128
Détails du profil
Informations personnelles :
Sexe : Homme

Informations professionnelles :
Activité : Étudiant
Secteur : Finance

Informations forums :
Inscription : août 2011
Messages : 128
Points : 184
Points : 184
Bonjour JP,
Lorsque j’exécute le code ce message d'erreur s'affiche au niveau de cette ligne de code:
Code :
LectureTemp = LectureTemp & ";" & Split(Lecture, ";")(CompA)
"
erreur d’exécution '9'
L'indice n'appartient pas à la sélection.
"
Par ailleurs un autre problème Les colonnes à integrées ne se suivent pas et ne se situent pas aux colonnes A,B ,C et D .Mais aux colonnes B, D , F et H du cou j'ai pensé à mettre
Cordialement,
erlerwade est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/12/2011, 11h47   #6
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

Citation:
Lorsque j’exécute le code ce message d'erreur s'affiche au niveau de cette ligne de code:
LectureTemp = LectureTemp & ";" & Split(Lecture, ";")(CompA)
Dans quelle boucle, quelle est la valeur de CompA, Lecture à bien des ;
Passe ta souris sur les noms des variables tu auras l'indication

Tu dis

A+
__________________
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 30
Vieux 19/12/2011, 11h59   #7
Membre actif
 
Homme
Étudiant
Inscription : août 2011
Messages : 128
Détails du profil
Informations personnelles :
Sexe : Homme

Informations professionnelles :
Activité : Étudiant
Secteur : Finance

Informations forums :
Inscription : août 2011
Messages : 128
Points : 184
Points : 184
Oui Lecture a bien des ;
CompA= 1
erlerwade est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/12/2011, 12h38   #8
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
Il prend 0 et pas 1 ???

Dis moi ce que donne

Code :
1
2
3
4
For CompA = 0 To 17 ' on réécrit la premiere Partie
Msgbox Split(Lecture, ";")(CompA)
                    LectureTemp = LectureTemp & ";" & Split(Lecture, ";")(CompA)
Next CompA
tu dis
__________________
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 30
Vieux 19/12/2011, 12h46   #9
Membre actif
 
Homme
Étudiant
Inscription : août 2011
Messages : 128
Détails du profil
Informations personnelles :
Sexe : Homme

Informations professionnelles :
Activité : Étudiant
Secteur : Finance

Informations forums :
Inscription : août 2011
Messages : 128
Points : 184
Points : 184
Lorsque j'excute le code sa m'affiche en message:
"iteration"
erlerwade est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 19/12/2011, 12h57   #10
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
Et avec CompA = 1 il ne te prend pas period ?????????

ça je ne comprends pas

Ouvre tu fichier Txt et donne la première ligne
__________________
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 30
Vieux 19/12/2011, 14h32   #11
Membre actif
 
Homme
Étudiant
Inscription : août 2011
Messages : 128
Détails du profil
Informations personnelles :
Sexe : Homme

Informations professionnelles :
Activité : Étudiant
Secteur : Finance

Informations forums :
Inscription : août 2011
Messages : 128
Points : 184
Points : 184
Mille excuse JP .
Le problème venait des noms de mes colonnes . C'est rectifié et sa marche !
Mais les colonnes que je veux insérer ne se trouve pas successivement dans les colonnes Excel A,B,C et D mais plutôt dans les colonnes B,D,F et H.
En réalité je voudrai faire deux macro une pour insérer juste les colonnes B,D, F, et H et une autre qui inserre les colonnes B,C,D,E,F et I successivement.
l'idéal serait que je fasse une seule macro qui propose une option soit pour la première insertion de colonne soit pour la seconde insertion.
Merciiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii!!!!!
erlerwade est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 19/12/2011, 14h54   #12
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
Sans aller très loin: avec un Msgbox

Si Oui : Choix 1 (colonnes B,D,F et H)
si Non : Choix 2 (colonnes B,C,D,E,F et I successivement)


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
31
32
    Dim TableauSpread(362) As String ' 361 + 1 pour la ligne entête
 
                                Dim Reponse                As Boolean
                                Dim Choix                   As Byte
 
    Reponse = MsgBox("Choix 1 ?", vbYesNo + vbQuestion, "Choix 1(BDFH)-Choix 2(BCDEF+I)")
    If Reponse = vbYes Then    ' L'utilisateur a choisi Oui.
        Choix = 1
    Else    ' L'utilisateur a choisi Non.
        Choix = 2
    End If
 
    With Sheets("Spread") ' je considère les valeurs sur les colonnes A,B,C,D
        For CompA = 1 To 362 ' on stock les nouvelles valeurs dans un tableau sous forme de ligne
 
           Select Case Choix
            Case 1
                 For CompB = 2 To 8 Step 2
                     Lecture = Lecture & ";" & .Cells(CompA, CompB)
                 Next CompB
             Case 2
                 For CompB = 2 To 6
                     Lecture = Lecture & ";" & .Cells(CompA, CompB)
                 Next CompB
                 Lecture = Lecture & ";" & .Cells(CompA, 9)
            End Select
 
            Lecture = Mid(Lecture, 2) ' Enleve le ; mis par défaut au début de Lecture
            TableauSpread(CompA) = Lecture
            Lecture = ""
        Next CompA
    End With
Tu dis

une autre solution avec un InputBox


Code :
1
2
3
4
5
6
7
8
                Dim Message                 As String
                Dim Choix                   As Byte
 
Message = "Entrez votre Choix" & Chr$(10) & _
        " Coix 1 colonnes B,D,F et H" & Chr$(10) & _
        " Coix 2 colonnes B,C,D,E,F et I"
 
Choix = InputBox(Message, "", "1")
__________________
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 30
Vieux 19/12/2011, 15h23   #13
Membre actif
 
Homme
Étudiant
Inscription : août 2011
Messages : 128
Détails du profil
Informations personnelles :
Sexe : Homme

Informations professionnelles :
Activité : Étudiant
Secteur : Finance

Informations forums :
Inscription : août 2011
Messages : 128
Points : 184
Points : 184
Autant pour moi
je voulais dire les colonnes B,C, D, E,F,G ,H et I .
erlerwade est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 19/12/2011, 15h38   #14
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
et bien


Code :
1
2
3
4
             Case 2
                 For CompB = 2 To 9
                     Lecture = Lecture & ";" & .Cells(CompA, CompB)
                 Next CompB
Tu dis
__________________
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 30
Vieux 19/12/2011, 16h12   #15
Membre actif
 
Homme
Étudiant
Inscription : août 2011
Messages : 128
Détails du profil
Informations personnelles :
Sexe : Homme

Informations professionnelles :
Activité : Étudiant
Secteur : Finance

Informations forums :
Inscription : août 2011
Messages : 128
Points : 184
Points : 184
Merci énormément Jean-Pierre.
Sur les astuces et la manière de s'y prendre concernant les fichiers textes grâce à VBA . Cette discussion est une référence pour quiconque voudra manipuler des fichiers texte .
encore une fois merci JP.
erlerwade est déconnecté   Envoyer un message privé Réponse avec citation 01
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 01h52.


 
 
 
 
Partenaires

Hébergement Web