Macro excel fichier

Macro excel fichier - VB/VBA/VBS - Programmation

Marsh Posté le 25-08-2005 à 14:20:56    

Bonjour,
 
Voici un bout de ma macro excel et je voudrais faire une boucle qui me permette de choisir combien de fichier .plot j'ouvre et au lieu de faire des copier coller basiques en fontion du nombre de fichier que je veux ouvrir puis d'importer les données. Ensuite je copier toute mes feuilles dans un classeur pour des graphs !
 
Merci pour votre aide.
MaDe
 :??:  
P.S. : bon saussi pour manipuler via macro des cellules avec du texte.
 
 

Code :
  1. fileToOpen = Application _
  2.     .GetOpenFilename("Plot Files (*.plot), *.plot" )
  3.     Workbooks.OpenText Filename:=fileToOpen, Origin:=xlWindows _
  4.         , StartRow:=1, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _
  5.         ConsecutiveDelimiter:=True, Tab:=True, Semicolon:=False, Comma:=False, _
  6.         Space:=True, Other:=False, FieldInfo:=Array(Array(1, 9), Array(2, 1), Array(3 _
  7.         , 1), Array(4, 1), Array(5, 1), Array(6, 1))
  8.     Cells.Replace What:=".", Replacement:=",", LookAt:=xlPart, SearchOrder _
  9.         :=xlByRows, MatchCase:=False
  10.     Sheets("gas" ).Select
  11.     Sheets("gas" ).Name = "gas_1"
  12.     Sheets("gas_1" ).Move After:=Workbooks("classeur_pour_macro.xls" ).Sheets(1)
  13.    
  14.     fileToOpen = Application _
  15.     .GetOpenFilename("Plot Files (*.plot), *.plot" )
  16.     Workbooks.OpenText Filename:=fileToOpen, Origin:=xlWindows _
  17.         , StartRow:=1, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _
  18.         ConsecutiveDelimiter:=True, Tab:=True, Semicolon:=False, Comma:=False, _
  19.         Space:=True, Other:=False, FieldInfo:=Array(Array(1, 9), Array(2, 1), Array(3 _
  20.         , 1), Array(4, 1), Array(5, 1), Array(6, 1))
  21.     Cells.Replace What:=".", Replacement:=",", LookAt:=xlPart, SearchOrder _
  22.         :=xlByRows, MatchCase:=False
  23.     Sheets("gas" ).Select
  24.     Sheets("gas" ).Name = "gas_2"
  25.     Sheets("gas_2" ).Move After:=Workbooks("classeur_pour_macro.xls" ).Sheets(2)

Reply

Marsh Posté le 25-08-2005 à 14:20:56   

Reply

Marsh Posté le 26-08-2005 à 10:01:45    

Il te faut faire un InputBox qui te demanderait de saisir le nombre de fois que tu veux répéter l'opération.
 
Puis d'ajouter un

Code :
  1. For a = 1 to x

(récupéré de l'InputBox)

Reply

Marsh Posté le 26-08-2005 à 10:24:19    

Salut made37,
 
Une boucle qui irait bien pour ton cas c'est Do... Loop While, avec une variable public qui te permettrait de poser le nom de tes feuilles gas_A en variable, et une variable i pour demander si un autre fichier est à traiter

Public A as integer
 
sub lancement()
dim i
A=1
Do
  ton traitement (ouverture de fichier, copie de feuille)
  (c'est la que Sheets("gas" ).name = "gas_" & A)
  (et ton Sheets("gas_2" ).Move After:=Workbooks("classeur_pour_macro.xls" ).Sheets(2) devient Sheets("gas_" & A).Move After:=Workbooks("classeur_pour_macro.xls" ).Sheets(A))
 
  i=""
  i= msgbox("Un autre fichier ?", vbquestion + vbyesno)
  A = A + 1
Loop While i = 6 '6 est la valeur de retour pour le click sur yes


 
bon courage

Reply

Marsh Posté le 26-08-2005 à 11:39:42    

pas bete vos conseils !   :bounce:  
 
on m'a proposé ca aussi :)
mais la do while est sympa je trouve avec le choix en direct :)  :love:  
 

Code :
  1. For i = 1 To 10
  2. fileToOpen = Application _
  3.      .GetOpenFilename("Plot Files (*.plot), *.plot" )
  4. Workbooks.OpenText Filename:=fileToOpen, Origin:=xlWindows _
  5.          , StartRow:=1, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _
  6.          ConsecutiveDelimiter:=True, Tab:=True, Semicolon:=False, Comma:=False, _
  7.          Space:=True, Other:=False, FieldInfo:=Array(Array(1, 9), Array(2, 1), Array(3 _
  8.          , 1), Array(4, 1), Array(5, 1), Array(6, 1))
  9.      Cells.Replace What:=".", Replacement:=",", LookAt:=xlPart, SearchOrder _
  10.          :=xlByRows, MatchCase:=False
  11.      Sheets("gas" ).Select
  12.      Sheets("gas" ).Name = "gas_" & i
  13.      Sheets("gas_1" ).Move After:=Workbooks("classeur_pour_macro.xls" ).Sheets(i)
  14. Next
  15. 'et celle ci,
  16. For i = 1 To 6
  17.      Windows("Classeur_pour_macro.xls" ).Activate
  18.      Sheets("gas_" & i).Select
  19.      Sheets("gas_" & i).Copy After:=Workbooks("traitement_essai.xls" ).Sheets(i)
  20. Next
  21. 'et celle ci
  22.   For i = 1 To 6
  23.      Sheets("gas_" & i).Select
  24.      For y = 2 To 10 Step 2
  25.          Columns(y).Insert Shift:=xlToRight
  26.          Cells(2, y).FormulaR1C1 = "=RC[-1]*10^-5"
  27.          Cells(2, y).AutoFill Destination:=Range(Cells(2, y), Cells(543, y)), Type:=xlFillDefault
  28.          Range(Cells(2, y), Cells(543, y)).NumberFormat = "0.00"
  29.      Next
  30.   Next


 

Reply

Marsh Posté le 26-08-2005 à 14:55:37    

Salut made37
 

made37 a écrit :

For i = 1 To 10
fileToOpen = Application _
     .GetOpenFilename("Plot Files (*.plot), *.plot" )
 
Workbooks.OpenText Filename:=fileToOpen, Origin:=xlWindows _
         , StartRow:=1, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _
         ConsecutiveDelimiter:=True, Tab:=True, Semicolon:=False, Comma:=False, _
         Space:=True, Other:=False, FieldInfo:=Array(Array(1, 9), Array(2, 1), Array(3 _
         , 1), Array(4, 1), Array(5, 1), Array(6, 1))
     Cells.Replace What:=".", Replacement:=",", LookAt:=xlPart, SearchOrder _
         :=xlByRows, MatchCase:=False
 
     Sheets("gas" ).Select
     Sheets("gas" ).Name = "gas_" & i
     Sheets("gas_1" ).Move After:=Workbooks("classeur_pour_macro.xls" ).Sheets(i)
Next


Cette macro-ci répond au problème que tu as posé mais me semble "délicate" pour 2 raisons :
1- tu es limité à 10 fichiers... (il vaudrait mieux for i= 1 to X et faire décider du X(nombre de fichiers) grace à une imput box comme proposé par guigui13
2- Comment va réagir la macros si tu as moins de 10 fichiers ?  
 

made37 a écrit :


For i = 1 To 6
     Windows("Classeur_pour_macro.xls" ).Activate
     Sheets("gas_" & i).Select
     Sheets("gas_" & i).Copy After:=Workbooks("traitement_essai.xls" ).Sheets(i)
Next


 
Cette macro-là ne sert qu'à copier 6 fois la feuille "gas" d'un classeur excel unique et défini dans la macro dans un classeur unique et défini dans la macro (la même feuille aura un numéro de gas_1 à gas_6)
 

made37 a écrit :

For i = 1 To 6
     Sheets("gas_" & i).Select
     For y = 2 To 10 Step 2
         Columns(y).Insert Shift:=xlToRight
         Cells(2, y).FormulaR1C1 = "=RC[-1]*10^-5"
         Cells(2, y).AutoFill Destination:=Range(Cells(2, y), Cells(543, y)), Type:=xlFillDefault
         Range(Cells(2, y), Cells(543, y)).NumberFormat = "0.00"
     Next


 
Cette macro là ne répond pas du tout au problème, j'en conclu que c'est la macro de traitement pour préparer tes graphiques...
 
bon courage

Reply

Marsh Posté le 26-08-2005 à 15:29:35    

oui j'ai encore du boulot, mais je suis vriament newbies :)

Reply

Marsh Posté le 26-08-2005 à 21:08:37    

j'ai un souci avec mes remplacement de "." en ",". il me transforme avec une *10^-5 des nombres
 
iitiale ma variable = 1.000E00 et apres le replace ca donne 1E5.
 
Merci encore.

Reply

Marsh Posté le 29-08-2005 à 09:40:09    

Heu... tu fais quoi pour remplacer les "." par des "," ??

Code :
  1. Dim nb as Integer
  2. nb = Replace("1,000", ",", "." )
  3. MsgBox "nb = " & nb


---------------
Guendalf
Reply

Marsh Posté le 29-08-2005 à 12:51:44    

je fais sur chaque feuille :
 

Code :
  1. Workbooks.OpenText Filename:=fileToOpen, Origin:=xlWindows _
  2.          , StartRow:=1, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _
  3.          ConsecutiveDelimiter:=True, Tab:=True, Semicolon:=False, Comma:=False, _
  4.          Space:=True, Other:=False, FieldInfo:=Array(Array(1, 9), Array(2, 1), Array(3 _
  5.          , 1), Array(4, 1), Array(5, 1), Array(6, 1))
  6.      Cells.Replace What:=".", Replacement:=",", LookAt:=xlPart, SearchOrder _
  7.          :=xlByRows, MatchCase:=False


 
Voila et ches chaint ce 10E5 qui arrive !


Message édité par made37 le 29-08-2005 à 12:52:11
Reply

Marsh Posté le 29-08-2005 à 14:04:36    

made37 a écrit :

je fais sur chaque feuille :
 

Code :
  1. Workbooks.OpenText Filename:=fileToOpen, Origin:=xlWindows _
  2.          , StartRow:=1, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _
  3.          ConsecutiveDelimiter:=True, Tab:=True, Semicolon:=False, Comma:=False, _
  4.          Space:=True, Other:=False, FieldInfo:=Array(Array(1, 9), Array(2, 1), Array(3 _
  5.          , 1), Array(4, 1), Array(5, 1), Array(6, 1))
  6.      Cells.Replace What:=".", Replacement:=",", LookAt:=xlPart, SearchOrder _
  7.          :=xlByRows, MatchCase:=False


 
Voila et ches chaint ce 10E5 qui arrive !


 
Tu sais qu'il y a un parametre specialement pour definir le separateur de decimal pendant la conversion... :

Code :
  1. DecimalSeparator:="."


 
Donc pas besoin de faire le cells.replace ensuite..


---------------
Guendalf
Reply

Marsh Posté le 29-08-2005 à 14:04:36   

Reply

Marsh Posté le 29-08-2005 à 14:41:06    

je savais pas je vais tester ca voir :)
 
MErci
 
la je galere sur les macro et les graph !

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed