Dans un tirage, insérer les numéros non sortis

herve80

XLDnaute Occasionnel
Bonjour à tous,

Dans le fichier ci-joint, on insère les numéros d'un tirage (de A2 à A21) , puis on va à la dernière ligne vierge du tableau, en-dessous du tirage précédent.
Avec F5, Excel (2003) génère une ligne de 70 numéros, de 1 à 70.
Avec F6, Excel élimine tous les numéros non sortis, et n'affiche que les 20 sortis dans le tirage (de A2 à A21).

Je voudrais l'inverse : que les 50 chiffres non sortis s'affichent à la place, et non les 20 du tirage en question.

Si quelqu'un pouvait faire ça s'il vous plait, je serai vraiment très content. :)
 

Pièces jointes

  • Keno - test B.xls
    35.5 KB · Affichages: 61
  • Keno - test B.xls
    35.5 KB · Affichages: 51
  • Keno - test B.xls
    35.5 KB · Affichages: 57

Jocelyn

XLDnaute Barbatruc
Re : Dans un tirage, insérer les numéros non sortis

Bonjour le forum,
Bonjour herve80,

hum hum je ne suis pas doué en macro mais peut être comme ça si j'ai bien compris
 

Pièces jointes

  • Keno - test B.xls
    35.5 KB · Affichages: 56
  • Keno - test B.xls
    35.5 KB · Affichages: 55
  • Keno - test B.xls
    35.5 KB · Affichages: 55

Papou-net

XLDnaute Barbatruc
Re : Dans un tirage, insérer les numéros non sortis

Bonjour herve80, Jocelyn,

Avec une seule boucle + la fonction Find :


Code:
Sub COMPARER()
Set plage = Range(Selection, Selection.End(xlToRight))
Set ref = Range("A2:A21")
For Each cel In plage
  Set achercher = ref.Find(cel.Value, LookIn:=xlValues, lookat:=xlWhole)
  If Not achercher Is Nothing Then cel.Value = ""
Next cel
End Sub
Bonne journée.

Cordialement.
 

herve80

XLDnaute Occasionnel
Re : Dans un tirage, insérer les numéros non sortis

Bonjour Jocelyn et Papou,

Jocelyn, ne m'en veut pas, j'ai choisis la solution de Papou. Merci quand même pour ton aide.
Et Papou : épatant ton code, franchement.
Je te remercie beaucoup pour ce code qui va me faire gagner beaucoup de temps et d'effort crois-le. :)
 

Si...

XLDnaute Barbatruc
Re : Dans un tirage, insérer les numéros non sortis

salut

le code suppose que tu écrives les numéros et sélectionnes la plage.
Si... tu veux aller plus vite, écris les numéros en C1:BT1.
Après la saisie de la date tu auras immédiatement les numéros absents avec ce code dans le Mopdule de la feuille
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
  If Target.Count > 1 Or Target.Column <> 2 Then Exit Sub
  Dim Est As Range, c As Range
  For Each c In Range("C1:BT1")
    Set Est = Range("A2:A21").Find(c, LookIn:=xlValues, LookAt:=xlWhole)
    If Est Is Nothing Then Cells(Target.Row, c.Column) = c.Value
  Next
End Sub

Je préfère déclarer les variables plutôt que d'en introduire qui compliquent l'écriture.
 

Papou-net

XLDnaute Barbatruc
Re : Dans un tirage, insérer les numéros non sortis

Bonjour à tous,

Bonjour Si...

Attention, utiliser l'événement Change est souvent source de complications et générateur de "tourne-en-rond" inutiles.

Pour s'en prémunir, il est toujours recommandable de commencer la procédure par Application.ScreenUpdating = False et de rétablir à True en fin procédure. Du moins c'est l'expérience acquise qui m'en a convaincu, même si dans ton cas ça fonctionne apparemment correctement. Mais un déroulement pas-à-pas montre bien que la procédure se déclenche plus souvent que nécessaire.

Pour gagner en rapidité, il vaut mieux réaliser la boucle sur la zone A2:B21 bien plus restreinte (20 cellules à analyser au lieu de 70).

Ce qui donne, en reprenant mon exemple :

Code:
Sub COMPARER()
Set plage = Range(Selection, Selection.End(xlToRight))
For Each cel In Range("A2:A21")
  Set achercher = plage.Find(cel.Value, LookIn:=xlValues, LookAt:=xlWhole)
  If Not achercher Is Nothing Then achercher.Value = ""
Next cel
End Sub
Je n'ai pas proposé cette modification à Hervé car le gain reste de l'ordre de l'infinitésimal pour ce cas précis, et qu'il avait mis son fil en résolu. Mais puisqu'on en parle, je l'ajoute.

Bonne journée.

Cordialement.
 

Si...

XLDnaute Barbatruc
Re : Dans un tirage, insérer les numéros non sortis

re

Si...
Attention, utiliser l'événement Change est souvent source de complications et générateur de "tourne-en-rond" inutiles.

Pour s'en prémunir, il est toujours recommandable de commencer la procédure par Application.ScreenUpdating = False et de rétablir à True en fin procédure. Du moins c'est l'expérience acquise qui m'en a convaincu, même si dans ton cas ça fonctionne apparemment correctement. Mais un déroulement pas-à-pas montre bien que la procédure se déclenche plus souvent que nécessaire.

...
Je n'ai pas proposé cette modification à Hervé car le gain reste de l'ordre de l'infinitésimal pour ce cas précis, et qu'il avait mis son fil en résolu. Mais puisqu'on en parle, je l'ajoute.

ta remarque est très importante Papou-net :D.
Mais Si... l'on veut être très attentif, il faut voir si la procédure touche à la cellule, la plage concernée. Si... oui, j'ajoute les 2 lignes, sinon (comme ici) je ne le fais pas. Je m’astreins à cela pour mieux contrôler mon code.

Quant à ta dernière remarque, je ne tiens pas compte du Résolu, car la suite de la discussion peut apporter des explications essentielles à tous les lecteurs.

Bonne journée à toi et à tous les lecteurs
 

Discussions similaires

Statistiques des forums

Discussions
312 236
Messages
2 086 481
Membres
103 232
dernier inscrit
logan035