Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Tirer un échantillon aléatoire sur Excel 2007

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

JojolaFrite

XLDnaute Nouveau
Bonjour à tous ,

J’aurais aimé tirer un échantillon aléatoire d’entreprises sous Excel 2007, mais je n’y connais rien en macro.

J’ai regardé d’autres sujets de ce forum. Serait-il possible de créer une case où l’on pourrait choisir la taille de l’échantillon à tirer ? Le nombre d'entrées de la table de base n’est pour l’instant pas défini, mais je préfère prendre de l’avance.

Le but est de réaliser par la suite une enquête téléphonique.

Ci-joint l’architecture de mon fichier Excel avec les différentes entrées

Merci par avance de vos réponses !
 

Pièces jointes

Re : Tirer un échantillon aléatoire sur Excel 2007

Bonjour JojolaFrite


Deux propositions de code qui peuvent servir de base de travail :​
VB:
Sub tirage1()
Dim i&, tmp&
Dim f1$, f2$, t&, x&, r&()
    f1 = "Feuil1" 'feuille d'origine.
    f2 = "Feuil2" 'feuille de destination.
    With Worksheets(f1): x = .Range(.Cells(2, 2), .Cells(2, 2).End(xlDown)).Count: End With
    On Error Resume Next
    t = CLng(InputBox("Taille de l'échantillon (max = " & x & ") :", "Taille de l'échantillon...", 0))
    If Err.Number Then Exit Sub
    If t > 0 Then
        t = IIf(t > x, x, t)
        ReDim r(1 To x)
        For i = 1 To x: r(i) = i + 1: Next
        Randomize
        For i = x To 1 Step -1: tmp = r(i): r(i) = r(1 + Int(i * Rnd)): r(1 + Int(i * Rnd(0))) = tmp: Next
        ReDim Preserve r(1 To t)
        Worksheets(f2).Cells.Clear
        Worksheets(f1).Rows(1).Copy Destination:=Worksheets(f2).Cells(1, 1)
        For i = 1 To t
            Worksheets(f1).Rows(r(i)).Copy Destination:=Worksheets(f2).Cells(i + 1, 1)
        Next
    End If
End Sub
VB:
Sub tirage2()
Dim i&, j&, tmp&
Dim f1$, f2$, t&, x&, r&(), s()
    f1 = "Feuil1" 'feuille d'origine.
    f2 = "Feuil2" 'feuille de destination.
    With Worksheets(f1): x = .Range(.Cells(2, 2), .Cells(2, 2).End(xlDown)).Count: End With
    On Error Resume Next
    t = CLng(InputBox("Taille de l'échantillon (max = " & x & ") :", "Taille de l'échantillon...", 0))
    If Err.Number Then Exit Sub
    If t > 0 Then
        t = IIf(t > x, x, t)
        ReDim r(1 To x)
        For i = 1 To x: r(i) = i + 1: Next
        Randomize
        For i = x To 1 Step -1: tmp = r(i): r(i) = r(1 + Int(i * Rnd)): r(1 + Int(i * Rnd(0))) = tmp: Next
        ReDim Preserve r(1 To t)
        With Worksheets(f1)
            x = .Range(.Cells(1, 1), .Cells(1, .Columns.Count).End(xlToLeft)).Count
            ReDim s(0 To t, 1 To x)
            For j = 1 To x: s(0, j) = .Cells(1, j).Value: Next
            For i = 1 To t: For j = 1 To x: s(i, j) = .Cells(r(i), j).Value: Next j, i
        End With
        With Worksheets(f2): .Cells.ClearContents: .Cells(1, 1).Resize(t + 1, x).Value = s: End With
    End If
End Sub


Bonne soirée.


ROGER2327
#6303


Mercredi 18 Sable 140 (Sainte Lurette, joconde - fête Suprême Quarte)
28 Frimaire An CCXXI, 7,1299h - truffe
2012-W51-2T17:06:42Z
 
Re : Tirer un échantillon aléatoire sur Excel 2007

Bonjour à tous les deux,

Merci de vos réponses !

Merci Roger2327. Comment faut-il faire pour insérer ce code ? Désolé, je suis vraiment un grand novice en la matière...^^

Gardien de phare, oui une solution sans VBA pourrait m’intéresser.

En fait, je cherche le plus simple possible car ce n'est pas moi qui vais tirer l'échantillon mais donner le fichier à quelqu’un. L'idéal serait qu'il ait juste à copier-coller son fichier, appuyer sur un bouton, sélectionner le nombre d'échantillon à tirer et hop apparaît l'échantillon.

Bonne journée
 
Re : Tirer un échantillon aléatoire sur Excel 2007

Re...


Bref, il faut du "clef en main" sans trop se casser la tête...

Un essai dans le classeur joint, sur la base du code proposé plus haut, avec quelques modifications.​


ROGER2327
#6305


Jeudi 19 Sable 140 (Gravidité de Mère Ubu - fête Suprême Tierce)
29 Frimaire An CCXXI, 4,4791h - olive
2012-W51-3T10:44:59Z
 

Pièces jointes

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…