Aide VBA

Bonjour, j'ai un petit problème avec ma macro. Elle m'importe un fichier TXT dans mon classeur Excel mais me crée une nouvelle feuille alors que je voudrais que les données soient importées dans une feuille qui existe déjà...
Que manque t-il dans mon code ?

Merci d'avance pour vos réponses

Bonne journée

voici le code :

Option Explicit
Dim MonFichier As Variant
Public Monclasseur As String
Dim Nblig As Long, i As Long, j As Long
Public Monchemin As String
Sub Importation()
'
' Importation Macro
'

'
Dim MonFichier As Variant

MonFichier = Application.GetOpenFilename("Text Files (*.txt), *.txt")
If MonFichier <> False Then

Range("A1").Select
Workbooks.OpenText Filename:= _
"C:\Documents and Settings\troncan1\Desktop\KPI.20100128.txt", Origin:= _
xlMSDOS, StartRow:=1, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote _
, ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=False, Comma:= _
False, Space:=False, Other:=False, FieldInfo:=Array(Array(1, 1), Array(2, 1) _
, Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1), Array(7, 1), Array(8, 1), Array(9, 1), _
Array(10, 1), Array(11, 1), Array(12, 1), Array(13, 1), Array(14, 1), Array(15, 1), Array( _
16, 1), Array(17, 1), Array(18, 1), Array(19, 1), Array(20, 1)), TrailingMinusNumbers _
:=True

Range("A1").Select

End If

End Sub

12 réponses

  • Votes
  • Date
  • Date décroissante
  1. Modérateur
    Salut,

    Voici un exemple

    Dans le fichier Excel j'ai
      A      B  
    1 NOM    PRENOM
    2 INTEL  Titi

    Et dans le fichiers base.txt j'ai

    PENTIUM;Toto
    AMD;Tata


    La macro qui va ajouter les lignes en dessous de celle déjé existante

    Sub insertion()
    
    nbligne = Range("A65536").End(xlUp).Row + 1
        With ActiveSheet.QueryTables.Add(Connection:= _
            "TEXT;C:\blabla.txt", Destination:=Range( _
            "A" & nbligne & ""))
            .Name = "base"
            .TextFileSemicolonDelimiter = True
            .Refresh
        End With
    End Sub

    1. Je comprends pas il ne veut pas il ouvre automatiquement dans la 1ere feuille de mon classeur sans faire de reconnaissance...
      1. Modérateur
        Salut,

        Ca dépends de séparateur de champs que tu as dans ton fichier texte.

        Tabulation
                .TextFileTabDelimiter = True
        Point-virgule
                .TextFileSemicolonDelimiter = True
        Virgule
                .TextFileCommaDelimiter = True
        Espace
                .TextFileSpaceDelimiter = True
        Autre caractère
                .TextFileOtherDelimiter = ":"
        1. En fait je souhaite ouvrir mon fichier dans 2 feuilles excel en même temps dans SIGMA et EXTRACTION SIGMA.

          Avec le code présent ça ouvre dans ma 1ere feuille de classeur et non pas dans 1 choisie.

          Que faut il faire pour choisir une feuille précise mais aussi pour que ça s'ouvre dans les deux ?
          1. Modérateur
            Re,

            Pour choisir une feuille (par exemple la 3ème)
            Sub insertion_indexfeuille()
            With Sheets(3)
                nbligne = .Range("A65536").End(xlUp).Row + 1
                    With .QueryTables.Add(Connection:= _
                        "TEXT;\\f-renoutet-md\home4$\p049784\MyDocs\blabla.txt", Destination:=.Range( _
                        "A" & nbligne & ""))
                        .Name = "base"
                        .TextFileSemicolonDelimiter = True
                        .Refresh
                End With
            End With
            End Sub

            ou par nom de la feuille
            Sub insertion_nomfeuille()
            With Sheets("bb")
                nbligne = .Range("A65536").End(xlUp).Row + 1
                    With .QueryTables.Add(Connection:= _
                        "TEXT;c:\blabla.txt", Destination:=.Range( _
                        "A" & nbligne & ""))
                        .Name = "base"
                        .TextFileSemicolonDelimiter = True
                        .Refresh
                End With
            End With
            End Sub

            1. Voilà mon code.

              ça me met " La page de destination n'est pas dans la même feuille de calcul que celle dans laquelle la table de requête a été créée" et ça me souligne ce qui est en gras quand je mets débogage.

              Sub KPI()

              djnwemp = Cells(4, 3).Value

              Workbooks.OpenText Filename:="C:\Documents and Settings\troncan1\Desktop\KPI." & djnwemp & ".XLS", _
              Origin:=xlMSDOS, StartRow:=1, DataType:=xlDelimited, TextQualifier:= _
              xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=False, _
              Comma:=False, Space:=False, Other:=False, FieldInfo:=Array(Array(1, 1), _
              Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1), Array(7, 1), Array(8, 1)), _
              TrailingMinusNumbers:=True

              With Sheets("SIGMA")
              nbligne = .Range("A65536").End(xlUp).Row
              With .QueryTables.Add(Connection:= _
              "TEXT;C:\Documents and Settings\troncan1\Desktop\KPI." & djnwemp & ".TXT", Destination:=Range( _
              "A" & nbligne & ""))
              .Name = "base"
              .TextFileSemicolonDelimiter = True
              .Refresh
              End With
              End With
              1. Modérateur
                Re,

                Déjà tu commence par enlèver ça
                Workbooks.OpenText Filename:="C:\Documents and Settings\troncan1\Desktop\KPI." & djnwemp & ".XLS", _
                Origin:=xlMSDOS, StartRow:=1, DataType:=xlDelimited, TextQualifier:= _
                xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=False, _
                Comma:=False, Space:=False, Other:=False, FieldInfo:=Array(Array(1, 1), _
                Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1), Array(7, 1), Array(8, 1)), _
                TrailingMinusNumbers:=True


                Ensuite mets le nom de la feuille d'où tu récupères ça
                djnwemp = Cells(4, 3).Value
                1. Ok j'ai 4 feuilles dans l'ordre:

                  Présentation ou il y a mon bouton et mon djnwemp
                  Extraction SIGMA ou je veux que mon txt s'ouvre
                  SIGMA ou je veux que mon txt s'ouvre aussi
                  KPI ou je fais mes calculs

                  Voici mon code pour le moment.

                  J'ai la même erreur qu'au dessus.

                  Sub KPI()
                  '
                  ' MacroKPI Macro
                  ' Macro enregistrée le 27/01/2010 par Tronc
                  '

                  djnwemp = Cells(4, 3).Value

                  With Sheets("SIGMA")
                  nbligne = .Range("A65536").End(xlUp).Row
                  With .QueryTables.Add(Connection:= _
                  "TEXT;C:\Documents and Settings\troncan1\Desktop\KPI." & djnwemp & ".TXT", Destination:=Range( _
                  "A" & nbligne & ""))
                  .Name = "base"
                  .TextFileSemicolonDelimiter = True
                  .Refresh
                  End With
                  End With

                  derlig = Sheets(2).Range("A65536").End(xlUp).Row

                  Range("KPI!F6").Formula = "=SUMPRODUCT(('Extraction SIGMA'!L2:L" & derlig & "-'Extraction SIGMA'!O2:O" & derlig & ">2)*1)"
                  Range("KPI!D6").Formula = "=SUMPRODUCT(('Extraction SIGMA'!L2:L" & derlig & "-'Extraction SIGMA'!O2:O" & derlig & "<2)*1)"

                  Range("B8").Select
                  Windows("KPI." & djnwemp & ".xls").Activate
                  Sheets("KPI").Select
                  Range("D34:E34").Select
                  ActiveCell.FormulaR1C1 = "=COUNTIF('Extraction SIGMA'!C[12],""O"")"
                  Range("F34:G34").Select
                  ActiveCell.FormulaR1C1 = "=COUNTIF('Extraction SIGMA'!C[10],""N"")"
                  Range("H34").Select
                  ActiveCell.FormulaR1C1 = "=SUM(RC[-4],RC[-2])"
                  Range("H6").Select
                  ActiveCell.FormulaR1C1 = "=SUM(RC[-4],RC[-2])"
                  Range("H24").Select
                  ActiveCell.FormulaR1C1 = "=SUM(RC[-4],RC[-2])"
                  Range("H7").Select

                  Range("F24").Select
                  ActiveCell.FormulaR1C1 = _
                  "=SUM(COUNTIF('Extraction SIGMA'!C[-2],""CTI ""),COUNTIF('Extraction SIGMA'!C[-2],""RAP ""),COUNTIF('Extraction SIGMA'!C[-2],""RFP ""),COUNTIF('Extraction SIGMA'!C[-2],""RTV ""),COUNTIF('Extraction SIGMA'!C[-2],""TBC ""),COUNTIF('Extraction SIGMA'!C[-2],""CTI""),COUNTIF('Extraction SIGMA'!C[-2],""RAP""),COUNTIF('Extraction SIGMA'!C[-2],""RFP""),COUNTIF('Extraction SIGMA'!C[-2],""RTV""),COUNTIF('Extraction SIGMA'!C[-2],""TBC""))"

                  Range("D24").Select
                  ActiveCell.FormulaR1C1 = _
                  "=SUM(COUNTIF('Extraction SIGMA'!C,""DTI ""),COUNTIF('Extraction SIGMA'!C,""DAP ""),COUNTIF('Extraction SIGMA'!C,""DFP ""),COUNTIF('Extraction SIGMA'!C,""MDI ""),COUNTIF('Extraction SIGMA'!C,""TCB ""),COUNTIF('Extraction SIGMA'!C,""DTI""),COUNTIF('Extraction SIGMA'!C,""DAP""),COUNTIF('Extraction SIGMA'!C,""DFP""),COUNTIF('Extraction SIGMA'!C,""MDI""),COUNTIF('Extraction SIGMA'!C,""TCB""))"

                  Dim i As Long
                  Dim res As Long
                  Dim ct As Long

                  res = 0
                  ct = 0
                  i = 2
                  With Sheets("Extraction SIGMA")
                  While (.Range("J" & i).Value <> "")
                  If (.Range("M" & i).Value <> "" And .Range("J" & i).Value = "1650") Then
                  res = res + ((.Range("M" & i).Value) - (.Range("L" & i).Value))
                  ct = ct + 1
                  End If
                  i = i + 1
                  Wend
                  Sheets("KPI").Range("D17").Value = res / ct
                  End With
                  End Sub
                  1. Modérateur
                    Re,

                    Moi je pense que tu dois tester juste la partie pour l'insertion. Le reste de calcul on verra après.

                    Ta variable djnwemp contient quoi?

                    Je n'ai pas le temsp de regarder je suis au boulot.
                    Si ce n'est pas confidentiel tu peux mettre ton classeur et ton fichier txt sur cjoint.com et je vais regarder plus tard.
                    1. Malheureusement ça l'est...
                      djnwemp est une reconnaissance de date étant donné que mon fichier txt est édité chaque jour.
                      Il y a donc ma variable pour que les calculs puissent être faits chaque jours.