Coller automatiquement une valeur d'une cellule

Bonjour,

- le tri ne se fait pas et je ne vois pas où est mon erreur

Le tri ne se fera pas car les cellules contiennent des formules faisant référence à des cellules dans des colonnes ne faisant pas partie de la zone de tri. Pour ça, il te faut revoir la conception de ta feuille "DEUXIEME TOUR". Je ne sais pas si tu as vu mais pour que le tri puisse se faire sur la feuille "PREMIER TOUR" j'en ai modifié la conception

- le "coller/copier" se fait parfaitement comme dans "premier tour" sauf pour la même cellule en fin d'une ligne que l'on retrouve en début d'une nouvelle ligne

Il te faut changer la valeur 8 pour 7 dans la ligne de code ci-dessous :

If Cel.Column = 8 Then Range("B1").Select

Re

Pour l'aspect "copier/coller", je suis impardonnable j'avais indiqué dans le code qu'il fallait changer la valeur de Cel.Colum en cas d'ajout ou de suppression de colonnes...

-Je ne sais pas si tu as vu mais pour que le tri puisse se faire sur la feuille "PREMIER TOUR" j'en ai modifié la conception

J'ai bien vu que tu avais mis les formules de la colonne C directement dans la colonne J rendant inutile la colonne C... ET que si j'ai bien compris le tri qui portait que la zone bleu clair I et J, ce qui me parait tout à fait logique.

- Le tri ne se fera pas car les cellules contiennent des formules faisant référence à des cellules dans des colonnes ne faisant pas partie de la zone de tri.

Sincèrement, je ne vois pas ou je ne comprends pas (l'un n'empêche pas l'autre )la différence entre la première et la seconde feuille !

Cela doit être énorme... pourrais-tu m'en dire plus ?

Excellente soirée

Bonjour,

Ce matin, j'ai eu l'idée de copier la feuille "premier tour" qui fonctionne parfaitement puis sans rien modifier, la tester (premier tour (2)

Surprise (pour moi) tout fonctionne SAUF le tri et cela proviendrait de

Fe.Cells(5, 4).Select

.

Dans ma logique, je me dis donc que c'est là le même problème avec la feuille "deuxième tour".

Si quelqu'un pouvait m'expliquer à quoi correspond le "5 et le 4" j'aurais peut -être la solution, mais si c'est une mauvaise piste, autant me le dire !

Excellente journée

Tonthon

Bonjour,

Comme tu peux le voir dans le code que je t'ai donné, il y a cette ligne :

Set Fe = Worksheets("PREMIER TOUR")

la variable Fe fait référence à la feuille "PREMIER TOUR" que j'ai entré en "dur" donc, le mieux est de remplacer cette ligne de code par celle-ci (tu peux le faire dans les deux modules de feuille) :

Set Fe = ActiveSheet

car tu ne peux pas sélectionner une cellule dans une feuille autre que la feuille active

Re

J'avais remarqué le "Fe" sans toutefois aller plus loin.

Merci pour tes précisions qui expliquent le pourquoi du non fonctionnement que je n'aurais jamais trouvé tout seul.

Ce matin, pas trop de temps pour corriger.

Je reviendrai ici pour vous dire, je pense que..... tout est ok !

Bonjour à tous,

Je pensais avoir répondu et je m'étonnais de ne pas avoir eu de réaction... et je viens de découvrir que je n'ai pas dû valider ma réponse

J'ai apporté les modifications .... sans succès.

Autre essai, j'ai refait le deuxième tour en conservant strictement les mêmes emplacements que le "premier tour"....sans succès

J'ai dû faire une autre tentative dont je ne me rappelle les conditions.....sans succès non plus.

Je ne comprends pas et je ne vois pas où est l'erreur !

Nous avons eu un vote cette semaine à mon club photo et c'est flagrant que ce tableur faciliterait la saisie des votes et un super gagne-temps.

Excellente journée

Bonjour,

Comme dis plus haut, si tu veux pouvoir effectuer un tri il faut impérativement que les colonnes ayant des formules dont dépendent les colonnes que tu veux trier fassent parties de la zone de tri !

Re

Je me suis fourvoyé en restant le nez collé sur la première feuille dont la zone de tri ne comportait que 2 colonnes !

C'est clair et tellement évident mais j'étais littéralement bloqué sur le code de la première page.

Pour faire simple et

Je vais pouvoir présenter ce tableur pour ne pas dire ton tableur à mon club.

Bon appétit

Tonthon

Merci et bon appétit à toi aussi

Bonjour

Le tableur fonctionne super bien mais j'ai essayé d'y apporter une amélioration pour avoir AUTOMATIQUEMENT les n.photos du premier tour reportées dans la zone de saisie grise du second tour..

J'ai fait cela avec "copie avec liaison" = cela marche la première fois mais dès lors un changement de classement dans "premier tour", cela ne le fait plus....

Le tableur reprend cela, c'est seulement si cela est un plaisir que je suis preneur de la solution !

Il y a un second souci pour avoir un tri automatique expliqué dans le tableur.

Excellente soirée

Bonjour,

Procédure événementielle "Worksheet_Change()" donc, mettre dans le module de la feuille "DEUXIEME TOUR (2)". La procédure fonctionne quand on modifie la valeur en T3. Les numéros des photos sont triés du plus grand au plus petit et seulement le nombre voulu est inscrit. Si il y a moins de photos choisies que le nombre demandé, c'est le contenu du tableau qui sera utilisé :

Private Sub Worksheet_Change(ByVal Target As Range)

    Dim Plage As Range
    Dim Cel As Range
    Dim Tbl() As Integer
    Dim I As Integer
    Dim J As Integer
    Dim K As Integer
    Dim Tempo1 As Integer
    Dim Tempo2 As Integer

    If Target.Address(0, 0) <> "T3" Then Exit Sub
    If Target.Value > 36 Then MsgBox "Maximum 36 !": Exit Sub

    Range("P7:U12").ClearContents

    With Worksheets("PREMIER TOUR"): Set Plage = .Range(.Cells(5, 10), .Cells(.Rows.Count, 10).End(xlUp)): End With

    For Each Cel In Plage

        If Cel.Value > 0 Then

            I = I + 1: ReDim Preserve Tbl(1 To 2, 1 To I)
            Tbl(1, I) = Cel.Offset(, -1).Value
            Tbl(2, I) = Cel.Value

        End If

    Next Cel

    'Tri décroissant dans le tableau sur la seconde colonne (NBFois citée)
    For I = 1 To UBound(Tbl, 2) - 1: For J = I + 1 To UBound(Tbl, 2)

        If Tbl(2, I) < Tbl(2, J) Then

            Tempo1 = Tbl(1, J): Tempo2 = Tbl(2, J)
            Tbl(1, J) = Tbl(1, I): Tbl(2, J) = Tbl(2, I)
            Tbl(1, I) = Tempo1: Tbl(2, I) = Tempo2

        End If

    Next J, I

    'si le tableau a été initialisé, colle les résultat dans la grille
    If Not (Not Tbl) Then

        I = 7: J = 16 'commence à P7
        For K = 1 To IIf(Target.Value > UBound(Tbl, 2), UBound(Tbl, 2), Target.Value)

            Cells(I, J).Value = Tbl(1, K) 'la colonne 1 contient les numéros des photos
            I = I + 1
            If I > 12 Then I = 7: J = J + 1

        Next K

    End If

End Sub

Bonjour Theze et à tous

Bingo, j'ai dû omettre de valider ma réponse de remerciements car je ne la retrouve pas.... et j'en suis désolé.

Entre temps, j'étais à la recherche d'une ultime amélioration à savoir l'affichage dans l'ordre croissant dans "second tour" -il me semble le lire dans le code mais cela ne marche pas-.

J'ai trouvé une solution "à ma façon" via une macro mais je pense que cela peut être repris beaucoup plus simplement dans un code....

Sinon, j'ai fait de multiples essais sans avoir rencontré le moindre bug (c'est important dans le cadre d'un vote pour des photos)

Excellente journée et bonne fêtes de fin d'année

Tonthon

Bonjour,

Remplace le code précédent de la procédure événementielle "Worksheet_Change()" par celui-ci-dessous. Un premier tri est fait sur les numéros des photos les plus choisies puis effectue un second tri sur les numéros des photos :

Private Sub Worksheet_Change(ByVal Target As Range)

    Dim Plage As Range
    Dim Cel As Range
    Dim Tbl() As Integer
    Dim TblTri() As Integer
    Dim I As Integer
    Dim J As Integer
    Dim K As Integer
    Dim Tempo1 As Integer
    Dim Tempo2 As Integer

    If Target.Address(0, 0) <> "T3" Then Exit Sub
    If Target.Value > 36 Then MsgBox "Maximum 36 !": Exit Sub

    Range("P7:U12").ClearContents

    With Worksheets("PREMIER TOUR"): Set Plage = .Range(.Cells(5, 10), .Cells(.Rows.Count, 10).End(xlUp)): End With

    For Each Cel In Plage

        If Cel.Value > 0 Then

            I = I + 1: ReDim Preserve Tbl(1 To 2, 1 To I)
            Tbl(1, I) = Cel.Offset(, -1).Value
            Tbl(2, I) = Cel.Value

        End If

    Next Cel

    'si le tableau a été initialisé...
    If Not (Not Tbl) Then

        '...tri en décroissant dans le tableau sur la seconde colonne (NBFois citée)...
        For I = 1 To UBound(Tbl, 2) - 1: For J = I + 1 To UBound(Tbl, 2)

            If Tbl(2, I) < Tbl(2, J) Then

                Tempo1 = Tbl(1, J): Tempo2 = Tbl(2, J)
                Tbl(1, J) = Tbl(1, I): Tbl(2, J) = Tbl(2, I)
                Tbl(1, I) = Tempo1: Tbl(2, I) = Tempo2

            End If

        Next J, I

        I = 0

        '...transfère les numpéro des photos les plus tirées...
        For K = 1 To IIf(Target.Value > UBound(Tbl, 2), UBound(Tbl, 2), Target.Value)

            I = I + 1: ReDim Preserve TblTri(1 To I)
            TblTri(I) = Tbl(1, K)

        Next K

        '...puis tri sur les numéros de photos du plus grand au plus petit
        For I = 1 To UBound(TblTri) - 1: For J = I + 1 To UBound(TblTri)

            If TblTri(I) < TblTri(J) Then

                Tempo1 = TblTri(J)
                TblTri(J) = TblTri(I)
                TblTri(I) = Tempo1

            End If

        Next J, I

        'inscrit les résultats dans la grille
        I = 7: J = 16 'commence à P7
        For K = 1 To UBound(TblTri)

            Cells(I, J).Value = TblTri(K)
            I = I + 1
            If I > 12 Then I = 7: J = J + 1

        Next K

    End If

End Sub

Voici le classeur fonctionnel :

Bonjour Theze

Je vois que tu es en ligne et je viens de tester vite fait le code avant ton envoi "tableur rectifié".

C'est presque parfait puisque j'ai directement l'affichage en décroissant.... mille fois mieux que mon bricolage.

Toutefois, c'est possible de l'avoir en ordre CROISSANT (la difficulté sont les zéros.....) c'est possible tant mieux sinon tant pis

Tonthon

Rechercher des sujets similaires à "coller automatiquement valeur"