Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1672 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  vba excel

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

vba excel

n°1187163
fanfan450
Posté le 29-08-2005 à 15:42:58  profilanswer
 

Quelqu'un pourrait il m'aider - merci
j'ai fait une macro sous vba excel  
le but c'est de rechercher dans un répertoire tous les fichiers excel - les ouvrir- déproteger- trier  et pour chacun d'eux - lire chaque ligne et en fonction du résultat le stoker dans le fichier maitre.
j'ai réussi à peu près - mais il s'arrête au 1er enregistrement du second fichier  -
mon problème est que le traitement du 1er ne se fait pas pour le second à partir de la boucle do while - voir pb de workbooks(i) !!
merci d'avance - je suis bloquée et ca m'énerve  
 
 
Sub traitement()
 
Set fichcherche = Application.FileSearch  ' va chercher dans le répertoire à copier les fichiers
With fichcherche
 
.LookIn = "Q:\SECRET\FICHIERS\programmation\à copier\"  'Changer le chemin si nécessaire
.Filename = "*.xls" 'ou "*.txt"   ' va rechercher tous les fichiers excel
If .Execute > 0 Then  'va indiquer le nombre de fichiers trouvés
MsgBox .FoundFiles.Count & " Fichier(s) a (ont) été trouvé(s)."
For i = 1 To .FoundFiles.Count 'tant qu'il y a des fichiers excel dans ce répertoire
Workbooks.Open Filename:=.FoundFiles(i) 'ouvre le fichier à copier
 
ActiveSheet.Select  ' selectionne la feuille active
ActiveSheet.Unprotect  ' retire la protection de la feuille
Range("A5:AD3648" ).Select  'selectionne la plage des données (modifiable)
    Selection.Sort Key1:=Range("B6" ), Order1:=xlAscending, Key2:=Range("C6" ) _
        , Order2:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase:= _
        False, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal, DataOption2 _
        :=xlSortNormal  ' tri les données par ligne de programme puis instructeur
Range("B6" ).Select 'selectionne le 1er enregistrement
         
     Do While ActiveCell.Value <> ""
     
    If ActiveCell.Value = "110" Then  ' si valeur = 110
     ActiveCell.EntireRow.Select
     Selection.Copy
    ThisWorkbook.Activate  'selection du fichier de réception
     Sheets("synthese110" ).Select ' selection de la feuille
     Range("b5" ).Select ' selection de la 1ere ligne d'enregistrement
        If Not (IsEmpty(ActiveCell.Offset(1, 0))) Then 'test que 1ere cellule n'est pas vide
       Selection.End(xlDown).Select
        End If
     ActiveCell.Offset(1, -1).Select
     ActiveSheet.Paste  ' colle
     Workbooks(i).Activate
   ActiveCell.Offset(1, 1).Select  ' va se déplacer d'une ligne et prend la valeur
    Else
         
    If ActiveCell.Value = "120" Then  ' tant que valeur =120
     ActiveCell.EntireRow.Select
     Selection.Copy
      ThisWorkbook.Activate  'selection du fichier de réception
     Sheets("synthese120" ).Select ' selection de la feuille
     Range("b5" ).Select ' selection de la 1ere ligne d'enregistrement
        If Not (IsEmpty(ActiveCell.Offset(1, 0))) Then 'test que 1ere cellule n'est pas vide
       Selection.End(xlDown).Select
        End If
     ActiveCell.Offset(1, -1).Select
     ActiveSheet.Paste  ' colle
     Workbooks(i).Activate
   ActiveCell.Offset(1, 1).Select  ' va se déplacer d'une ligne et prend la valeur
    Else
     
    If ActiveCell.Value = "250" Then  ' tant que valeur =120
     ActiveCell.EntireRow.Select
     Selection.Copy
      ThisWorkbook.Activate  'selection du fichier de réception
     Sheets("synthese250" ).Select ' selection de la feuille
     Range("b5" ).Select ' selection de la 1ere ligne d'enregistrement
        If Not (IsEmpty(ActiveCell.Offset(1, 0))) Then 'test que 1ere cellule n'est pas vide
       Selection.End(xlDown).Select
        End If
     ActiveCell.Offset(1, -1).Select
     ActiveSheet.Paste  ' colle
      Workbooks(i).Activate
   ActiveCell.Offset(1, 1).Select  ' va se déplacer d'une ligne et prend la valeur
     End If
     End If
     End If
 
     
     Loop
     
   'Workbooks(i).Activate
    'ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
    'ChDir "Q:\SECRET\FICHIERS\programmation\traité"  ' selection du repertoire traité
    'ActiveWorkbook.Save 'sauvegarde
    'ActiveWorkbook.Close 'fermeture
On Error Resume Next
 
Next i
Else
MsgBox "Aucun fichier n'a été trouvé."
End If
End With

mood
Publicité
Posté le 29-08-2005 à 15:42:58  profilanswer
 

n°1188999
fanfan450
Posté le 31-08-2005 à 19:00:58  profilanswer
 

j'ai trouvé moi meme la solution  
merci quand meme

n°1189180
jpcheck
Pioupiou
Posté le 01-09-2005 à 08:39:25  profilanswer
 

quand on trouve tout seul, on donne la soluce aux autres stp  :whistle:  certains ont cherché pour toi, alors si tu trouves, tu clos le topic, et tu indik les clés :bounce:

n°1189284
guendalf
Posté le 01-09-2005 à 11:01:50  profilanswer
 

Autre chose aussi.. essaye de decouper ta fonction en sous-fonctions.. chacune effectuant une seule et unique tache.. avec un nom explicite.
Ca simplifie grandement la relecture.. car la j'ai sursauté devant toutes ces lignes de code (meme pas indenté) !


---------------
Guendalf

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  vba excel

 

Sujets relatifs
php et excel, valeur sur plusieurs cellulesFermer excel après Getobject/CreateObject
Manipuler plusieurs classeurs exceltaille de font avec excel
Macro excel fichier[VBS-> Résolu] Sélectionner une imprimante sous Excel
Poi (Excel) : Comment créer une liste de sélection (combobox)fonctions personnalisées Excel
gestion d'access via ExcelPresse papier Excel
Plus de sujets relatifs à : vba excel


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR