Recherche de données dans différentes feuilles Excel [Résolu] - VB/VBA/VBS - Programmation
Marsh Posté le 17-08-2007 à 07:15:28
bonjour,
as-tu essayé d'enregistrer une macro pour en tirer le code?
Cordialement
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.
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
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
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
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
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
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
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