[Résolu] Recherche de données dans différentes feuilles Excel

Recherche de données dans différentes feuilles Excel [Résolu] - VB/VBA/VBS - Programmation

Marsh Posté le 16-08-2007 à 22:36:04    

Bonjour ou Bonsoir à tous,
 
Voila je bloque sur un problème, je débute en VBA et je souhaite réaliser une macro qui me permettrait de reprendre différentes données sur les 38 feuilles que j'ai.
Les feuilles sont toutes identiques, elles ont la même présentation.
Les données que je dois reprendre sont le nom, prénom, fonction, age ----> ces données sont en A8, D8, F8, H8
Quatre autres données doivent aussi être reprises : Une date, nombre de jour, autre, motif.
 
Toutes ces données doivent ensuite être mise dans un rapport journalier.
 
Exemple:
 
Vérificateur --- Nom --- Prénom --- Age : En congé X jours à la date du ....
ou
Vérificateur --- Nom --- Prénom --- Age : En Maladie X jours à la date du ....
ou
Vérificateur --- Nom --- Prénom --- Age : En déplacement X jours à la date du ....
 
Que faire pour réaliser une telle Macro en sachant qu'il y a deux sortes de personnel Cadre et Employé.
 
Merci pour votre aide
 
JJ


Message édité par jj6401 le 20-08-2007 à 21:13:35
Reply

Marsh Posté le 16-08-2007 à 22:36:04   

Reply

Marsh Posté le 17-08-2007 à 07:15:28    

bonjour,
as-tu essayé d'enregistrer une macro pour en tirer le code?
 
Cordialement

Reply

Marsh Posté le 17-08-2007 à 07:37:05    

Bonjour seniorpapou,
 
Oui, j'ai essayé, mais le problème que j'ai rencontré est qu'il ouvre les feuilles prends les données mais les copies sur la page Rapport mais toujours au même endroit.
Il faut savoir que chaque personne à une feuille et que toutes les personnes ne sont pas absentes le même jour.

Reply

Marsh Posté le 17-08-2007 à 07:44:12    

Re,
juste pour que tu puisses t'en inspirer:
 
feui = 2
limit = Worksheets(feui).Cells(65527, 2).End(xlUp).Row
zone = "b1:c" & limit
'Sheets("Feuil2" ).Select
basdeB = Worksheets(1).Cells(65527, 2).End(xlUp).Row + 1
oujcol = "B" & basdeB
   Worksheets(feui).Range(zone).Copy _
    Destination:=Worksheets(1).Range(oujcol)
 
Cordialement

Reply

Marsh Posté le 17-08-2007 à 08:09:22    

Merci pour ton aide,
 
voici le code  
Sub Rapport()
 
Dim fd As Worksheet 'Feuille destination
Dim fs As Worksheet 'Feuille source (de la copie)
Dim Lig     As Long
Dim Col     As String
Dim NbrLig  As Long
Dim NumLig  As Long
 
 ' feuille de destination
   Sheets("Rapport" ).Activate
 
 'On défini ici la feuille destination
  Set fd = ThisWorkbook.Sheets("Rapport" )
 
 'Effacement Feuille destination
  fd.Cells.Clear
 
 'Ecriture de l'entête sur Feuille destination
  fd.Activate
  fd.Cells(3, 10) = "Annexe(s) :"
  fd.Cells(8, 2) = "Objet :"
  fd.Cells(8, 4) = "Rapport Journalier du "
  fd.Cells(10, 4) = "Personnel :"
 
  Col = "A"                 ' colonne données non vides à tester'
  NumLig = 11
  With Sheets("Nom" )  'feuille source
  NbrLig = .Cells(100, Col).End(xlUp).Row
  For Lig = 15 To NbrLig             'n° de la 1ere ligne de données'
    If .Cells(8, 1).Value <> "" Then
       .Cells(8, 1).EntireRow.Copy
       NumLig = NumLig + 1
       Cells(NumLig, 1).Select
       ActiveSheet.Paste
    End If
  Next
  End With
 
voila
 
JJ

Reply

Marsh Posté le 17-08-2007 à 13:49:19    

Mais je ne parviens pas à mettre le complément de données sur la même ligne, cad en congé ou les autres motifs qui sont dans les autres lignes.
 
Merci pour l'aide
 
JJ

Reply

Marsh Posté le 20-08-2007 à 20:08:15    

Voici la solution que m'a rédigé seniorpapou, j'avais une petite partie des données, le tout était de les mettre dans le bon sens. Avec son aide le final est génial.
 
Je le remercie vivement
 
Sub RapportExécution()
 
Dim fd As Worksheet 'Feuille destination
Dim fs As Worksheet 'Feuille source (de la copie)
Dim Lig     As Long
 
Dim NbrLig  As Long
Dim NumLig  As Long
   
 'feuille de destination
  Sheets("Rapport" ).Activate
 
 'On défini ici la feuille destination
  Set fd = ThisWorkbook.Sheets("Rapport" )
  Set categ = ThisWorkbook.Sheets("catpers" )
 
 'Effacement Feuille destination
  fd.Cells.Clear
 
Dim dateref As Date
  dateref = InputBox("Donner la date pour le rapport en 00/00/0000" )
  datref = CDate(dateref)
 
 'Ecriture de l'entête sur Feuille destination
  fd.Activate
  Range("A1:E1" ).Select
    With Selection
        .HorizontalAlignment = xlCenter
    End With
    Selection.Merge
    Selection.Font.Bold = True
  fd.Cells(1, 1) = "texte"
  Range("A6:E6" ).Select
    With Selection
        .HorizontalAlignment = xlCenter
    End With
    Selection.Merge
    Selection.Font.Bold = True
  fd.Cells(6, 1) = "texte"
  Range("A7:E7" ).Select
    With Selection
        .HorizontalAlignment = xlCenter
    End With
    Selection.Merge
  fd.Cells(7, 1) = "texte"
  Range("A8:E8" ).Select
    With Selection
        .HorizontalAlignment = xlCenter
    End With
    Selection.Merge
  fd.Cells(8, 1) = "texte"
  fd.Cells(2, 17) = "Le " & datref
  fd.Cells(3, 17) = "Annexe(s) :"
  fd.Cells(11, 2) = "Objet :"
  fd.Cells(11, 3) = "Rapport Journalier du : " & datref
 
 Dim col As Long
  col = 1
  NumLig = 13              ' colonne données non vides à tester'
  nbcat = categ.Cells(100, col).End(xlUp).Row
  For cc = 1 To nbcat
  catcher = categ.Cells(cc, 1)
  Cells(NumLig, 1) = "Pour la catégorie : " & catcher
  NumLig = NumLig + 1
  For Each chochot In Sheets
 
  nomsh = chochot.Name
  indice = chochot.Index
  If chochot.Name <> "Rapport" Then
  'chochot.Select
  With chochot
  If .Cells(8, 1).Value <> "" And .Cells(8, 8) = catcher Then
     .Cells(8, 1).EntireRow.Copy
   
  'feuille source
  NbrLig = Worksheets(indice).Cells(100, col).End(xlUp).Row
  For Lig = 15 To NbrLig 'n° de la 1ere ligne de données'
   
Dim datedebutcg As Date
Dim datefincg As Date
  datedebutcg = CDate(.Cells(Lig, 1))
  datefincg = CDate(.Cells(Lig, 1)) + .Cells(Lig, 3) + .Cells(Lig, 4)
   If dateref >= datedebutcg And dateref <= datefincg Then
   
   'En maladie 10 jours à la date du 00/00/0000
   NumLig = NumLig + 1
   Cells(NumLig, 1).Select
       ActiveSheet.Paste
       motiv = .Cells(Lig, 5)
       If IsNull(motiv) Or motiv = "" Then motiv = "inconnu"
   absentpour = "En " & motiv & " pour " & .Cells(Lig, 3) & .Cells(Lig, 4) & " jour(s) à partir du " & .Cells(Lig, 1)
 
   Cells(NumLig, 13) = absentpour
   Exit For
  End If
  Next
   End If
  End With
   
  End If
  Next chochot
   NumLig = NumLig + 1
  Next cc
   
   Range("P43:R43" ).Select
   With Selection
       .HorizontalAlignment = xlCenter
   End With
   Selection.Merge
  fd.Cells(43, 16) = "texte"
   Range("P44:R44" ).Select
   With Selection
       .HorizontalAlignment = xlCenter
   End With
   Selection.Merge
  fd.Cells(44, 16) = "texte"
     Range("P45:R45" ).Select
   With Selection
       .HorizontalAlignment = xlCenter
   End With
   Selection.Merge
  fd.Cells(45, 16) = "texte"
  fd.Cells(57, 1) = "_________________________________________"
  fd.Cells(58, 1) = "texte"
    Range("j58:q58" ).Select
   With Selection
       .HorizontalAlignment = xlCenter
   End With
   Selection.Merge
  fd.Cells(58, 10) = "texte"
   Range("c59:e59" ).Select
   With Selection
       .HorizontalAlignment = xlCenter
   End With
   Selection.Merge
  fd.Cells(59, 3) = "texte"
   Range("j59:q59" ).Select
   With Selection
       .HorizontalAlignment = xlCenter
   End With
   Selection.Merge
  fd.Cells(59, 10) = "texte"
  fd.Cells(60, 1) = "texte"
  Range("j60:q60" ).Select
   With Selection
       .HorizontalAlignment = xlCenter
   End With
   Selection.Merge
  fd.Cells(60, 10) = "texte"
  fd.Cells(61, 1) = "texte"
   Range("j61:q61" ).Select
   With Selection
       .HorizontalAlignment = xlCenter
   End With
   Selection.Merge
  fd.Cells(61, 10) = "texte"
  fd.Cells(62, 1) = "E-mail : texte"
   Range("j62:q62" ).Select
   With Selection
       .HorizontalAlignment = xlCenter
   End With
   Selection.Merge
  fd.Cells(62, 10) = "texte"
 
End Sub

Reply

Marsh Posté le 20-08-2007 à 20:13:49    

Reply

Marsh Posté le 20-08-2007 à 20:17:03    

Merci kiki29 pour l'info
 
Mais ici ce sont des feuilles ou sheet d'un même fichier avec prise de renseignement et mise en page dans un rapport.
 
J'avais vu le post.
 
Au fait comment cloturer le post ?
 
JJ


Message édité par jj6401 le 20-08-2007 à 20:18:17
Reply

Marsh Posté le 20-08-2007 à 21:05:40    

Bonsoir,
Tu te positionnes sur ton premier post, tu cliques sur éditer le message, puis tu modifies le titre en mettant [RESOLU]
Cordialement

Reply

Sujets relatifs:

Leave a Replay

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