Macro à améliorer

jacky49

XLDnaute Impliqué
bonsoir le forum,

Voici un fichier que j'ai récupéré sur le forum dont la macro a été faite par Gruick mais qui me pose un petit souci.(même 2).Un dans la macro et l'autre au niveau du somprod.
J'explique, j'ai voulu mettre une formule en colonne J pour eviter à avoir a retaper 2 fois le score ex: en J3=I4 et J4=I3 mais quand je fais le tirage, cela m'efface les formules car dans la macro, cela range le tirage aléatoire et efface les cellules,j'ai donc essayé de ne pas faire effacer les colonnes ou je mets les formules mais sans y parvenir.Donc si quelqu'un avait une idée,ce serait sympa et mon 2ème souci est que j'ai voulu mettre cette formule en colonne J: ex: en J3: =si(I4="";"";I4) mais la fonction somprod qui est en colonne C ne fonctionne plus.
merci de l'aide que vous pourrez m'apporter.
Voici le code ou se situe l'effaccement.
Code:
Sub Tirage5()
' Tirage5 Macro
' Macro enregistrée le 21/04/06 par Gruick
' Touche de raccourci du clavier: Option+Cmd+r
Application.ScreenUpdating = False
With Application
    .Calculation = xlManual
End With
z = Range("A65536").End(xlUp).Row
If z Mod 2 = 1 Then 'Si nb de joueurs est impair
    z = z + 1
    Cells(z, 1) = "xxxxxxxx" 'Joueur fantôme
End If
ReDim Preserve TTirage(z)
'Effacements et initialisations
[COLOR="Red"]Range("F3:AI46" & z).ClearContents[/COLOR]
d = "" 'd est la variable qui mémorise le match proposé
For i = 8 To 4 * 4 + 8 Step 4 'Compteur de partie
For a = 3 To z 'Compteur de noms
re:
    Randomize
    t = Int((z * Rnd) + 1)
    If t <= 2 Then GoTo re
    TTirage(a) = Cells(t, 1).Value
    If a > 3 Then 'Nom déjà tiré précédemment ?
        For tt = 3 To a - 1
            If TTirage(a) = TTirage(tt) Then GoTo re
        Next tt
    End If
    If a Mod 2 = 0 Then 'Mise en ordre alpha
        If TTirage(a) < TTirage(a - 1) Then
            prem = TTirage(a)
            TTirage(a) = TTirage(a - 1)
            TTirage(a - 1) = prem
        End If
        y = y + 1 'Proposition du match
        ReDim Preserve TDoublons(y + 1)
        TDoublons(y + 1) = TTirage(a - 1) & "/" & TTirage(a)
        If TDoublons(y + 1) = d Then 'Comparaison avec l'avant dernier match,
        'si le même, bloquage donc recommencer tout le tirage de la partie
            For td = (y + 1) - (a - 3) / 2 To y + 1
                TDoublons(td) = ""
            Next td
            a = 2
            GoTo re
        End If
        If y > 2 Then 'Match déja tiré ? (Doublon de match)
            For td = 2 To y
                If TDoublons(y + 1) = TDoublons(td) Then
                    d = TDoublons(y + 1) 'd mémorise ce match
                    TDoublons(y + 1) = ""
                    TTirage(a) = ""
                    TTirage(a - 1) = ""
                    a = a - 1
                    GoTo re 'recommencer le tirage du match, donc du dernier adversaire
                End If
            Next td
        End If
    End If
Next a 'Nom suivant
For r = 3 To z
    Cells(r, i) = TTirage(r)
Next r
Cells(3, i + 3).FormulaR1C1 = "=IF(RC[-2]>RC[-1],1,0)"
Cells(3, i + 3).Copy
Range(Cells(4, i + 3), Cells(z, i + 3)).PasteSpecial Paste:=xlFormulas
Next i 'Partie suivante
Application.ScreenUpdating = True
Range("A1").Select
With Application
    .Calculation = xlAutomatic
End With
End Sub
 

Pièces jointes

  • Petanque à Utiliser - Copie.zip
    29.8 KB · Affichages: 27
  • Petanque à Utiliser - Copie.zip
    29.8 KB · Affichages: 29
  • Petanque à Utiliser - Copie.zip
    29.8 KB · Affichages: 30

phlaurent55

Nous a quittés en 2020
Repose en paix
Re : Macro à améliorer

Bonjour jacky:
dans ta macro tu as la ligne suivante:
Code:
[COLOR="Red"][B]Range("F3:AI46" & z).ClearContents[/B][/COLOR]
remplace-la par
Code:
[COLOR="Blue"][B]Range("F3:AI" & z).ClearContents[/B][/COLOR]
Pour le reste de ta question, j'ai pas très bien compris
 

Bebere

XLDnaute Barbatruc
Re : Macro à améliorer

bonjour jacky,Laurent
oublie cette formule=si(I4="";"";I4)
écrit =i4
tu auras 0 affiché
c'est fait dans le code

à bientôt
 

Pièces jointes

  • Petanque à Utiliser - Copie.zip
    30.9 KB · Affichages: 29
  • Petanque à Utiliser - Copie.zip
    30.9 KB · Affichages: 31
  • Petanque à Utiliser - Copie.zip
    30.9 KB · Affichages: 29

jacky49

XLDnaute Impliqué
Re : Macro à améliorer

bonsoir phlaurent55,Bebere,le forum,

merci ,car ça fonctionne mais est il possible de faire pareil avec ce fichier joint.
merci d'avance
jacky
 

Pièces jointes

  • Petanque(à la mélée).zip
    34.7 KB · Affichages: 36

jacky49

XLDnaute Impliqué
Re : Macro à améliorer

bonjou le forum, bebere,

c'est dans cette mecro qu'il faut changer le code pour qu'il n'efface pas les colonnes I,M,Q,U et Y.
voici le code
Code:
Sub Tirage1()
' Tirage7 Macro
' Macro enregistrée le 21/04/06 par Gruick
' Touche de raccourci du clavier: Option+Cmd+r
'Application.ScreenUpdating = False
z = Range("A65536").End(xlUp).Row
If z Mod 2 = 1 Then 'Si nb de joueurs est impair
    z = z + 1
    Cells(z, 1) = "xxxxxxxx" 'Joueur fantôme
End If
ReDim Preserve TTirage(z)
'Effacements et initialisations
[COLOR="Red"]Range("E3:z" & z).ClearContents[/COLOR]
For a = 3 To z 'Compteur de noms
re:
    Randomize
    t = Int((z * Rnd) + 1)
    If t <= 2 Then GoTo re
    TTirage(a) = Cells(t, 1).Value
    If a > 3 Then 'Nom déjà tiré précédemment ?
        For tt = 3 To a - 1
            If TTirage(a) = TTirage(tt) Then GoTo re
        Next tt
    End If
Next a 'Nom suivant
For r = 3 To z
    Cells(r, 7) = TTirage(r)
Next r
End Sub
et plus précisement le code en couleur rouge.
merci d'avance
jacky
 

Bebere

XLDnaute Barbatruc
Re : Macro à améliorer

bonjour Jacky
dans le code en dessous de
'Effacements et initialisations
'supprime
Range("E3:E" & z).ClearContents
'ajoute
Efface
ajoute dans un module
Sub Efface()
Dim BigRange As Range

z = Range("A65536").End(xlUp).Row

Set BigRange = Union(Range("E3:E" & z), Range("G3:H" & z), Range("K3:L" & z), _
Range("O3:p" & z), Range("S3:T" & z), Range("W3:X" & z))

BigRange.ClearContents

Set BigRange = Nothing

End Sub
à bientôt
 

Gruick

XLDnaute Accro
Re : Macro à améliorer

Bonjour,

C'est par hasard que je suis tombé sur ce fil, dans lequel je suis cité.
J'ai recherché dans mes archives le programme initial, qui marche encore parfaitement.
Les erreurs sont donc dans l'adaptation, la fameuse ligne rouge a sans doute été changée, à l'origine c'est
Code:
Range("F3:AA" & z).ClearContents
limite du tableau principal. A adapter au cas présent.
Pour le reste, les scores sont évidemment mis "à la main", mais le calcul des points et le classement par macro qui met la formule des points. C'est pour cela que j'efface tout pour le premier tour.
L'autre partie du tableau traque les "doublons", chaque concurrent ne doit être opposé qu'une fois au même adversaire. Recommencer le tirage incriminé jusqu'à satisfaction.

Je tenais à faire cette petite mise au point.

Vous m'avez fait douter les amis, j'avais les boules...ah ! ah ! En plus d'être moi-même cochonnet.

Gruick
 
Dernière édition:

jacky49

XLDnaute Impliqué
Re : Macro à améliorer

bonjour le forum, Bebere, Gruick,
Bebere,un grand Merci car cela fonctionne impeccable et merci aussi à Gruick à qui je dois cette macro d'origine.Je voulais expliquer pourquoi je ne veux pas effacer les colonnes I,M,Q,U et Y car j'ai mis les formules et qu'ensuite, je les masquerais pour faciliter le remplissage des cellules à la personne qui se trouve au secrétariat.
merci encore
jacky
 

Discussions similaires

Réponses
11
Affichages
308
Réponses
5
Affichages
202
Réponses
2
Affichages
115

Statistiques des forums

Discussions
312 367
Messages
2 087 644
Membres
103 627
dernier inscrit
nabil