Pagina 1 di 1

[Risolto] Macro: sorteggio casuale di 3 degli 8 numeri presenti in una colonna.

Inviato: giovedì 19 gennaio 2023, 16:36
da arckborg
Salve a tutti, amici del Forum.
Ho un nuovo problemino da risolvere: mi servirebbe una Macro, da attivare tramite il pulsante “Sorteggia” (presente nel Foglio “GIOCATA”), che andando ad operare nel Foglio “SORTEGGIO” andasse ad inserire nella Colonna D7:D30 3 degli 8 Numeri (sorteggiandoli a caso) che sono presenti nella colonna C7:C30.
Spero di essere stato sufficientemente chiaro nell'esplicitare le mie necessita', tuttavia, onde evitare eventuali disguidi e fraintendimenti allego alla presente anche il File in oggetto.

Un cordiale saluto.
Arch. A. Borghini

Re: MACRO: sorteggio casuale di 3 degli 8 numeri presenti in una colonna.

Inviato: giovedì 19 gennaio 2023, 17:46
da charlie
arckborg ha scritto: giovedì 19 gennaio 2023, 16:36Salve Gaetano
Nel forum ci si rivolge a tutti i potenziali aiutanti.

Re: MACRO: sorteggio casuale di 3 degli 8 numeri presenti in una colonna.

Inviato: giovedì 19 gennaio 2023, 19:08
da arckborg
Hai perfettamente ragione. Chiedo umilmente scusa.

Re: MACRO: sorteggio casuale di 3 degli 8 numeri presenti in una colonna.

Inviato: giovedì 19 gennaio 2023, 21:01
da patel
Puoi sempre correggere il tuo primo post

Re: MACRO: sorteggio casuale di 3 degli 8 numeri presenti in una colonna.

Inviato: venerdì 20 gennaio 2023, 14:38
da Gaetanopr

Codice: Seleziona tutto

Sub Sorteggio
Dim Doc As Object
Dim Sh As Object
If MsgBox("Sei sicuro di voler sorteggiare i nuovi numeri???", 64+4, "SORTEGGIO")  = 7 Then EXIT SUB
Doc = ThisComponent
Sh = Doc.Sheets.GetByName("SORTEGGIO")
Range = Sh.getCellRangeByName("C7:C30")
Sh.getCellRangeByName("D7:D30").clearContents(1)
  
Dati = Range.GetDataArray
X = Ubound(Dati)
Dim Dic As Object
Set Dic = CreateObject("Scripting.Dictionary") 

Do While A < 3
   Numero = Dati(Int((X * Rnd) ))(0)
   If Numero <> 0 Then
      If Dic.Exists(Numero) = False Then
         Dic.Add Key:= Numero , Item:= Numero
         A = A + 1
         oDescriptor = Range.createSearchDescriptor()
         With oDescriptor
             .SearchString = Numero
             .SearchWords = True
             .SearchType = 1  ' cerca nei valori
             .SearchCaseSensitive = False
         End With
         oFound = Range.findFirst(oDescriptor)
         If Not IsNull(oFound) Then
            r=oFound.getCellAddress.Row
            Sh.getCellByPosition(3, r).Value = Numero
         End If
 
      End If
   End If      
   
Loop

End Sub

Re: MACRO: sorteggio casuale di 3 degli 8 numeri presenti in una colonna.

Inviato: venerdì 20 gennaio 2023, 15:38
da arckborg
Salve Gaetano, grazie infinite per il tuo cortese aiuto, tuttavia c'e' qualcosa nella routine che non funziona. Forse e' colpa mia perche' nel frattempo ho leggermente modificato ed aggiunto alcune cose. Tuttavia non penso che sia il nome del foglio su cui deve operare la Macro dato che ho provveduto anche a cambiare il suo nome all'interno della stessa.
Per maggiore sicurezza, comunque, in allegato alla presente ti invio sia il nuovo file modificato che lo screenshot relativo al messaggio di errore in questione.

Di nuovo grazie ed un cordiale saluto.
Arch. A. Borghini

Re: MACRO: sorteggio casuale di 3 degli 8 numeri presenti in una colonna.

Inviato: sabato 21 gennaio 2023, 0:14
da Gaetanopr
Dall'immagine già si vede che qualcosa non va, fai coesistere macro scritte in VBA per Excel e in basic per openoffice, devi togliere 'Option VBASupport 1, anzi togli tutto il VBA, nel tuo precedente post avevo già convertito una macro che cancellava il contenuto delle celle, quindi dovresti sapere come fare.
Pure in Basic si usa il metodo ClearContents, in questa macro c'è una riga che cancella i numeri delle celle "D7:D30"

Codice: Seleziona tutto

Sh.getCellRangeByName("D7:D30").clearContents(1)
Saluti

Re: MACRO: sorteggio casuale di 3 degli 8 numeri presenti in una colonna.

Inviato: sabato 21 gennaio 2023, 10:11
da arckborg
Caro Gaetano, anche dopo aver seguito il tuo consiglio ed aver eliminato dalla MACRO tutta la parte in VBA, anche questa volta mi da errore (vedi file e screenshot allegati). A questo punto non so piu' a che "Santo votarmi"; non mi resta che "affidarmi alle tue prodigiose mani".

Un cordiale saluto.
Arch. A. Borghini

Re: MACRO: sorteggio casuale di 3 degli 8 numeri presenti in una colonna.

Inviato: sabato 21 gennaio 2023, 10:19
da Gaetanopr
Non avevo letto la tua firma, il tuo SO non riconosce gli Oggetti Dictionary, cambiamo sistema.

Codice: Seleziona tutto

Sub Sorteggio
Dim Doc As Object
Dim Sh As Object
If MsgBox("Sei sicuro di voler sorteggiare i nuovi numeri ???", 64+4, "SORTEGGIO")  = 7 Then EXIT SUB
Doc = ThisComponent
Sh = Doc.Sheets.GetByName("SORTEGGIO_1")
Range = Sh.getCellRangeByName("C7:C30")
Sh.getCellRangeByName("D7:D30").clearContents(1)
  
Dati = Range.GetDataArray
X = Ubound(Dati)

Do While A < 3
   Numero = Dati(Int((X * Rnd) ))(0)
   If Numero <> 0 Then
         oDescriptor = Range.createSearchDescriptor()
         With oDescriptor
             .SearchString = Numero
             .SearchWords = True
             .SearchType = 1  ' cerca nei valori
             .SearchCaseSensitive = False
         End With
         oFound = Range.findFirst(oDescriptor)
         If Not IsNull(oFound) Then
            r=oFound.getCellAddress.Row
            If Sh.getCellByPosition(3, r).String = "" Then
                Sh.getCellByPosition(3, r).Value = Numero
                A = A + 1
            End If
         End if
      End If

Loop
End Sub


Re: [RISOLTO] MACRO: sorteggio casuale di 3 degli 8 numeri presenti in una colonna.

Inviato: sabato 21 gennaio 2023, 11:52
da arckborg
Perfetto, ora la Macro funziona perfettamente.
Grazie infinite Gaetano.

Un cordiale saluto.
Arch. A. Borghini