Selection au hasard

eddylle

XLDnaute Nouveau
Bonjour à tous!

Je travaille avec un tableau excel, disons 10 colonnes et 300 000 lignes, et j'ai besoin de sélectionner AU HASARD 80% des données par exemple..Comment puis-je faire cela avec une macro?

Merci d'avance et bonne journée!
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : Selection au hasard

Bonjour le fil, bonjour le forum,

Une proposition VBA avec le code ci-dessous :
Code:
Sub Macro1()
Dim PL As Range 'déclare la variable PL (PLage)
Dim NC As Integer 'déclare la variable NC (Nombre de Cellules)
Dim PC As Integer 'déclare la variable PC (Pourcentage de Cellules)
Dim I As Integer 'déclare la variable I (Incrément)
Dim CEL As Range 'déclare la variable CEL (CELlule)
Dim NP As Range 'déclare la variable NP (Nouvelle PLage)

Application.ScreenUpdating = False 'masque les rafraîchissements d'écran
Set PL = Sheets("Feuil1").UsedRange 'définit la plage PL
NC = PL.Cells.Count 'définit le nombre de cellule NC de la plage PL
PC = Int(NC * 80 / 100) 'définit la valeur PC égale à 80% du nombre de cellules
Randomize 'lance le générateur de nombres aléatoires
Set NP = PL.Cells(Int(PC * Rnd + 1)) 'définit la nouvelle plage NP
For I = 1 To PC - 1 'boucle de 1 à PC-1
    Set CEL = PL.Cells(Int(NC * Rnd + 1)) 'définit une cellule CEL aléatoirement
    If Application.Intersect(NP, CEL) Is Nothing Then 'condition : si la cellule n'est pas incluse dans la plage NP
        Set NP = Application.Union(NP, CEL) 'ajoute la cellule à la nouvelle plage NP
    Else 'sinon
        I = I - 1 'décrémente I
    End If 'fin de la condition
Next I 'prochaine valeur de la boucle
Application.ScreenUpdating = True 'affiche les rafraîchissements d'écran
NP.Select 'sélectionne la nouvelle plage NP
MsgBox PC & ", " & NP.Cells.Count 'message affichant PC et le nombre de de cellule de la novelle plage NP ('à supprimer)
End Sub
[Édition]
heu j'ai relu, 300 000 lignes ! Ça risque de mouliner grave...
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Re : Selection au hasard

[FONT=&amp]Bonjour eddylle, eriiiic [/FONT][FONT=&amp], Robert[/FONT],
[FONT=&amp]
Pour le [FONT=&amp]F[/FONT][FONT=&amp]U[/FONT][FONT=&amp]N[/FONT] [FONT=&amp]![/FONT]

Deux fichiers basés sur les fonctions [/FONT][FONT=&amp][/FONT][FONT=&amp]ALEA.ENTRE.BORNES()[/FONT][FONT=&amp] [/FONT][FONT=&amp]ou bien [/FONT][FONT=&amp]ALEA()[/FONT][FONT=&amp] [/FONT][FONT=&amp].[/FONT]
[FONT=&amp]
Le premier sélectionne n% des cellules de la feuille 'Feuil1' et les place sur la feuille 'Aux' aux mêmes positions que sur la feuille 'Feuil1". Il est basé sur la fonction ALEA.ENTRE.BORNES() et prend comme hypothèse que ALEA.ENTRE.BORNES renvoie des valeurs à peu près équi-réparties au sein de l'intervalle. Comme ce n'est pas le cas, on corrige après avoir appliqué la formule (on retire des cellules s'il y en avait trop, sinon on en rajoute). Cette méthode permet d'aller sélectionner parmi un très grand nombre de cellules.
Elle est plus gourmande en temps que la seconde.
[/FONT]
[FONT=&amp][FONT=&amp]Le deuxième sélectionne n% des cellules de la feuille 'Feuil1' et les place sur la feuille 'Aux' dans la colonne "A". Il est basé sur la fonction ALEA() (c'est en fait la méthode de eriiiic traduite en VBA"). Cette méthode ne permet pas de sélectionner un nombre de cellules supérieur au nombre de lignes d'une feuille Excel en 2010. On aurait pu répartir sur plusieurs colonnes, mais bon, le [/FONT][FONT=&amp][FONT=&amp]F[/FONT][FONT=&amp]U[/FONT][FONT=&amp]N[/FONT][/FONT] a ses limites et comme on n'a pas de classeur exemple...[/FONT]
[FONT=&amp]
Il faut:

  • initialiser la zone source (bouton 'Init')
  • saisir le pourcentage P dans la cellule orange O2 qui a pour nom 'PourCent'
  • lancer la sélection des P% cellules (bouton 'Sélectionner p %')
  • Le contenu du tableau des résultats peut être effacé (plage 'R3:U39')
[/FONT]
 

Pièces jointes

  • eddylle-Selection au hasard v3.1a.xlsm
    39.5 KB · Affichages: 48
  • eddylle-Selection au hasard v4.1a.xlsm
    39.1 KB · Affichages: 53

Discussions similaires

Réponses
4
Affichages
383

Statistiques des forums

Discussions
312 493
Messages
2 088 956
Membres
103 990
dernier inscrit
lamiadebz