OVH Cloud OVH Cloud

Copier des données dispersées dans plusieurs fichiers dans un fichier récap

10 réponses
Avatar
Cb1moa
Bonsoir à tous,
J'aurais de nouveau besoin de vos lumières. je ne doute pas que vous avez la solution à mon problème. J'ai trouvé quelques références sur Internet de sujets similaires mais ne maitrisant pas le VBA, je ne comprends pas bien la construction des formules et du coup je n'arrive pas à les adapter.

Voici mon besoin :
- J'ai un classeur qui est composé de 20 feuilles nommées de "e;feuil1"e; à "e;feuil20"e;. Chaque feuille correspond à un club.
- Dans chaque feuille, les lignes reprennent les différents matchs de la saison avec les résultats.
- Dans chaque feuille, j'ai créé un espace "e;Q7:X7"e; dans lequel on retrouve la compilation des résultats du club : "e;nbre de matchs joués"e;, "e;nbre de matchs gagnés"e;, "e;nbre de matchs nuls"e;.... il m'est donc possible de savoir pour chaque club leur nombre de points et le nombre de but encaissés et mis.
- J'aimerais donc récupérer l'espace "e;Q7:X7"e; de chaque feuille afin de compiler tout ça dans une seule feuille "Récap" qui me présenterait les résultats de toutes les équipes d'un seul coup. Un petit classement avec le nombre de points et j'ai mon classement automatiquement.

J'espère avoir été clair,

Je vous remercie par avance pour votre aide

Bonne soirée
Cb1moa

10 réponses

Avatar
Michel__D
Le 06/11/2019 à 20:20, Cb1moa a écrit :
Bonsoir à tous,
J'aurais de nouveau besoin de vos lumières. je ne doute pas que vous avez la
solution à mon problème. J'ai trouvé quelques références sur Internet de sujets
similaires mais ne maitrisant pas le VBA, je ne comprends pas bien la
construction des formules et du coup je n'arrive pas à les adapter.
Voici mon besoin :
- J'ai un classeur qui est composé de 20 feuilles nommées de "e;feuil1"e; à
"e;feuil20"e;. Chaque feuille correspond à un club.
- Dans chaque feuille, les lignes reprennent les différents matchs de la saison
avec les résultats.
- Dans chaque feuille, j'ai créé un espace "e;Q7:X7"e; dans lequel on retrouve
la compilation des résultats du club : "e;nbre de matchs joués"e;, "e;nbre de
matchs gagnés"e;, "e;nbre de matchs nuls"e;.... il m'est donc possible de savoir
pour chaque club leur nombre de points et le nombre de but encaissés et mis.
- J'aimerais donc récupérer l'espace "e;Q7:X7"e; de chaque feuille afin de
compiler tout ça dans une seule feuille "Récap" qui me présenterait les
résultats de toutes les équipes d'un seul coup. Un petit classement avec le
nombre de points et j'ai mon classement automatiquement.
J'espère avoir été clair,
Je vous remercie par avance pour votre aide
Bonne soirée
Cb1moa

Fais un copier avec liaison et regarde la formule obtenue.
Avatar
cb1moa
Le mercredi 06 Novembre 2019 à 20:20 par Cb1moa :
Bonsoir à tous,
J'aurais de nouveau besoin de vos lumières. je ne doute pas que vous
avez la solution à mon problème. J'ai trouvé quelques
références sur Internet de sujets similaires mais ne maitrisant
pas le VBA, je ne comprends pas bien la construction des formules et du coup je
n'arrive pas à les adapter.
Voici mon besoin :
- J'ai un classeur qui est composé de 20 feuilles nommées de
"e;feuil1"e; à "e;feuil20"e;. Chaque feuille
correspond à un club.
- Dans chaque feuille, les lignes reprennent les différents matchs de la
saison avec les résultats.
- Dans chaque feuille, j'ai créé un espace "e;Q7:X7"e;
dans lequel on retrouve la compilation des résultats du club :
"e;nbre de matchs joués"e;, "e;nbre de matchs
gagnés"e;, "e;nbre de matchs nuls"e;.... il m'est donc
possible de savoir pour chaque club leur nombre de points et le nombre de but
encaissés et mis.
- J'aimerais donc récupérer l'espace "e;Q7:X7"e; de
chaque feuille afin de compiler tout ça dans une seule feuille
"Récap" qui me présenterait les résultats de
toutes les équipes d'un seul coup. Un petit classement avec le nombre de
points et j'ai mon classement automatiquement.
J'espère avoir été clair,
Je vous remercie par avance pour votre aide
Bonne soirée
Cb1moa
Bonjour,
C'est ce que j'ai fait jusqu'à présent mais comme je supprime régulièrement les fichiers "clubs" pour les reconstruire, cette fonction se perd à chaque mise à jour.
Pour être clair, voici ce que je fais :
1) j'ai un fichier source dans lequel sont rentrés tous les matchs du championnat (20 équipes) avec les résultats;
2) de ce fichier j'extrait les 20 clubs pour avoir le détail de chacun (les feuilles sont notées de 1 à 20 je ne mets pas les noms des clubs).
3) j'ai un fichier récap qui me donne les classements automatiquement en extrayant les données de "Q7:X7".
Voici comment cela fonctionne :
1) la saisie des matchs et des scores est manuelle
2) la création des feuilles "clubs" se fait à travers une fonction VBA, je sélectionne le club et la feuille se créée.
3) je fais des copier-coller de chaque feuille pour faire mon classement final.
Après chaque journée, je supprime les feuilles et je relance la procédure et c'est un peu pénible de refaire à chaque fois 20 copier-coller. C'est pourquoi j'espérais pouvoir automatiser cette étape.
Avatar
Michel__D
Bonjour,
Le 07/11/2019 à 11:14, cb1moa a écrit :
Le mercredi 06 Novembre 2019 à 20:20 par Cb1moa :
Bonsoir à tous,
J'aurais de nouveau besoin de vos lumières. je ne doute pas que vous
avez la solution à mon problème. J'ai trouvé quelques
références sur Internet de sujets similaires mais ne maitrisant
pas le VBA, je ne comprends pas bien la construction des formules et du coup

je
n'arrive pas à les adapter.
Voici mon besoin :
- J'ai un classeur qui est composé de 20 feuilles nommées de
"e;feuil1"e; à "e;feuil20"e;. Chaque feuille
correspond à un club.
- Dans chaque feuille, les lignes reprennent les différents matchs de la
saison avec les résultats.
- Dans chaque feuille, j'ai créé un espace "e;Q7:X7"e;
dans lequel on retrouve la compilation des résultats du club :
"e;nbre de matchs joués"e;, "e;nbre de matchs
gagnés"e;, "e;nbre de matchs nuls"e;.... il m'est donc
possible de savoir pour chaque club leur nombre de points et le nombre de but
encaissés et mis.
- J'aimerais donc récupérer l'espace "e;Q7:X7"e; de
chaque feuille afin de compiler tout ça dans une seule feuille
"Récap" qui me présenterait les résultats de
toutes les équipes d'un seul coup. Un petit classement avec le nombre de
points et j'ai mon classement automatiquement.
J'espère avoir été clair,
Je vous remercie par avance pour votre aide
Bonne soirée
Cb1moa

Bonjour,
C'est ce que j'ai fait jusqu'à présent mais comme je supprime régulièrement les
fichiers "clubs" pour les reconstruire, cette fonction se perd à chaque mise à
jour.
Pour être clair, voici ce que je fais :
1) j'ai un fichier source dans lequel sont rentrés tous les matchs du
championnat (20 équipes) avec les résultats;
2) de ce fichier j'extrait les 20 clubs pour avoir le détail de chacun (les
feuilles sont notées de 1 à 20 je ne mets pas les noms des clubs).
3) j'ai un fichier récap qui me donne les classements automatiquement en
extrayant les données de "Q7:X7".
Voici comment cela fonctionne :
1) la saisie des matchs et des scores est manuelle
2) la création des feuilles "clubs" se fait à travers une fonction VBA, je
sélectionne le club et la feuille se créée.
3) je fais des copier-coller de chaque feuille pour faire mon classement final.
Après chaque journée, je supprime les feuilles et je relance la procédure et
c'est un peu pénible de refaire à chaque fois 20 copier-coller. C'est pourquoi
j'espérais pouvoir automatiser cette étape.

Modifie ton VBA pour ne pas supprimer les feuilles mais juste effacer leur contenu.
Avatar
MichD
Bonjour,
Fichier exemple ici : https://www.cjoint.com/c/IKhmn7OT1cj
La macro proposée est dans le module1
'-------------------------------
Sub Test()
Dim Sh As Worksheet, DerLig As Long
Dim A As Long, MySheet As Worksheet
Dim Lig As Long
'Récap = Nom onglet de la feuille résultat
Set MySheet = Worksheets("Récap")
MySheet.Range("Q:X").Clear
'Dans mon exemple, la plage Q:X de chaque feuille
'est copiée vers la feuille destination vers les
'mèmes colonnes.
Application.ScreenUpdating = False
Application.EnableEvents = False
For Each Sh In ThisWorkbook.Worksheets
If LCase(Sh.Name) <> LCase("Récap") Then
A = A + 1
With Sh
With .Range("Q:X")
DerLig = .Find(What:="*", _
LookIn:=xlValues, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Row
End With
If A = 1 Then
Sh.Range("Q1:X1").Copy MySheet.Range("Q1")
End If
With MySheet.Range("Q:X")
Lig = .Find(What:="*", _
LookIn:=xlValues, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Row + 1
End With
End With
With Sh.Range("Q2:X" & DerLig)
.Copy MySheet.Range("Q" & Lig)
End With
End If
Next
With MySheet
With Range("Q:X")
.EntireColumn.AutoFit
End With
End With
Application.ScreenUpdating = True
Application.EnableEvents = True
End Sub
'-------------------------------
MichD
Avatar
MichD
Même la procédure générale, mais au lieu de cliquer sur un bouton, la
feuille "Recap" se met à jour automatiquement. Regarde dans le
Thisworkbook du classeur, les 2 procédures événementielles.
https://www.cjoint.com/c/IKhowLt67kj
MichD
Avatar
cb1moa
Le mercredi 06 Novembre 2019 à 20:20 par Cb1moa :
Bonsoir à tous,
J'aurais de nouveau besoin de vos lumières. je ne doute pas que vous
avez la solution à mon problème. J'ai trouvé quelques
références sur Internet de sujets similaires mais ne maitrisant
pas le VBA, je ne comprends pas bien la construction des formules et du coup je
n'arrive pas à les adapter.
Voici mon besoin :
- J'ai un classeur qui est composé de 20 feuilles nommées de
"e;feuil1"e; à "e;feuil20"e;. Chaque feuille
correspond à un club.
- Dans chaque feuille, les lignes reprennent les différents matchs de la
saison avec les résultats.
- Dans chaque feuille, j'ai créé un espace "e;Q7:X7"e;
dans lequel on retrouve la compilation des résultats du club :
"e;nbre de matchs joués"e;, "e;nbre de matchs
gagnés"e;, "e;nbre de matchs nuls"e;.... il m'est donc
possible de savoir pour chaque club leur nombre de points et le nombre de but
encaissés et mis.
- J'aimerais donc récupérer l'espace "e;Q7:X7"e; de
chaque feuille afin de compiler tout ça dans une seule feuille
"Récap" qui me présenterait les résultats de
toutes les équipes d'un seul coup. Un petit classement avec le nombre de
points et j'ai mon classement automatiquement.
J'espère avoir été clair,
Je vous remercie par avance pour votre aide
Bonne soirée
Cb1moa
Bonjour,
C'est super, on tient le bon bout. ça fonctionne parfaitement dans ton fichier.
Pour ce qui me concerne, il me dit qu'il y a un problème "Erreur d'exécution 91 : Variable objet ou variable de bloc With non défini"
Selon le debuggeur, ça semble merder dans cette zone :
With .Range("Q:X")
DerLig = .Find(What:="*", _
LookIn:=xlValues, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Row
End With
Est-ce que cela pourrait venir du fait que je n'ai qu'une seule ligne à copier soit 8 cases ?
J'ai également modifié la partie suivante en mettant "Q6:X6" qui sont mes entêtes et "B6" la position du copier dans mon fichier "Récap". Est-ce que cela peut être la source du problème ?
If A = 1 Then
Sh.Range("Q6:X6").Copy MySheet.Range("B6")
End If
Merci encore pour ton aide,
Cb1moa
Avatar
MichD
Un fichier exemple avec les données débutant en ligne 6
https://www.cjoint.com/c/IKht3lVAA0j
Tu peux actionner la macro avec un bouton de commande ou comme dans le
fichier soumis à l'aide des procédures événementielles du ThisWorkbook.
Dans ton classeur, tu dois avoir une feuille dont l'onglet s'appelle :
Récap. Tu n'as qu'à faire un copier-coller de la procédure test dans un
module standard + le code du thisworkbook dans celui de ton classeur.
MichD
Avatar
cb1moa
Le mercredi 06 Novembre 2019 à 20:20 par Cb1moa :
Bonsoir à tous,
J'aurais de nouveau besoin de vos lumières. je ne doute pas que vous
avez la solution à mon problème. J'ai trouvé quelques
références sur Internet de sujets similaires mais ne maitrisant
pas le VBA, je ne comprends pas bien la construction des formules et du coup je
n'arrive pas à les adapter.
Voici mon besoin :
- J'ai un classeur qui est composé de 20 feuilles nommées de
"e;feuil1"e; à "e;feuil20"e;. Chaque feuille
correspond à un club.
- Dans chaque feuille, les lignes reprennent les différents matchs de la
saison avec les résultats.
- Dans chaque feuille, j'ai créé un espace "e;Q7:X7"e;
dans lequel on retrouve la compilation des résultats du club :
"e;nbre de matchs joués"e;, "e;nbre de matchs
gagnés"e;, "e;nbre de matchs nuls"e;.... il m'est donc
possible de savoir pour chaque club leur nombre de points et le nombre de but
encaissés et mis.
- J'aimerais donc récupérer l'espace "e;Q7:X7"e; de
chaque feuille afin de compiler tout ça dans une seule feuille
"Récap" qui me présenterait les résultats de
toutes les équipes d'un seul coup. Un petit classement avec le nombre de
points et j'ai mon classement automatiquement.
J'espère avoir été clair,
Je vous remercie par avance pour votre aide
Bonne soirée
Cb1moa
Bonsoir MichD,
Je ne comprends pas, ça marche parfaitement sur ton fichier et ça plante lorsque je le copie dans le mien.
J'ai quelques modifications à faire dans mon fichier, dès que j'ai un moment je te l'envoie. Si tu as le temps bien sûr j'aimerais que tu essaie de voir ce qui ne fonctionne pas.
C'est bizarre, ça plante toujours : "Erreur d'exécution 91 : Variable objet ou variable de bloc With non défini"
Selon le debuggeur, c'est dans cette zone :
With .Range("Q:X")
DerLig = .Find(What:="*", _
LookIn:=xlValues, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Row
End With
Merci d'avance,
Ludovic
Avatar
MichD
Au lieu de publier seulement une partie du code, publie l'ensemble de la
procédure "Test" du module en spécifiant le nom de la feuille "Récap" si
tu as modifié son nom.
MichD
Avatar
Michel__D
Bonjour,
Le 08/11/2019 à 21:08, cb1moa a écrit :
Le mercredi 06 Novembre 2019 à 20:20 par Cb1moa :
Bonsoir à tous,
J'aurais de nouveau besoin de vos lumières. je ne doute pas que vous
avez la solution à mon problème. J'ai trouvé quelques
références sur Internet de sujets similaires mais ne maitrisant
pas le VBA, je ne comprends pas bien la construction des formules et du coup

je
n'arrive pas à les adapter.
Voici mon besoin :
- J'ai un classeur qui est composé de 20 feuilles nommées de
"e;feuil1"e; à "e;feuil20"e;. Chaque feuille
correspond à un club.
- Dans chaque feuille, les lignes reprennent les différents matchs de la
saison avec les résultats.
- Dans chaque feuille, j'ai créé un espace "e;Q7:X7"e;
dans lequel on retrouve la compilation des résultats du club :
"e;nbre de matchs joués"e;, "e;nbre de matchs
gagnés"e;, "e;nbre de matchs nuls"e;.... il m'est donc
possible de savoir pour chaque club leur nombre de points et le nombre de but
encaissés et mis.
- J'aimerais donc récupérer l'espace "e;Q7:X7"e; de
chaque feuille afin de compiler tout ça dans une seule feuille
"Récap" qui me présenterait les résultats de
toutes les équipes d'un seul coup. Un petit classement avec le nombre de
points et j'ai mon classement automatiquement.
J'espère avoir été clair,
Je vous remercie par avance pour votre aide
Bonne soirée
Cb1moa

Bonsoir MichD,
Je ne comprends pas, ça marche parfaitement sur ton fichier et ça plante lorsque
je le copie dans le mien.
J'ai quelques modifications à faire dans mon fichier, dès que j'ai un moment je
te l'envoie. Si tu as le temps bien sûr j'aimerais que tu essaie de voir ce qui
ne fonctionne pas.
C'est bizarre, ça plante toujours : "Erreur d'exécution 91 : Variable objet ou
variable de bloc With non défini"
Selon le debuggeur, c'est dans cette zone :
With .Range("Q:X")
DerLig = .Find(What:="*", _
LookIn:=xlValues, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Row
End With
Merci d'avance,
Ludovic

Je vois que tu veux absolument utiliser le VBA, mais dans la mesure ou la feuille 'Récap' n'est pas
supprimé, une solution avec formule existe à toi de voir.