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 :

Mon programme insert des colonnes (ne devrait pas) [XL-2013]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Homme Profil pro
    Automaticien
    Inscrit en
    Novembre 2020
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : Suisse

    Informations professionnelles :
    Activité : Automaticien
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2020
    Messages : 4
    Par défaut Mon programme insert des colonnes (ne devrait pas)
    Salut ! Je débute un peu en VBA et je suis un peu bloqué...
    C'est aussi la première fois que je parle sur un forum et je ne connais pas encore tout.

    J'ai un problème avec une maco en VBA que j'ai créée.
    Le but de ma macro est:
    1. Importer des données via un fichier .txt et les inscrire dans les 3 premières colonnes de ma feuille 1
    2. Répartir ces données dans un tableau de ma Feuille 2
    3. Créer un fichier .csv en y ajoutant les valeurs des cellules qui sont sélectionnées dans la feuille 2

    En résumé, mon programme convertit des variables pour les importer dans un logiciel.
    Le problème est que la première partie ne fonctionne pas correctement...
    On va bien chercher les données dans le fichier .txt mais, avant de les mettres dans les cellules, des colonnes se rajoutent ce qui déplace toutes mes cases vers la droite.
    Si j'active plusieurs fois ma macro, ça continue. Les données viennent dans mes cellules, des colonnes se rajoutent et les données s'inscrivent dans ces cellules. Ce qui fait que à chaque fois, tout se déplace sur la droite.
    Je ne comprends pas pourquoi car ce que j'ai écrit n'est rien d'autre que ç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
    66
    67
    68
    69
    70
    71
    72
    73
    Sub ExportationFichierCSV()
     
    '==============================================
    ' 1. Importation des variables via le fichier .txt
    '==============================================
        Dim Fichier As String
     
        'chemin à adapter
        Fichier = "C:\progtemp\Variables-IDE\variablesexportées.txt"
     
        'crée une requête sur le fichier texte et insère les champs
        'dans la feuille "Feuil1" en partant de "A8"
        Worksheets("Feuil1").QueryTables.Add("TEXT;" & Fichier, Feuil1.[A8]).Refresh
     
    '===========================================
    ' 2. Répartission des variables dans le tableau
    '===========================================
        Dim i As Integer
     
        For i = 8 To 200
        Feuil2.Cells(i + 6, 1) = Feuil1.Cells(i, 1).Value
        Feuil2.Cells(i + 6, 3) = Feuil1.Cells(i, 2).Value
        Feuil2.Cells(i + 6, 4) = Feuil1.Cells(i, 3).Value
        Next
     
    '=========================
    ' 3. Création du fichier .csv
    '=========================
        Dim FD As FileDialog
        Dim strChaine As String
     
        Dim Plage As Range
     
        Dim Ligne As Long
        Dim Colonne As Integer
     
        Dim Folder As String
        Dim FileName As String
        Dim FolderExists As String
     
        'Contrôle si le répertoire de destination existe
        Folder = "C:\progtemp\Variables-IDE\"
        FolderExists = Dir(Folder, vbDirectory)
        If FolderExists = "" Then
          MsgBox "Le répertoire de destination n'existe pas"
          Exit Sub
        End If
        FileName = Folder + Range("A12").Text + "_Variables.csv"
     
        'Plage a transformer en text
        Set Plage = Selection
     
        'Ouverture du fichier de sortie
        Open FileName For Output As #1
     
        'Boucle sur la plage et ajoute les lignes au fichier
        For Ligne = 1 To Plage.Rows.Count
            For Colonne = 1 To Plage.Columns.Count
                If strChaine <> "" Then strChaine = strChaine & ";"
                strChaine = strChaine & Plage.Cells(Ligne, Colonne).Value
            Next Colonne
            Print #1, strChaine
            strChaine = ""
        Next Ligne
     
        'Fermeture du fichier
        Close #1
     
        'Affichage du chemin
        MsgBox "Fichier : " & FileName & " disponible"
     
     
    End Sub
    Merci beaucoup d'avance pour votre aide

  2. #2
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par BubuAuto Voir le message
    Bonjour,

    Il vous faut sans doute effacer les données de Feuil1 avant d'importer.
    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
     
    Sub ExportationFichierCSV()
     
    Dim Fichier As String
    Dim ShImport As Worksheet, ShMaj As Worksheet
    Dim I As Integer
     
        '==============================================
        ' 1. Importation des variables via le fichier .txt
        '==============================================
     
        'chemin à adapter
        Fichier = "C:\progtemp\Variables-IDE\variablesexportées.txt"
        Set ShImport = Sheets("Feuil1")
        Set ShMaj = Sheets("Feuil2")
     
        'crée une requête sur le fichier texte et insère les champs
        'dans la feuille "Feuil1" en partant de "A8"
        With ShImport
             .UsedRange.Clear
             .QueryTables.Add("TEXT;" & Fichier, ShImport.[A8]).Refresh
        End With
     
        '===========================================
        ' 2. Répartission des variables dans le tableau
        '===========================================
     
        With ShImport
            For I = 8 To 200
                ShMaj.Cells(I + 6, 1) = .Cells(I, 1).Value
                ShMaj.Cells(I + 6, 3) = .Cells(I, 2).Value
                ShMaj.Cells(I + 6, 4) = .Cells(I, 3).Value
            Next
     
        End With
     
        ' Suite du programme
        '....
     
     
        Set ShImport = Nothing
        Set ShMaj = Nothing
     
     End Sub

  3. #3
    Membre à l'essai
    Homme Profil pro
    Automaticien
    Inscrit en
    Novembre 2020
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : Suisse

    Informations professionnelles :
    Activité : Automaticien
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2020
    Messages : 4
    Par défaut
    Salut !

    Déjà merci beaucoup pour l'aide j'ai pu avancer un peu et ça m'a énormément aidé.
    Désolé mais je ne suis pas un maître dans l'art du VBA, je commence à l'apprendre de moi-même.
    J'ai essayé d'adapter mon programme mais maintenant ça me rajoute de nouveau des cellules mais seulement une alors qu'avant c'était trois.
    peut-être que vous comprendrez mieux la situation avec mon fichier excel ainsi que mon fichier d'importation .txt

    Les voici:
    InterfaceAPISupervision_1_0.xlsm
    variablesexportées.txt


    Sinon voici mon programme VBA:
    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
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
     
    Option Explicit
     
    Sub ExportationFichierCSV()
     
    '=================================================
    ' 1. Importation des variables via le fichier .txt
    '=================================================
     
        'Déclaration des variables
        Dim Fichier As String
        Dim j As Integer, k As Integer
     
        'Efface les cellules où seront importées les variables
        For j = 2 To 201
            For k = 1 To 3
            Feuil1.Cells(j, k).Clear
            Next
        Next
        'chemin du fichier d'importation
        Fichier = "C:\progtemp\Variables-IDE\variablesexportées.txt"
     
        'Efface les cellules où seront importées les variables
        'crée une requête sur le fichier texte et insère les champs
        'dans la feuille "Feuil1" en partant de "A2"
     
             Sheets("Feuil1").QueryTables.Add("TEXT;" & Fichier, Feuil1.[A2]).Refresh
     
     
    '==============================================
    ' 2. Répartission des variables dans le tableau
    '==============================================
     
        'Déclaration des variables
        Dim i As Integer
     
        'Inscrit les variables, adresses et types dans le tableau
     
            For i = 8 To 200
                Feuil2.Cells(i + 6, 1) = Feuil1.Cells(i, 1).Value
                Feuil2.Cells(i + 6, 3) = Feuil1.Cells(i, 2).Value
                Feuil2.Cells(i + 6, 4) = Feuil2.Cells(i, 3).Value
            Next
     
     
    '============================
    ' 3. Création du fichier .csv
    '============================
     
        'Déclaration des variables
        Dim FD As FileDialog
        Dim strChaine As String
     
        Dim Plage As Range
     
        Dim Ligne As Long
        Dim Colonne As Integer
     
        Dim Folder As String
        Dim FileName As String
        Dim FolderExists As String
     
        'Contrôle si le répertoire de destination existe
        Folder = "C:\progtemp\Variables-IDE\"
        FolderExists = Dir(Folder, vbDirectory)
        If FolderExists = "" Then
          MsgBox "Le répertoire de destination n'existe pas"
          Exit Sub
        End If
        FileName = Folder + Range("A12").Text + "_Variables.csv"
     
        'Plage a transformer en text
        Set Plage = Range(15, 14)
     
        'Ouverture du fichier de sortie
        Open FileName For Output As #1
     
        'Boucle sur la plage et ajoute les lignes au fichier
        For Ligne = 1 To Plage.Rows.Count
            For Colonne = 1 To Plage.Columns.Count
                If strChaine <> "" Then strChaine = strChaine & ";"
                strChaine = strChaine & Plage.Cells(Ligne, Colonne).Value
            Next Colonne
            Print #1, strChaine
            strChaine = ""
        Next Ligne
     
        'Fermeture du fichier
        Close #1
     
        'Affichage du chemin
        MsgBox "Fichier : " & FileName & " disponible"
        MsgBox "Le fichier est prêt et opérationnel"
     
    End Sub

  4. #4
    Membre à l'essai
    Homme Profil pro
    Automaticien
    Inscrit en
    Novembre 2020
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : Suisse

    Informations professionnelles :
    Activité : Automaticien
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2020
    Messages : 4
    Par défaut
    C'est tout bon !
    Un informaticien a pu me donner un coup de main.

    Voici le programme final:

    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
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
     
    Option Explicit
     
    Sub ExportationFichierCSV()
     
    '=================================================
    ' 1. Importation des variables via le fichier .txt
    '=================================================
     
        'Déclaration des variables
        Dim Fichier As String
        Dim j As Integer, k As Integer
     
        'Efface les cellules où seront importées les variables
        Sheets("Feuil1").Range("A2", "E500").Clear
     
        'chemin du fichier d'importation
        Fichier = "C:\progtemp\Variables-IDE\variablesexportées.txt"
     
        'crée une requête sur le fichier texte et insère les champs
        'dans la feuille "Feuil1" en partant de "A2"
     
        Sheets("Feuil1").QueryTables.Add("TEXT;" & Fichier, Feuil1.[A2]).Refresh
     
        'Efface les cellules de description
        Sheets("Feuil1").Range("D2", "D500").Clear
     
        'copie la colonne des valeurs parametrees dans la colonne de description
        Sheets("Feuil1").Range("D2", "D500").Value = Sheets("Feuil1").Range("E2", "E500").Value
        Sheets("Feuil1").Range("E2", "E500").Clear
     
        Feuil1.Range("D2", "D500").Select
        Selection.Replace What:="-", Replacement:="", LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
     
    '==============================================
    ' 2. Répartission des variables dans le tableau
    '==============================================
     
        'Déclaration des variables
        Dim i As Integer
     
        'Inscrit les variables, adresses et types dans le tableau
     
            For i = 8 To 200
                Feuil2.Cells(i + 6, 1) = Feuil1.Cells(i, 1).Value
                Feuil2.Cells(i + 6, 3) = Feuil1.Cells(i, 2).Value
                Feuil2.Cells(i + 6, 4) = Feuil1.Cells(i, 3).Value
                Feuil2.Cells(i + 6, 5) = Feuil1.Cells(i, 4).Value
            Next
     
     
    '============================
    ' 3. Création du fichier .csv
    '============================
     
        'Déclaration des variables
        Dim FD As FileDialog
        Dim strChaine As String
     
        Dim Plage As Range
     
        Dim Ligne As Long
        Dim Colonne As Integer
     
        Dim Folder As String
        Dim FileName As String
        Dim FolderExists As String
     
        Dim v As Variant
     
        'Contrôle si le répertoire de destination existe
        Folder = "C:\progtemp\Variables-IDE\"
        FolderExists = Dir(Folder, vbDirectory)
        If FolderExists = "" Then
          MsgBox "Le répertoire de destination n'existe pas"
          Exit Sub
        End If
        FileName = Folder + Range("A12").Text + "_Variables.csv"
     
        'Plage a transformer en text
        Set Plage = Range("p14:p112")
     
        'Ouverture du fichier de sortie
        Open FileName For Output As #1
     
        'Boucle sur la plage et ajoute les lignes au fichier
        For Ligne = 14 To Plage.Rows.Count
            For Colonne = 1 To Plage.Columns.Count
                If strChaine <> "" Then strChaine = strChaine & ";"
                ' v = Cells(21, 15).Value
                strChaine = strChaine & Plage.Cells(Ligne, Colonne).Value
            Next Colonne
            Print #1, strChaine
            strChaine = ""
        Next Ligne
     
        'Fermeture du fichier
        Close #1
     
        'Affichage du chemin
        MsgBox "Fichier : " & FileName & " disponible"
        MsgBox "Le fichier est prêt et opérationnel"
     
    End Sub
    Merci beaucoup pour votre aide.

  5. #5
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par BubuAuto Voir le message
    Il faut supprimer les connections existantes. Je n'ai pas compris à quoi correspondait votre plage. Dans le code, j'ai pris tout le tableau.
    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
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
     
    Sub ExportationFichierCSV()
     
    '=================================================
    ' 1. Importation des variables via le fichier .txt
    '=================================================
     
        'Déclaration des variables
        Dim WbInterface As Workbook
        Dim ShImport As Worksheet, ShInterface As Worksheet
     
        Dim I As Integer, J As Integer, K As Integer, Colonne As Integer
        Dim Ligne As Long, DerniereLigne As Long
     
        Dim Fichier As String, strChaine As String
        Dim Folder As String, FileName As String, FolderExists As String
     
        Dim Plage As Range
     
        'Contrôle si le répertoire de destination existe
        Folder = "C:\progtemp\Variables-IDE\"
        FolderExists = Dir(Folder, vbDirectory)
        If FolderExists = "" Then
           MsgBox "Le répertoire de destination n'existe pas"
           Exit Sub
        End If
     
     
        Set WbInterface = ActiveWorkbook
        With WbInterface
     
             Set ShImport = Sheets("Feuil1")
             Set ShInterface = Sheets("InterfaceSup")
     
             If .Connections.Count > 0 Then
                For I = .Connections.Count To 1 Step -1
                     .Connections(I).Delete
                Next I
             End If
     
        End With
     
        'Efface les cellules où seront importées les variables
        ShImport.UsedRange.Clear
        'chemin du fichier d'importation
        Fichier = "C:\progtemp\Variables-IDE\variablesexportées.txt"
     
        'Efface les cellules où seront importées les variables
        'crée une requête sur le fichier texte et insère les champs
        'dans la feuille "Feuil1" en partant de "A2"
     
         ShImport.QueryTables.Add("TEXT;" & Fichier, ShImport.[A2]).Refresh
     
     
    '==============================================
    ' 2. Répartission des variables dans le tableau
    '==============================================
     
        'Déclaration des variables
     
        'Inscrit les variables, adresses et types dans le tableau
     
         With ShInterface
     
            For I = 8 To .UsedRange.SpecialCells(xlCellTypeLastCell).Row
                     .Cells(I + 6, 1) = ShImport.Cells(I, 1).Value
                     .Cells(I + 6, 3) = ShImport.Cells(I, 2).Value
                     .Cells(I + 6, 4) = ShImport.Cells(I, 3).Value
            Next
     
        End With
     
     
    '============================
    ' 3. Création du fichier .csv
    '============================
     
     
        With ShInterface
     
              DerniereLigne = .UsedRange.SpecialCells(xlCellTypeLastCell).Row
              FileName = Folder + .Range("A12").Text + "_Variables.csv"
     
               'Plage a transformer en text
               Set Plage = .Range(.Cells(13, 1), .Cells(DerniereLigne, 14))
     
               'Ouverture du fichier de sortie
               Open FileName For Output As #1
     
               'Boucle sur la plage et ajoute les lignes au fichier
               For Ligne = 1 To Plage.Rows.Count
                   For Colonne = 1 To Plage.Columns.Count
                       If strChaine <> "" Then strChaine = strChaine & ";"
                       strChaine = strChaine & Plage.Cells(Ligne, Colonne).Value
                   Next Colonne
                   Print #1, strChaine
                   strChaine = ""
               Next Ligne
     
               'Fermeture du fichier
               Close #1
     
        End With
     
        'Affichage du chemin
        MsgBox "Fichier : " & FileName & " disponible"
        MsgBox "Le fichier est prêt et opérationnel"
     
     
        Set WbInterface = Nothing: Set ShImport = Nothing: Set ShInterface = Nothing
     
    End Sub

  6. #6
    Membre à l'essai
    Homme Profil pro
    Automaticien
    Inscrit en
    Novembre 2020
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : Suisse

    Informations professionnelles :
    Activité : Automaticien
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2020
    Messages : 4
    Par défaut
    Yes ! merci beaucoup pour votre aide c'est parfait !

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

Discussions similaires

  1. Bug Macro VBA, Selection=erreur 2036
    Par scorecard dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 16/03/2011, 11h21
  2. [VBA-E] Bug macro bouton commande
    Par allergique dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 14/08/2006, 23h00
  3. probleme de selection aleatoire sur excel avec macro vba
    Par guillaume sors dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 21/10/2005, 10h51
  4. Macro VBA sur Access
    Par beurnoir dans le forum Access
    Réponses: 3
    Dernier message: 12/10/2005, 16h46
  5. [SQL][MACRO VBA]Pb de syntaxe
    Par Stef.proxi dans le forum Langage SQL
    Réponses: 2
    Dernier message: 11/08/2004, 09h11

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