XL 2010 Mettre en place une Boucle for..next

deps

XLDnaute Junior
Bonjour

Dans le fichier , j'ai une base Joueurs, et une base Clubs
Dans la feuille recherche je souhaiterais qu'n cliquant sur le bouton GO que
la macro recherche tous les clubs de la feuille Clubs et les copie dans la feuille recherche
puis trouve les joueurs et remplisse les infos.

je pense qu'une boucle for .. next permettrait d'aller chercher ces infos mais je suis incapable de la mettre en place.

Je vous remercie de votre aide
Cordialement

deps
 

Pièces jointes

  • joueur.xlsm
    22.5 KB · Affichages: 49

deps

XLDnaute Junior
Bonjour JBARBE

merci pour t'être penché sur mon problème.
Est ce possible que le joueur 1 et le joueur 2 de la même équipe soient sur la même ligne en feuille recherche ?
je pensais au départ utiliser index/equiv dans une boucle for...next mais tu as réussi autrement à récupérer les infos.

merci
Deps
 

deps

XLDnaute Junior
Bonsoir

Merci, c'est exactement ce que je voulais et en plus le résultats est rapide après le clic.!

Pour avoir l'âge à 2 décimales j'ai modifié une ligne de code comme suit
Code:
.Cells(i, 4) = (Now() - (Sheets("base_Joueur").Cells(j, 6))) / 365
il y a peut-être une façon plus rapide avec datedif ou autre ?? mais celle-ci fonctionne.

Par contre pour la moyenne en colonne G, j'ai tenté une formule sans succès
j'ai mis ce code en fin de procédure
Code:
For p = 3 To 65536
' Si la colonne (B) est vide alors sortir de la procédure
 If Sheets("RECHERCHE").Cells(p, 2) = "" Then  Exit Sub
 End If
' la Cellule "G"p = moyenne (cellule "Dp";cellule "Fp")
   Cells(p, 7).FormulaArray = "= Average(.Cells(p, 4), .Cells(p, 6))"
Next p

Cordialment
Deps
 

JBARBE

XLDnaute Barbatruc
Re,

Option Explicit

Sub joueurs()
Dim i As Long, j As Long, l As Long, p As Long, X As Long, K As Long, V As Long, n As Long, W As Long
X = 3 'permet d'incrémenter la boucle i
K = 2 'permet d'incrémenter la boucle j
V = 2 'permet d'incrémenter la boucle l
Application.ScreenUpdating = False 'désactiver le rafraîchissement de l'écran avant la macro
Sheets("RECHERCHE").Range("A3:G65536").ClearContents 'suppression de la saisie
With Sheets("RECHERCHE")
For i = 3 To 65536
i = X 'garde la valeur de i malgré exit for

For j = 2 To 65536
j = K 'garde la valeur de j malgré exit for
W = 0 'remet la valeur de W qui était à 1 à 0

For l = 2 To 65536 ' boucle pour la feuille (BASE_club)
l = V 'garde la valeur de l malgré exit for
If Sheets("base_Joueur").Cells(j, 1) = "" And .Cells(i + 1, 2) = "" Then 'si feuille(base_joueur)colonne A vide et
'feuille(RECHERCHE)colonne B et une ligne en dessous

For p = 3 To 65536 ' Boucle pour les moyennes
If .Cells(p, 2).Value = "" Then Exit Sub 'si feuille(RECHERCHE)colonne B vide alors sortie
.Cells(p, 7).Value = Application.Average(Range(.Cells(p, 4), .Cells(p, 6))) 'résultat colonne G de la moyenne
'des colonnes D & F

Next p
End If
If Sheets("BASE_club").Cells(l, 2) = "" Then 'si feuille(BASE_club)colonne B vide alors
V = 2 'boucle l revient au début (2)
ElseIf Sheets("BASE_club").Cells(l, 2) = Sheets("base_Joueur").Cells(j, 3) And Sheets("base_Joueur").Cells(j, 1) = 1 Then 'sinon
'si feuille(BASE_club)colonne B = feuille (base_Joueur)colonne C et feuille (base_Joueur)colonne A = 1 alors

.Cells(i, 2) = Sheets("BASE_club").Cells(l, 2) 'feuille(RECHERCHE)colonne B = feuille(BASE_club)colonne B
V = l + 1 'incrémentation de V + 1
Exit For 'sortie de la boucle l
ElseIf Sheets("BASE_club").Cells(l, 2) = Sheets("base_Joueur").Cells(j, 3) And Sheets("base_Joueur").Cells(j, 1) = 2 Then 'sinon
'si feuille(BASE_club)colonne B = feuille (base_Joueur)colonne C et feuille (base_Joueur)colonne A = 2 alors

Exit For 'sortie de la boucle l
Else 'sinon
V = l + 1 'incrémentation de V + 1
End If 'fin si
Next l 'boucle l

If Sheets("base_Joueur").Cells(j, 1) <> 2 Then X = i + 1 'feuille (base_Joueur)colonne A différente de 2 alors incrémentation de X (X+1)
If .Cells(i, 2) = Sheets("base_Joueur").Cells(j, 3) And Sheets("base_Joueur").Cells(j, 1) = 1 Then 'si feuille (RECHERCHE)colonne B
'et = à feuille (base_Joueur)colonne C et feuille (base_Joueur)colonne A = 1 alors

.Cells(i, 3) = Sheets("base_Joueur").Cells(j, 2) & " " & Sheets("base_Joueur").Cells(j, 1) & " " & " N° de maillot" & " " & Sheets("base_Joueur").Cells(j, 7)
'feuille (RECHERCHE)colonne C = feuille (base_Joueur)colonne B et feuille (base_Joueur)colonne A et N° de maillot et feuille (base_Joueur)colonne G
.Cells(i, 4) = (Now() - (Sheets("base_Joueur").Cells(j, 6))) / 365 'feuille(RECHERCHE)colonne D = aujourd'hui-feuille (base_Joueur)colonne F/365
ElseIf Sheets("base_Joueur").Cells(j, 1) = 2 Then 'sinon si feuille (base_Joueur)colonne A = 2 alors

For n = 3 To 65536 'boucle les joueurs de l'index 2
If Cells(n - 1, 2) = "" Then 'si une ligne en moins vide colonne B alors

For p = 3 To 65536 ' Boucle pour les moyennes
If .Cells(p, 2).Value = "" Then Exit Sub 'si feuille(RECHERCHE)colonne B vide alors sortie
.Cells(p, 7).Value = Application.Average(Range(.Cells(p, 4), .Cells(p, 6))) 'résultat colonne G de la moyenne
'des colonnes D & F

Next p

End If
If .Cells(n, 2) = Sheets("base_Joueur").Cells(j, 3) And .Cells(n, 5) = "" Then 'si feuille(RECHERCHE)colonne B = feuille (base_Joueur)colonne C
'et feuille (RECHERCHE)colonne E et vide alors

.Cells(n, 5) = Sheets("base_Joueur").Cells(j, 2) & " " & Sheets("base_Joueur").Cells(j, 1) & " " & " N° de maillot" & " " & Sheets("base_Joueur").Cells(j, 7)
'feuille (RECHERCHE)colonne E = feuille (base_Joueur)colonne B et feuille (base_Joueur)colonne A et N° de maillot et feuille (base_Joueur)colonne G
.Cells(n, 6) = (Now() - (Sheets("base_Joueur").Cells(j, 6))) / 365 'feuille(RECHERCHE)colonne F = aujourd'hui-feuille (base_Joueur)colonne F/365
W = 1 ' pour sortir de la boucle j
Exit For ' sortie de la boucle n
ElseIf .Cells(n, 2) <> Sheets("base_Joueur").Cells(j, 3) And .Cells(n, 2) = "" And .Cells(n, 5) = "" Then 'sinon si
'feuille(RECHERCHE)colonne B <> feuille (base_Joueur)colonne C et feuille (RECHERCHE)colonne B = vide alors

.Cells(n, 2) = Sheets("base_Joueur").Cells(j, 3) 'feuille (RECHERCHE)colonne B = feuille (base_Joueur)colonne C boucle j
.Cells(n, 5) = Sheets("base_Joueur").Cells(j, 2) & " " & Sheets("base_Joueur").Cells(j, 1) & " " & " N° de maillot" & " " & Sheets("base_Joueur").Cells(j, 7)
'feuille (RECHERCHE)colonne E = feuille (base_Joueur)colonne B et feuille (base_Joueur)colonne A et N° de maillot et feuille (base_Joueur)colonne G
.Cells(n, 6) = (Now() - (Sheets("base_Joueur").Cells(j, 6))) / 365 'feuille(RECHERCHE)colonne F = aujourd'hui-feuille (base_Joueur)colonne F/365
W = 1 ' pour sortir de la boucle j
Exit For ' sortie de la boucle n
End If ' fin si
Next n

Else ' sinon boucle j feuille (base_Joueur)
K = j + 1 ' incrémentation de K + 1
End If ' fin si
If Sheets("base_Joueur").Cells(j, 1) = 1 Or W = 1 Then 'feuille (base_Joueur) colonne A = 1 et W = 1 (pour sortir de la boucle j)
K = j + 1 'incrémentation de K + 1
Exit For 'sortie de la boucle j
End If ' fin si
Next j
Next i
End With
Application.ScreenUpdating = True
End Sub
 

Pièces jointes

  • joueurA.xlsm
    36.4 KB · Affichages: 32

Discussions similaires

Réponses
4
Affichages
151
  • Résolu(e)
Microsoft 365 Boucle FOR
Réponses
7
Affichages
247

Statistiques des forums

Discussions
312 153
Messages
2 085 804
Membres
102 981
dernier inscrit
fred02v