Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Adaptation d'un code pour récupération de données

2 réponses
Avatar
Sunburn
Bonjour à tous.
j'ai un petit soucis d'adaptation.
Voilà, j'avais réussi à faire fonctionner un code que voici :
------ (dans un module)
'1. Création de la liste CONGES PAYES
Sub CreationListeA()
Dim Ligne As Integer
Ligne = 1
On Error Resume Next
Sheets("Confrontation CP").Activate
If Err <> 0 Then
Sheets.Add
ActiveSheet.Name = "Confrontation CP"
Sheets("CP 05-06").Select
For i = 0 To 300 Step 20
Range("C5").Offset(i, 0).Copy Sheets("Confrontation
CP").Range("A" & Ligne)
Ligne = Ligne + 1
Next i
End If
On Error GoTo 0
End Sub

'3. Module Routine CONGES PAYES
Sub RoutineA(Var)
Sheets("CP 05-06").Select
Range("B" & Var & ":O" & Var + 50).Copy
Sheets("Confrontation CP").Select
If [A1] = 0 Then
[A1] = 1
Range("C5").Select
Else
[A1] = 0
Range("R5").Select
End If
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
Selection.PasteSpecial Paste:=xlFormats, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
'ActiveSheet.Paste
End Sub
--------(dans la page concernée)
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim Var
If Intersect(Target, Range("A2:A17")) Is Nothing Then Exit Sub
Application.EnableEvents = False
Var = Application.Match(Target.Value, Sheets("CP 05-06").Range("C:C"), 0)
RoutineA Var
Application.EnableEvents = True
End Sub
---------

Alors j'explique.
Sur un epage "CP 05-06", j'ai 19 tableaux qui se succèdent. Chacun possède
12 colonnes et 37 lignes utiles. (les 12 mois de l'année)
Ces tableaux sont séparés entre eux de 5 lignes.

Je voudrais une macro qui me permette d'afficher dans un tableau, le mois de
Juin par exemple, avec mes 19 salariés, côte à côte (c'est-à-dire, que le
tableau ferait 19 colonnes par 37 lignes).

Donc comment créer une macro pour récupérer ces données?

Je vous remercie précieusement.
Yann

2 réponses

Avatar
Pounet95
Bonjour,
Il y a peut-être plus simple voir du côté de l'utilisation d'un TCD ???

Dans une feuille Excel :
nommer chacun des tableaux Employé ( par son nom par exemple )
créer une liste des Employés et la nommer aussi

Ici 2 employés Albert et Jules
liste employés nommée MesEmployés
dans la cellule P3 de la feuille, j'ai mis la liste des numéros de mois
( données/validation liste 1;2......12

recopier le code ci-dessous dans le module évènement de la feuille

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
Dim LeMois As Integer
Dim cel As Range
Dim datas As Range
Dim col As Integer

'Est-ce bien la cellule P3 qui a changé ?
If Target = [P3] Then
'efface la zone de réception en ayant bloqué les évènements
Application.EnableEvents = False
Range("Q1:BZ6").Clear
col = 17

LeMois = Target
For Each cel In Range("MesEmployés")
'se positionne pour le 1er employé en Q1
Cells(1, col).Select
'copie les données de l'employé dans le tableau de réception
Set datas = Application.Intersect(Range(cel), Columns(LeMois))
datas.Copy
'employé en en-tête de colonne
ActiveCell = cel
'ses données en dessous 2 cellules plus bas
ActiveCell.Offset(2, 0).PasteSpecial xlPasteAll
'pour le suivant
col = col + 1
Next
End If
'on n'oublie pas de remettre les évènements !!!!
Evenements
End Sub

Sub Evenements()
Application.EnableEvents = True
End Sub

A adapter au besoin bien sûr !
Bon courage

--
Pounet95
on trouve tout ( ou presque ) http://www.excelabo.net/
Conseillé :
http://dj.joss.free.fr/netiquet.htm
(charte, nétiquette, conseils, abréviations, souriettes...)
http://www.excelabo.net/mpfe/connexion.php
(connexion, conseils...)

"Sunburn" a écrit dans le message de
news:
Bonjour à tous.
j'ai un petit soucis d'adaptation.
Voilà, j'avais réussi à faire fonctionner un code que voici :
------ (dans un module)
'1. Création de la liste CONGES PAYES
Sub CreationListeA()
Dim Ligne As Integer
Ligne = 1
On Error Resume Next
Sheets("Confrontation CP").Activate
If Err <> 0 Then
Sheets.Add
ActiveSheet.Name = "Confrontation CP"
Sheets("CP 05-06").Select
For i = 0 To 300 Step 20
Range("C5").Offset(i, 0).Copy Sheets("Confrontation
CP").Range("A" & Ligne)
Ligne = Ligne + 1
Next i
End If
On Error GoTo 0
End Sub

'3. Module Routine CONGES PAYES
Sub RoutineA(Var)
Sheets("CP 05-06").Select
Range("B" & Var & ":O" & Var + 50).Copy
Sheets("Confrontation CP").Select
If [A1] = 0 Then
[A1] = 1
Range("C5").Select
Else
[A1] = 0
Range("R5").Select
End If
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:=
_
False, Transpose:úlse
Selection.PasteSpecial Paste:=xlFormats, Operation:=xlNone,
SkipBlanks:= _
False, Transpose:úlse
'ActiveSheet.Paste
End Sub
--------(dans la page concernée)
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim Var
If Intersect(Target, Range("A2:A17")) Is Nothing Then Exit Sub
Application.EnableEvents = False
Var = Application.Match(Target.Value, Sheets("CP 05-06").Range("C:C"),
0)
RoutineA Var
Application.EnableEvents = True
End Sub
---------

Alors j'explique.
Sur un epage "CP 05-06", j'ai 19 tableaux qui se succèdent. Chacun possède
12 colonnes et 37 lignes utiles. (les 12 mois de l'année)
Ces tableaux sont séparés entre eux de 5 lignes.

Je voudrais une macro qui me permette d'afficher dans un tableau, le mois
de
Juin par exemple, avec mes 19 salariés, côte à côte (c'est-à-dire, que le
tableau ferait 19 colonnes par 37 lignes).

Donc comment créer une macro pour récupérer ces données?

Je vous remercie précieusement.
Yann


Avatar
Sunburn
Merci.

je vais essayer d'adapter, ça m'a l'air faisable.
Merci.
YANN


Bonjour,
Il y a peut-être plus simple voir du côté de l'utilisation d'un TCD ???

Dans une feuille Excel :
nommer chacun des tableaux Employé ( par son nom par exemple )
créer une liste des Employés et la nommer aussi

Ici 2 employés Albert et Jules
liste employés nommée MesEmployés
dans la cellule P3 de la feuille, j'ai mis la liste des numéros de mois
( données/validation liste 1;2......12

recopier le code ci-dessous dans le module évènement de la feuille

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
Dim LeMois As Integer
Dim cel As Range
Dim datas As Range
Dim col As Integer

'Est-ce bien la cellule P3 qui a changé ?
If Target = [P3] Then
'efface la zone de réception en ayant bloqué les évènements
Application.EnableEvents = False
Range("Q1:BZ6").Clear
col = 17

LeMois = Target
For Each cel In Range("MesEmployés")
'se positionne pour le 1er employé en Q1
Cells(1, col).Select
'copie les données de l'employé dans le tableau de réception
Set datas = Application.Intersect(Range(cel), Columns(LeMois))
datas.Copy
'employé en en-tête de colonne
ActiveCell = cel
'ses données en dessous 2 cellules plus bas
ActiveCell.Offset(2, 0).PasteSpecial xlPasteAll
'pour le suivant
col = col + 1
Next
End If
'on n'oublie pas de remettre les évènements !!!!
Evenements
End Sub

Sub Evenements()
Application.EnableEvents = True
End Sub

A adapter au besoin bien sûr !
Bon courage

--
Pounet95
on trouve tout ( ou presque ) http://www.excelabo.net/
Conseillé :
http://dj.joss.free.fr/netiquet.htm
(charte, nétiquette, conseils, abréviations, souriettes...)
http://www.excelabo.net/mpfe/connexion.php
(connexion, conseils...)

"Sunburn" a écrit dans le message de
news:
Bonjour à tous.
j'ai un petit soucis d'adaptation.
Voilà, j'avais réussi à faire fonctionner un code que voici :
------ (dans un module)
'1. Création de la liste CONGES PAYES
Sub CreationListeA()
Dim Ligne As Integer
Ligne = 1
On Error Resume Next
Sheets("Confrontation CP").Activate
If Err <> 0 Then
Sheets.Add
ActiveSheet.Name = "Confrontation CP"
Sheets("CP 05-06").Select
For i = 0 To 300 Step 20
Range("C5").Offset(i, 0).Copy Sheets("Confrontation
CP").Range("A" & Ligne)
Ligne = Ligne + 1
Next i
End If
On Error GoTo 0
End Sub

'3. Module Routine CONGES PAYES
Sub RoutineA(Var)
Sheets("CP 05-06").Select
Range("B" & Var & ":O" & Var + 50).Copy
Sheets("Confrontation CP").Select
If [A1] = 0 Then
[A1] = 1
Range("C5").Select
Else
[A1] = 0
Range("R5").Select
End If
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:=
_
False, Transpose:úlse
Selection.PasteSpecial Paste:=xlFormats, Operation:=xlNone,
SkipBlanks:= _
False, Transpose:úlse
'ActiveSheet.Paste
End Sub
--------(dans la page concernée)
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim Var
If Intersect(Target, Range("A2:A17")) Is Nothing Then Exit Sub
Application.EnableEvents = False
Var = Application.Match(Target.Value, Sheets("CP 05-06").Range("C:C"),
0)
RoutineA Var
Application.EnableEvents = True
End Sub
---------

Alors j'explique.
Sur un epage "CP 05-06", j'ai 19 tableaux qui se succèdent. Chacun possède
12 colonnes et 37 lignes utiles. (les 12 mois de l'année)
Ces tableaux sont séparés entre eux de 5 lignes.

Je voudrais une macro qui me permette d'afficher dans un tableau, le mois
de
Juin par exemple, avec mes 19 salariés, côte à côte (c'est-à-dire, que le
tableau ferait 19 colonnes par 37 lignes).

Donc comment créer une macro pour récupérer ces données?

Je vous remercie précieusement.
Yann