Condividi:        

sorteggi random evitando certi tipi di abbinamento

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

sorteggi random evitando certi tipi di abbinamento

Postdi corvus44 » 26/05/14 12:48

Salve a tutti
Sono un nuovo iscritto, da tempo seguo il forum per apprendere come poter modificare le macro Excel generate in automatico dal registratore, sono riuscito ad adattare alcune macro dei vari Anthony, Ricky, Flash ai miei scopi ma non ho trovato nulla che possa aiutarmi nel seguente problema.
Essendo la gara settimanale strutturata su tre partite, Si tratta di formare tre estrazioni di accoppiamenti da un elenco di nomi presenti su foglio1 da b4 in poi,trasferendole su foglio2. in foglio 1 vengono poi inseriti i punteggi accumulati da ogni giocatore nelle tre partite e fatto un ordinamento secondo la classifica totale ( macro richiamate da pulsanti già realizzate).
Il problema consiste nel fatto che non si vogliono certi tipi di abbinamento, esempio non si vogliono accoppiare fra loro due donne, oppure certi giocatori di categoria decisamente superiore ( giocatori di scopa che partecipano a gare di livello nazionale).
Ho pensato quindi di inserire in foglio1 da b4 in poi i nominativi dei " campioni " preceduti da " * " e quelli delle donne da " % ", non devono formarsi coppie di due " * " o due " % " e nel secondo e terzo sorteggio accoppiamenti già usciti in quelli precedenti.
Da alcune prove da me eseguite su sorteggi random ripetuti, ho notato che si formano ripetutamente gli stessi accoppiamenti magari con inversione delle posizioni 1-2 in 2-1, necessiterebbe quindi un controllo per evitare accoppiamenti già usciti.
Esiste qualcuno nel forum che abbia tempo e voglia di aiutarmi?, sulle capacità non nutro dubbi.
Saluti e grazie
Corvus
Win 7 + Office 2007
Win 8.1 + Office 2013
corvus44
Utente Junior
 
Post: 20
Iscritto il: 26/05/14 09:56

Sponsor
 

Re: sorteggi random evitando certi tipi di abbinamento

Postdi Anthony47 » 27/05/14 02:28

Ciao corvus44, benvenuto nel forum.
Ad esempio una macro come questa:
Codice: Seleziona tutto
Sub sort()
Dim Dest As String, K As Long, I As Long, Primo As String, Secondo As String
Dim LastB As Long
'
Dest = "F3:G6"      '<< L' area in cui si formeranno le tre coppie
Range(Dest).ClearContents
LastB = Cells(Rows.Count, 2).End(xlUp).Row
For I = 1 To 3
rePr:
    K = K + 1
    If K > 10000 Then MsgBox ("Non risolto, abortito"): Exit For
    Primo = Range("B4").Offset(Rnd() * (LastB - 4), 0)
    If Application.WorksheetFunction.CountIf(Range(Dest), Primo) > 0 Then GoTo rePr
    Range(Dest).Cells(1, 1).Offset(I, 0) = Primo
reSec:
    K = K + 1
    If K > 10000 Then MsgBox ("Non risolto, abortito"): Exit For
    Secondo = Range("B4").Offset(Rnd() * (LastB - 4), 0)
    If Application.WorksheetFunction.CountIf(Range(Dest), Secondo) > 0 Then GoTo reSec
    If Left(Secondo, 1) = "%" And Left(Primo, 1) = "%" Then GoTo reSec
    If Left(Secondo, 1) = "*" And Left(Primo, 1) = "*" Then GoTo reSec

    Range(Dest).Cells(1, 1).Offset(I, 1) = Secondo
DoEvents
Next I
End Sub

Essa crea gli accoppiamenti in un' area del foglio che contiene i giocatori; le coppie vanno poi trasferite sul secondo foglio, ma personalmente non ho capito se ci sono regole per definire la loro destinazione, quindi non so cosa proporre.
Fai sapere... ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19436
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: sorteggi random evitando certi tipi di abbinamento

Postdi corvus44 » 27/05/14 23:29

Ringrazio Anthony per la sollecita risposta, purtroppo mi accorgo che evidentemente non mi ero spiegato bene, il problema è molto più complicato ( almeno per me ),intanto specifico che il programma dovrebbe girare sotto Windows 8 e Office 2013, e che si tratta della gara settimanale di scopa a punteggio basata su tre partite che, oltre alla nostra bocciofila, interessa molti altri circoli sportivi.
Nel foglio ISCRIZIONI (foglio1) da colonna B5 in giù vengono elencati i giocatori,( il numero è variabile , sempre multiplo di 4 e normalmente non supera i 40 iscritti) , non volendo accoppiamenti fra giocatori di categoria oppure fra donne pensavo di inserire i loro nomi preceduti rispettivamente dai simboli " * " e " % " ( ES: *pippo, *pluto, %paperina, %topolina) il foglio prevede poi , per la prima partita, nella colonna C(da riga 5) di inserire 2 punti per i giocatori vincitori ,0 punti per i perdenti, in colonna D (da riga 5) gli effettivi punti accumulati, per la seconda partita i punteggi descritti in precedenza saranno inseriti nelle colonne E ed F, per la terza partita nelle colonne G ed H, nelle colonne I e J vi sarà la sommatoria delle tre partite. Delle macro si interesseranno di: svuotare il foglio per nuove gare, ordinare la classifica totale secondo i punti vittoria ( 1à chiave) e punti acquisiti (2à chiave), stampare la classifica, queste macro sono già realizzate. Quello che manca è la macro che si interessa dei sorteggi che dovrebbero essere riportati nel foglio
SORTEGGI ( FOGLIO2) esempio con 16 giocatori presenti nel foglio ISCRIZIONI da posizione B5 in giù
1à partita, posizionare i giocatori in modo random evitando accoppiamenti * pippo con *pluto o %paperina con % topolina
in queste posizioni:
A5 - A6 1à coppia contro b5 - b6 2à coppia
A7 - A8 3à coppia contro B7- B8 4à coppia
A9- A10 5à coppia contro B9 - B10 6à coppia
A11 - A12 7à coppia contro B11 - B12 8à coppia

2à partita posizionare i giocatori evitando accoppiamenti fra " * " oppure " % " e la formazione di coppie già presenti nella prima partita in queste posizioni:
D5 -D6 1à coppia contro E5 - E6 2à coppia
D7 - D8 3à coppia contro E7 -E8 4à coppia
D9 - D10 5à coppia contro E9 - E10 6à coppia
D11 - D12 7à coppia contro E11- E12 8à coppia

3à PARTITA posizionare i giocatori evitando accoppiamenti fra " * " oppure " % " e la formazione di coppie già presenti nella prima e seconda partita in queste posizioni:
G5 - G6 1à coppia contro H5 - H6 2à coppia
G7 - G8 3à coppia contro H7 - H8 4à coppia
G9 - G10 5à coppia contro H9 - H10 6à coppia
H11 - H12 7à coppia contro H11 - H12 8à coppia
Segnalo che normalmente i giocatori con " * " non sono più di 2-3, la stessa cosa per le donne
So di essermi dilungato molto ma non sapevo come spiegarmi in altra maniera, avevo provato ad inserire nel post direttamente
esempi in Excel con copia incolla ma le formattazioni andavano a pallino, eppure nel forum ho visto esempi con tabelle Excel, come sono state inserite?
Io comunque sto cercando di risolvere il problema, ho pensato alla funzione Excel, UNICODE() per gestire i nominativi inizianti con simbolo, inserendola in cicli e condizioni IF, ma non so se è fattibile in VBA e se riuscirò a riprendere dimestichezza con la programmazione abbandonata più di trenta anni fa all'epoca del Basic ( da ciò riuscirete a capire quanto sono stagionato).
Ringrazio nuovamente tutti, Anthony in particolare, studierò comunque la tua macro ( è pur sempre un utile esperienza).
Salutissimi
Corvus
Win 7 + Office 2007
Win 8.1 + Office 2013
corvus44
Utente Junior
 
Post: 20
Iscritto il: 26/05/14 09:56

Re: sorteggi random evitando certi tipi di abbinamento

Postdi corvus44 » 28/05/14 01:11

Anthony ho provato la tua macro postata il 27/5 ore 2,28 ( non sono il solo a fare le ore piccole), naturalmente funziona.
Se estesa per tutto il range dei giocatori iscritti , elencati nel foglio ISCRIZIONI dalla posizione B5 in poi, formerebbe già gli accoppiamenti della 1à partita con le caratteristiche richieste col mio post del 27/05 ore 23,29, le coppie si formerebbero per riga e non per colonna A5 - B5 contro A6 - B6 ma potrebbe andare bene, mi sbaglio forse?
saluti ora vado a nanna.
Corvus
Win 7 + Office 2007
Win 8.1 + Office 2013
corvus44
Utente Junior
 
Post: 20
Iscritto il: 26/05/14 09:56

Re: sorteggi random evitando certi tipi di abbinamento

Postdi Anthony47 » 28/05/14 14:55

Purtroppo le ulteriori informazioni non mi hanno illuminato granche', forse perche' non sono un esperto di scopone...
La domanda chiave e':
-bisogna creare tre elenchi, ognuno contenente 4 righe, ogni riga contenente 2 coppie (quindi 16 nominativi in tutto)?
-nel secondo e terzo elenco bisogna evitare di ricreare le stesse coppie o bisogna evitare di usare ognuno dei 16 nominativi usati nell' elenco precedente?

Le tabelle che talvolta vedi inserite nei messaggi sono "immagini", che puoi inserire seguendo queste informazioni: viewtopic.php?f=26&t=80395#p466013

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19436
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: sorteggi random evitando certi tipi di abbinamento

Postdi corvus44 » 28/05/14 23:29

Cio Anthony Vediamo se riesco ad inserire le immagini come consigliato da tuo post
Immagine
image hosting
questo è il foglio ISCRITTI dove da cella b5 in giù vengono inseriti i nominativi dei partecipanti, il foglio viene poi gestito come da mio precedente post del 27/05/14 - 23:29, tutto è gia predisposto e funzionante, come esempio ho inserito 16 iscritti ma il numero è variabile, i punteggi inseriti sono un esempio per comprendere il lavoro del foglio, nel foglio SORTEGGI vorrei avere le estrazioni
Immagine
host image
Non riesco a capire perché le immagini vengono tagliate sulla destra anche provando a ridimensionarle (farò indagini).
Nel foglio SORTEGGI dovrebbero presentarsi gli accoppiamenti per tre partite, per la prima partita gli accoppiamenti sono di colore giallo contro il colore azzurro posizioni A4-A5 contro B4-B5 e così via fino ad abbinare in coppia tutti i giocatori elencati
nel foglio ISCRITTI da pos.B5 fino a B(xldown), evitando come detto accoppiamenti fra " * " e " % ", per la seconda partita è la stessa cosa, le posizioni saranno nelle colonne D - E evitando oltre agli accoppiamenti fra " * " e " % " anche il formarsi di coppie già presenti nella prima partita.
Per la terza partita ho voluto ipotizzare che , se fosse più comodo o semplice nella realizzazione della macro disporre gli accoppiamenti in orizzontale , coppie gialle G4 - H4 contro coppie azzurre G5 - H5 e così via potrebbe andare bene ugualmente, occorrerà sempre evitare accoppiamenti fra " * " e " % " e il formarsi di coppie già presenti nella prima e seconda partita.
Ciao e grazie spero che ora sia chiaro anche se le immagini non sono complete
Corvus
Win 7 + Office 2007
Win 8.1 + Office 2013
corvus44
Utente Junior
 
Post: 20
Iscritto il: 26/05/14 09:56

Re: sorteggi random evitando certi tipi di abbinamento

Postdi corvus44 » 29/05/14 10:41

Risolto il problema delle immagini ( sono un piffero), se dovesse servire posso postare quelle complete
Ciao a tutti
Corvus
Win 7 + Office 2007
Win 8.1 + Office 2013
corvus44
Utente Junior
 
Post: 20
Iscritto il: 26/05/14 09:56

Re: sorteggi random evitando certi tipi di abbinamento

Postdi Anthony47 » 29/05/14 22:44

La risposta alle due domande e' ancora utile a capire i termini del problema.

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19436
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: sorteggi random evitando certi tipi di abbinamento

Postdi corvus44 » 30/05/14 00:56

Occorre creare tre elenchi ( 1 per ogni partita da effettuare), ogni elenco comprenderà due colonne ed un numero di righe pari al numero (variabile) di iscritti elencati nel ( foglio1 " ISCRIZIONI")/2 , l'intero numero dei giocatori, sarà piazzato nell'elenco ( foglio " SORTEGGI") in modo da formare delle coppie, i concorrenti di ogni coppia (che non dovranno entrambi avere il nome preceduto da " * " oppure da " % ") potrebbero essere piazzati su due righe consecutive della stessa colonna ( A4-A5 ecc.)) e quindi giocare contro la coppia allocata sulle stesse righe della colonna adiacente (B4-B5 ecc.. esempi ipotizzati per 1à e 2à partita nell'immagine inerente il foglio (SORTEGGI) del mio precedente post del 28/5/14 ore 23:29 oppure, se più semplice nella realizzazione della macro, su due colonne adiacenti della stessa riga G4-H4 in questo caso giocheranno contro la coppia presente nella riga seguente stesse colonne G5-G6 (esempio ipotizzatio per 3à partita nell'immagine del post precedente) così via ,coppia contro coppia, fino ad esaurire tutti gli iscritti.
Nel secondo e terzo elenco bisogna evitare di ricreare le stesse coppie
Ringrazio e saluto sperando di essere stato chiaro
Corvus
Win 7 + Office 2007
Win 8.1 + Office 2013
corvus44
Utente Junior
 
Post: 20
Iscritto il: 26/05/14 09:56

Re: sorteggi random evitando certi tipi di abbinamento

Postdi Anthony47 » 31/05/14 01:14

Dopo qualche tentativo abortito, probabilmente questo codice potrebbe funzionare:
Codice: Seleziona tutto
Dim SorgBase As Range, DestBase As Range, LastP As String
Dim I As Long, Playrs As Long, J As Long, DLock As Long
Sub sort2()
Dim P1 As String, P2 As String, P3 As String, P4 As String
'
Set SorgBase = Sheets("ISCRITTI").Range("B4")       '<<< L'area dove comincia l' elenco dei PLAYERS
Set DestBase = Sheets("SORTEGGI").Range("A4")       '<<< L'area dove comincia l' elenco delle partite
Playrs = Range(SorgBase, SorgBase.End(xlDown)).Rows.Count
DLock = 0

reJ:
DestBase.Resize(Playrs, 9).ClearContents
DLock = DLock + 1
DoEvents
For J = 1 To 3
DoEvents
    For I = 1 To Int(Playrs / 4)


ReP1:   If DLock > 10 And DLock Mod 500 = 1 Then GoTo reJ Else If DLock > 10000 Then GoTo AbortA
        P1 = SorgBase.Offset(Int(Rnd() * Playrs), 0).Value
        If Not Buono(P1, 1) Then GoTo ReP1 Else DestBase.Offset(2 * (I - 1), 3 * (J - 1)).Value = P1

ReP2:   If DLock > 10 And DLock Mod 500 = 1 Then GoTo reJ Else If DLock > 10000 Then GoTo AbortA
        P2 = SorgBase.Offset(Int(Rnd() * Playrs), 0).Value
        If Not Buono(P2, 2) Then GoTo ReP2 Else DestBase.Offset(2 * (I - 1) + 1, 3 * (J - 1)).Value = P2

ReP3:   If DLock > 10 And DLock Mod 500 = 1 Then GoTo reJ Else If DLock > 10000 Then GoTo AbortA
        P3 = SorgBase.Offset(Int(Rnd() * Playrs), 0).Value
        If Not Buono(P3, 1) Then GoTo ReP3 Else DestBase.Offset(2 * (I - 1), 3 * (J - 1) + 1).Value = P3

ReP4:   If DLock > 10 And DLock Mod 500 = 1 Then GoTo reJ Else If DLock > 10000 Then GoTo AbortA
        P4 = SorgBase.Offset(Int(Rnd() * Playrs), 0).Value
        If Not Buono(P4, 2) Then GoTo ReP4 Else DestBase.Offset(2 * (I - 1) + 1, 3 * (J - 1) + 1).Value = P4

    Next I
Next J
MsgBox ("Completato")
Exit Sub
'
AbortA:
MsgBox ("Tentativo fallito")
End Sub


Function Buono(ByVal PLYR As String, ByVal CC As Long) As Boolean
Dim myPres As Long
'
Buono = False: DLock = DLock + 1
'If DLock > 1000 Then Stop
DoEvents
myPres = Application.WorksheetFunction.CountIf(DestBase.Offset(0, 3 * (J - 1)).Resize(Playrs / 2, 2), PLYR)
If myPres > 0 Then GoTo ExitA
If Left(PLYR, 1) = "%" And Left(LastP, 1) = "%" Then GoTo ExitA
If Left(PLYR, 1) = "*" And Left(LastP, 1) = "*" Then GoTo ExitA
If J > 1 And CC = 2 Then
    If CkPair(PLYR, LastP) = False Then GoTo ExitA
End If
Buono = True: DLock = 0
If CC = 1 Then LastP = PLYR
ExitA:
'If DLock > [J1] Then [J1] = DLock
End Function

Function CkPair(ByVal PP As String, ByVal SP As String) As Boolean
Dim myI As Long, myJ As Long, myK As Long, CPP As Long, CSP As Long
CkPair = False
DoEvents
For myJ = 0 To J - 1
    For myI = 0 To Int(Playrs / 4) * 2 Step 2
        For myK = 0 To 1
        DoEvents
            CPP = Application.WorksheetFunction.CountIf(DestBase.Offset(myI, 3 * myJ).Resize(2, 1), PP)
            CSP = Application.WorksheetFunction.CountIf(DestBase.Offset(myI, 3 * myJ).Resize(2, 1), SP)
            If (CPP + CSP) = 2 Then GoTo ExitA
        Next myK
    Next myI
Next myJ
CkPair = True
ExitA:
End Function
Per usarla:
-Da excel, premi Alt-F11 per aprire l' editor delle macro; Menu /Inserisci /Modulo; copia il codice e incollalo nel frame di dx.
Adatta le istruzioni marcate <<<, per indicare:
-su quale foglio /cella comincia l' elenco dei giocatori
-su quale foglio /cella comincera' l' elenco delle accoppiate che saranno generate
Non inserire, nello stesso "Modulo" altre istruzioni.

Per usarla:
-da Excel, premi Alt-F8, scegli sort2 dall' elenco di macro che risultano disponibili, premi Esegui.

Se devi ripeterla frequentemente puo' essere utile creare un pulsante e associargli la macro:
-Menu /Tab Sviluppo /Gruppo Controlli /Inserisci; scegli il Pulsante tra i Controlli Modulo; disegna il pulsante e associagli la macro (ti verra' esplicitamente chiesto quale macro vuoi associare).
In questo modo bastera' premere il pulsante per rieseguire la macro.

Il risultato e' come da immagine (nomi e formattazione sono a fantasia mia):
Immagine
free image hosting
Cioe':
Le coppie sono su stessa colonna, righe adiacenti (es A4:A5)
Le due "coppie accoppiate" sono su colonne adiacenti (es A e B)
Tra le partite c' e' una colonna libera (la C e la F, nell' esempio)

Fai sapere...
Avatar utente
Anthony47
Moderatore
 
Post: 19436
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: sorteggi random evitando certi tipi di abbinamento

Postdi corvus44 » 31/05/14 02:50

Ciao a tutti
Mille ringraziamenti ad Antony, la macro funziona alla grande, mentre Tu la realizzavi io non sono stato con le mani in mano,
al puro scopo di imparare qualcosa, ho esaminato la tua prima macro cercando di capirne il funzionamento. Sono riuscito solo in parte, invece dell'estrazione di sole tre copie sono riuscito a fare estrarre l'intero numero degli iscritti formando quindi l'intera 1à partita, poi ho fatto una cosa che ti farà rabbrividire.
Per formare le altre partite, non essendo ancora (spero per ora) in grado di destreggiarmi con i cicli del VBA, ho ricopiato per altre due volte la tua macro modificando i parametri necessari.
Perbacco sono stato molto sorpreso dal fatto che tutto funzionasse, anche se naturalmente manca il controllo che permette di evitare
il formarsi della stessa coppia in partite diverse.
Esistono però dei difetti, anche se tutti gli iscritti vengono piazzati regolarmente,si presenta il Msgbox, quindi ritengo che i cicli contenenti la variabile K vadano fino al k> 10000.
E' abusare troppo della tua pazienza se ti mando la macro modificata per cercare di capire cosa diavolo ho combinato?

Salutissimi ora è proprio ora di andare a nanna.
Corvus
Win 7 + Office 2007
Win 8.1 + Office 2013
corvus44
Utente Junior
 
Post: 20
Iscritto il: 26/05/14 09:56

Re: sorteggi random evitando certi tipi di abbinamento

Postdi Anthony47 » 31/05/14 12:46

Approvo incondizionatamente gli esperimenti fatti con la precedente macro, pero' se il nuovo codice e' drasticamente piu' complicato del precedente un motivo ci sara'...
Avatar utente
Anthony47
Moderatore
 
Post: 19436
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: sorteggi random evitando certi tipi di abbinamento

Postdi corvus44 » 01/06/14 23:53

Ciao a tutti
Il programma che sto tentando di realizzare con il sostanziale aiuto di Anthony, è già funzionante anche se necessita di alcuni aggiustamenti grafici.
Avendolo memorizzato su chiavetta USB, questa mattina in occasione di una riunione fra i direttivi di alcune bocciofile, ne ho dimostrato il funzionamento che ha suscitato notevole interesse, specie quando alla domanda di quanto sarebbe costato ho risposto ...un caffe.
L'interesse allora si è tramutato in entusiasmo e tutti insieme abbiamo cercato di stabilire quali potevano essere eventuali miglioramenti, è stato suggerito di:
1) portare il numero estrazioni a 4 , alcune bocciofile strutturano questo tipo di gare su appunto 4 partite
2) esaminare la possibilità di fare precedere il nome del giocatore dal numero di iscrizione, quello segnato sul foglio "ISCRITTI" da A5 in giù, quindi praticamente concatenare il numero iscrizione con il giocatore.
Nel pomeriggio mi sono messo al lavoro, ho modificati il foglio" iscrizioni "aggiungendo la 4à partita, per potere soddisfare le richieste di punto 2, ho pensato che se davanti al nome mettevamo il numero di iscrizione gli eventuali simboli " * " e " % " potevano essere messi in fondo ai nomi che dovrebbero quindi presentarsi nel foglio sorteggi ad esempio così : 1 Pippo,
2 Mynny%, 3 Topolino* .... 12 Paperino ecc..
Ho provato a smanettare la macro di Anthony, naturalmente dopo averne fatto non una ma due coppie, segnalo le modifiche apportate nella seguenti righe

DestBase.Resize(Playrs, 13).ClearContents ' modificato 9 in 13

For J = 1 To 4 ‘MODIFICATO IL 3 IN 4

If Right(PLYR, 1) = "%" And Right(LastP, 1) = "%" Then GoTo ExitA ‘MODIFICATO IL LEFT IN RIGHT
If Right(PLYR, 1) = "*" And Right(LastP, 1) = "*" Then GoTo ExitA ‘MODIFICATO IL LEFT IN RIGHT

Dopo avere formattato la colonna A foglio "ISCRITTI" come testo ed in colonna B avere spostato i simboli alla fine dei nomi ho provato a lanciare la macro che ha funzionato benissimo formando senza problemi le estrazioni delle 4 partite
Non sono però riuscito a trovare il modo di concatenare numero iscrizione con nome, probabilmente sto annegando in un bicchiere d'acqua, qualche animo gentile può lanciarmi un salvagente.
ringrazio e saluto
Corvus
Win 7 + Office 2007
Win 8.1 + Office 2013
corvus44
Utente Junior
 
Post: 20
Iscritto il: 26/05/14 09:56

Re: sorteggi random evitando certi tipi di abbinamento

Postdi corvus44 » 02/06/14 10:56

Salve a tutti
Ho dimenticato una nota nel post precedente
Naturalmente la richiesta di poter concatenare automaticamente numero iscrizione con nominativo non è indispensabile al fine del programma, potrei farlo manualmente quando inserisco gli iscritti, ES: 3 Pippo*
La richiesta di automatismo, visto che non sono riuscito a realizzarlo, è a puro scopo di cultura personale, potrebbe servire in altre occasioni.
Quello che mi preme sapere è se le modifiche da me apportate alla macro di Anthony, potrebbero in qualche occasione dare problemi, per ora sembra che tutto fili liscio.
grazie salutissimi
Corvus
Win 7 + Office 2007
Win 8.1 + Office 2013
corvus44
Utente Junior
 
Post: 20
Iscritto il: 26/05/14 09:56

Re: sorteggi random evitando certi tipi di abbinamento

Postdi Anthony47 » 02/06/14 23:02

So che ti sentirai strano, ma le modifiche sono tutte corrette :lol: :lol:

Quanto a concatenare numero con nominativo, la cosa piu' semplice e' che crei un nuovo elenco che contiene queste due informazioni concatenate nella stessa cella, usando una formula del tipo =CellaConNumero & " - " & CellaConNominativo
Poi dichiari questo nuovo elenco nell' istruzione "Set SorgBase = etc etc"

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19436
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: sorteggi random evitando certi tipi di abbinamento

Postdi corvus44 » 03/06/14 00:10

Ma allora sono un fenomeno.
Ciao
Corvus
Win 7 + Office 2007
Win 8.1 + Office 2013
corvus44
Utente Junior
 
Post: 20
Iscritto il: 26/05/14 09:56

Re: sorteggi random evitando certi tipi di abbinamento

Postdi corvus44 » 04/06/14 19:49

Ciao Anthony
La funzione di concatenamento crea dei problemi alla macro, ti spiego come ho agito.
In colonna A dalla riga 5 alla 44 sono sempre presenti i numeri da 1 a 40 (max. numero di giocatori previsti.
In colonna 5 da riga 5 in poi i nominativi dei giocatori iscritti.
Ho creato la cella concatenata in U5 (in modo che non comparisse sullo schermo) con la formula:

=SE(B5="";"";A5&"-"&B5), copiandola poi fino ad U44,ho utilizzato la condizione "SE()" per evitare che nelle righe ove in colonna B5 non è presente il nome di nessun giocatore ( N° iscritti inferiore a 40) venisse riportato il numero della corrispondente riga di col. A
Ho modificato nella Tua macro l'espressione:
Set SorgBase = Sheets("ISCRITTI").Range("B5") sostituendo "B5" con "U5"

Lanciando la macro, si forma un loop che continua a creare regolarmente nuovi accoppiamenti nel foglio "SORTEGGI", ma piazzandoli sempre nelle posizioni della prima partita senza mai fermarsi, l'unico modo per interrompere è uscire dal programma .

Mi dispiace di scocciarti ancora, ma per me la macro è molto ostica non riesco a trovare soluzione.
Salutissimi
Corvus
Win 7 + Office 2007
Win 8.1 + Office 2013
corvus44
Utente Junior
 
Post: 20
Iscritto il: 26/05/14 09:56

Re: sorteggi random evitando certi tipi di abbinamento

Postdi Anthony47 » 05/06/14 14:35

Mettendo formule oltre l' elenco dei concorrenti il calcolo di Playrs e' errato, quindi saranno create coppie di valore "nullo", che risulteranno percio' coppie duplicate, da cui il tentativo di ripetere le estrazioni all' infinito (ma dopo un tot dovrebbe uscirne per disperazione...).
Sostituisci la riga Playrs = Range(SorgBase, SorgBase.End(xlDown)).Rows.Count con
Codice: Seleziona tutto
For Each Cell In Range(SorgBase, SorgBase.End(xlDown))
 If Len(Cell.Value) > 0 Then Playrs = Playrs + 1
Next Cell

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19436
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: sorteggi random evitando certi tipi di abbinamento

Postdi corvus44 » 05/06/14 22:02

Ciao Anthony
Naturalmente ora la macro funziona come un orologio svizzero.
Per tua informazione ti comunico che prima dell'ultima modifica oltre al riformarsi continuamente gli accoppiamenti nelle celle di partita 1, dopo essere uscito dal programma, al rientro notavo che erano stati generati numeri casuali in colonna B da riga 519 fino al fondo colonna ( chissà poi perché da riga 519).
Bene ora riprenderò il programma cercando di migliorare l'opzione ( già funzionante ma per nulla professionale) della stampa dei cartellini di gara, già non te l'avevo detto, il programma deve generare i cartellini dove i giocatori durante la partita segnano i punti fatti mano per mano.
Ciao saluti e buon lavoro
Corvus
Win 7 + Office 2007
Win 8.1 + Office 2013
corvus44
Utente Junior
 
Post: 20
Iscritto il: 26/05/14 09:56

Re: sorteggi random evitando certi tipi di abbinamento

Postdi corvus44 » 05/06/14 22:43

Ciao Anthony
Devi scusarmi ma anche gli orologi svizzeri possono presentare dei problemi.
Se lancio la macro tutto OK, esco dal programma, rientro e lancio nuovamente la macro tutto OK, ma se, senza uscire dal programma rilancio nuovamente si verifica il loop, andando nel foglio "SORTEGGI" noto il formarsi continuo degli accoppiamenti nelle posizioni di partita 1, scorrendo il foglio verso il basso non riesco ad andare oltre riga 519, mi sa che andrò a giocarmi i numeri 5 e 19.
Saluti
Corvus
Win 7 + Office 2007
Win 8.1 + Office 2013
corvus44
Utente Junior
 
Post: 20
Iscritto il: 26/05/14 09:56

Prossimo

Torna a Applicazioni Office Windows


Topic correlati a "sorteggi random evitando certi tipi di abbinamento":


Chi c’è in linea

Visitano il forum: Nessuno e 15 ospiti