Aide VBA

Fermé
Tonio - 1 févr. 2010 à 09:16
 Tonio - 10 févr. 2010 à 08:43
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

lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
1 févr. 2010 à 09:49
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

0
Je comprends pas il ne veut pas il ouvre automatiquement dans la 1ere feuille de mon classeur sans faire de reconnaissance...
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
9 févr. 2010 à 09:44
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 = ":"
0
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 ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
9 févr. 2010 à 10:44
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

0
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
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
9 févr. 2010 à 11:25
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
0
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
0
qu'en penses tu ?
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
9 févr. 2010 à 13:57
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.
0
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.
0
Up
0