gratifiant > microsoft.* > microsoft.excel

Cb1moa (06/11/2019, 21h20)
Bonsoir à tous,
J'aurais de nouveau besoin de vos lumières. je ne doute pas que vous avez l
solution à mon problème. J'ai trouvé quelques références sur Internet de sujet
similaires mais ne maitrisant pas le VBA, je ne comprends pas bien l
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 saiso
avec les résultats.
- Dans chaque feuille, j'ai créé un espace "e;Q7:X7"e; dans lequel on retrouv
la compilation des résultats du club : "e;nbre de matchs joués"e;, "e;nbre d
matchs gagnés"e;, "e;nbre de matchs nuls"e;.... il m'est donc possible de savoi
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 d
compiler tout ça dans une seule feuille "Récap" qui me présenterait le
résultats de toutes les équipes d'un seul coup. Un petit classement avec l
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
Michel__D (07/11/2019, 11h48)
Le 06/11/2019 à 20:20, Cb1moa a écrit :
[..]
> Je vous remercie par avance pour votre aide
> Bonne soirée
> Cb1moa


Fais un copier avec liaison et regarde la formule obtenue.
cb1moa (07/11/2019, 12h14)
Le mercredi 06 Novembre 2019 à 20:20 par Cb1moa :
[..]
> 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 le
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 d
championnat (20 équipes) avec les résultats;
2) de ce fichier j'extrait les 20 clubs pour avoir le détail de chacun (le
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 e
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, j
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 e
c'est un peu pénible de refaire à chaque fois 20 copier-coller. C'est pourquo
j'espérais pouvoir automatiser cette étape.
Michel__D (07/11/2019, 12h36)
Bonjour,

Le 07/11/2019 à 11:14, cb1moa a écrit :
[..]
> 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.
MichD (07/11/2019, 14h15)
Bonjour,

Fichier exemple ici :

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
MichD (07/11/2019, 16h25)
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.



MichD
cb1moa (07/11/2019, 17h08)
Le mercredi 06 Novembre 2019 à 20:20 par Cb1moa :
[..]
> 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 9
: 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 à copie
soit 8 cases ?

J'ai également modifié la partie suivante en mettant "Q6:X6" qui sont me
entêtes et "B6" la position du copier dans mon fichier "Récap". Est-ce que cel
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
MichD (07/11/2019, 21h58)
Un fichier exemple avec les données débutant en ligne 6


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
cb1moa (08/11/2019, 22h08)
Le mercredi 06 Novembre 2019 à 20:20 par Cb1moa :
[..]
> 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 lorsqu
je le copie dans le mien.

J'ai quelques modifications à faire dans mon fichier, dès que j'ai un moment j
te l'envoie. Si tu as le temps bien sûr j'aimerais que tu essaie de voir ce qu
ne fonctionne pas.

C'est bizarre, ça plante toujours : "Erreur d'exécution 91 : Variable objet o
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
MichD (08/11/2019, 23h29)
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
Michel__D (09/11/2019, 15h08)
Bonjour,

Le 08/11/2019 à 21:08, cb1moa a écrit :
[..]
> 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.
Discussions similaires