Condividi:        

EXEL: Macro applicata di continuo

Risolvi qui i tuoi problemi legati a Windows '95, '98, ME, NT, 2000, XP, 2003, Vista...

Moderatori: m.paolo, antoo69, -> EleKtrA <-

EXEL: Macro applicata di continuo

Postdi drako2 » 11/04/09 18:51

Salve,

sono nuovo di questo forum e aihmè anche inesperto di EXEL; che è il programma su cui sto sbattendo la testa da 3 giorni senza trovare la soluzione.
Ho interrogato il web e consulatato anche questo forum provando diverse soluzioni ma niente.

Per cui posto il problema sperando che qualcuno possa aiutami

In poche parole

PREMESSA
- Ho un foglio 'Sheet1' in cui ho 4 identiche caselle di scelta di valori da -60 a +60 (diciamo caselle "A1:A4")
- Il valore scelto in ogni casella è poi riprodotto in un foglio 'Sheet2' (diciamo nelle caselle "C1:C4" di questo 'Sheet2')
- All'interno del foglio 'Sheet2' tali valori subiscono diversi calcoli per poi dare un risultato nelle caselle "C5:C8"(sempre del 'Sheet2').
I dati di "C5:C8" ho necessità di metterli in ordine crescente (dal più piccolo al più grande) e a tal fine ho usato la seguente macro:
Codice: Seleziona tutto
Sub SortAllRangeData()
   ' Place column header for temporary sort area.
   Range("IV1").Value = "Numbers"
   
   ' Move numbers to temporary sort location.
   For Each Cell In Selection
      Range("iv65536").End(xlUp).Offset(1, 0) = Cell.Value
   Next Cell
   
   ' Sort numbers in ascending order.
   Range("IV1", Range("IV1").End(xlDown)).Sort Key1:=Range("IV2"), _
   Order1:=xlAscending, Header:=xlGuess, _
        OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
       
   ' Move sorted data back to original sheet location.

   Selection(1, 1).Activate ' Make sure the ActiveCell is the
                            ' top left of Selection first.
   CCnt = Selection.Columns.Count
   RCnt = Selection.Rows.Count
   CellCnt = Selection.Cells.Count
   Tcell = 2
   For c = 1 To CCnt
     For r = 1 To RCnt
        Range(ActiveCell.Address).Offset(r - 1, c + 1).Value = _
        Range("iv" & Tcell).Value
        Tcell = Tcell + 1
     Next r
   Next c
   
   ' Clean up temporary sort location.
   Range("IV1", Range("IV1").End(xlDown)).Clear
End Sub
           


- Questa macro mi consente di mettere i dati di "C5:C8" in ordine crescente nelle caselle "E5:E8" (sempre del 'Sheet2')

PROBLEMA:
I dati di "C5:C8" vengono però aggiornati solo quando (selezionado l'intervallo "C5:C8") premo ALT-F8/Esegui

Ho invece bisogno che tutte e 4 le caselle si aggiornino automaticamente ogni volta che faccio una scelta in "A1:A4" dello 'Sheet1'.
Infatti devo usare i dati di "E5:E8" per fare altri calcoli (e ho bisogno che si aggiornino in simulatnea alle scelte dell'utente)

Ho provato in tanti modi a far attivare la macro automaticamente alla selezione (provato co i vari IfTarget.Adress=, Onchange ecc) ma la mia scarsa competenza non mi ha permesso di trovare una soluzione funzionante.

Qualche idea?

Grazie mille e Buona Pasqua
drako2
Newbie
 
Post: 6
Iscritto il: 11/04/09 18:18

Sponsor
 

Re: EXEL: Macro applicata di continuo

Postdi Flash30005 » 12/04/09 20:53

Inserisci nel Vba del foglio dove hai i dati C5:C8 che cambiano (credo Sheet2) questo codice:
Codice: Seleziona tutto
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("C5:C8")) Is Nothing Then Exit Sub
'inserire qui il programma che deve eseguire
End Sub

Fai attenzione però se il programma continua a cambiare i dati in C5:C8 avrai un Loop

Ciao

P.s.Credo che post sia OT questi argomenti vengono postati nel Topic Applicazione Office Windows (eventualmente ci penseranno i moderatori a spostarlo)
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: EXEL: Macro applicata di continuo

Postdi drako2 » 14/04/09 09:14

Chiedo scusa se qui è OT

Poi ringrazio moltissimo Flash30005 per l'aiuto ma purtroppo non sono ancora riuscito a far funzionare il tutto

Ho provato così (e può benissimo essere che ho sbagliato) e non funge

Codice: Seleziona tutto
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("C5:C8")) Is Nothing Then Exit Sub
Sub SortAllRangeData()
   ' Place column header for temporary sort area.
   Range("IV1").Value = "Numbers"
   
   ' Move numbers to temporary sort location.
   For Each Cell In Selection
      Range("iv65536").End(xlUp).Offset(1, 0) = Cell.Value
   Next Cell
   
   ' Sort numbers in ascending order.
   Range("IV1", Range("IV1").End(xlDown)).Sort Key1:=Range("IV2"), _
   Order1:=xlAscending, Header:=xlGuess, _
        OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
       
   ' Move sorted data back to original sheet location.

   Selection(1, 1).Activate ' Make sure the ActiveCell is the
                            ' top left of Selection first.
   CCnt = Selection.Columns.Count
   RCnt = Selection.Rows.Count
   CellCnt = Selection.Cells.Count
   Tcell = 2
   For c = 1 To CCnt
     For r = 1 To RCnt
        Range(ActiveCell.Address).Offset(r - 1, c + 1).Value = _
        Range("iv" & Tcell).Value
        Tcell = Tcell + 1
     Next r
   Next c
   
   ' Clean up temporary sort location.
   Range("IV1", Range("IV1").End(xlDown)).Clear
End Sub


Comunque grazie
drako2
Newbie
 
Post: 6
Iscritto il: 11/04/09 18:18

Re: EXEL: Macro applicata di continuo

Postdi drako2 » 14/04/09 13:23

Se dovesse servire a qualcuno una macro applicata automaticamente al variare di una casella di scelta (senza mettere pulsanti)

sono riuscito a risolvere così:

- Ho riportati i dati "C5:C8" dello Sheet2 di fianco ai dati "A1:A4" dello Sheet1 (quindi in "B1:B4" dello Sheet1)
- Come detto avevo gia inserito la macro (Sub SortAllRangeData) in un modulo a parte (tale macro serve per mettere in ordine di grandezza i dati delle 4 caselle che mi interessano)
- Ho usato la funzione: "Registra nuova macro" chiamandola semplicemente 'Macro1' e registrato questi passi:
#Seleziono caselle "B1:B4"
#Vado in Strumenti/Macro/macro ed eseguo la macro "SortAllRangeData"
#termino la registrazione
-Vado in Strumenti/Macro/VBA, visualizzo il codice dello Sheet1 e seleziono a destra "Change"; a sinistra metto su "(Worksheet)"); poi scrivo questo
Codice: Seleziona tutto
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("A1:A4")) Is Nothing Then Exit Sub '[i](grazie Flash)[/i]Application.Run "'NomevostrofoglioExel'!Macro1"
End Sub



Questo è tutto e funziona bene

Ora ogni volta che faccio una selezione in una della 4 caselle di scelta (A1:A4) mi mette i 4 valori di B1:B4 in ordine crescente nella caselle D1:D4 dello Sheet1


Spero a qualcuno possa tornare utile come per me è stato utile in vostro forum (e che penso dovrò ancore interpellare in futuro :) )

Grazie ancora
drako2
Newbie
 
Post: 6
Iscritto il: 11/04/09 18:18

Re: EXEL: Macro applicata di continuo

Postdi Flash30005 » 14/04/09 19:45

:?:

Non so perché tu abbia fatto questo richiamo ad un altro foglio
Posso capire che
Codice: Seleziona tutto
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("C5:C8")) Is Nothing Then Exit Sub
Call SortAllRangeData       '<<<<<<<<<< macro da eseguire
End Sub

Posso capire che Il range C5:C8 sia diventato A1:A4 (anche se non è molto chiaro rivedendo il tuo primo post)

Ma mentre il codice precendente va messo nel codice (come hai fatto) del foglio Sheet1 la subroutine va nel modulo con Inserisci > Modulo e li metterai la macro
Codice: Seleziona tutto
Sub SortAllRangeData()
   ' Place column header for temporary sort area.
   Range("IV1").Value = "Numbers"
   
   ' Move numbers to temporary sort location.
   For Each Cell In Selection
      Range("iv65536").End(xlUp).Offset(1, 0) = Cell.Value
   Next Cell
   
   ' Sort numbers in ascending order.
   Range("IV1", Range("IV1").End(xlDown)).Sort Key1:=Range("IV2"), _
   Order1:=xlAscending, Header:=xlGuess, _
        OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
       
   ' Move sorted data back to original sheet location.

   Selection(1, 1).Activate ' Make sure the ActiveCell is the
                            ' top left of Selection first.
   CCnt = Selection.Columns.Count
   RCnt = Selection.Rows.Count
   CellCnt = Selection.Cells.Count
   Tcell = 2
   For c = 1 To CCnt
     For r = 1 To RCnt
        Range(ActiveCell.Address).Offset(r - 1, c + 1).Value = _
        Range("iv" & Tcell).Value
        Tcell = Tcell + 1
     Next r
   Next c
   
   ' Clean up temporary sort location.
   Range("IV1", Range("IV1").End(xlDown)).Clear
End Sub

A questo punto tutto funziona in una unica cartella di lavoro

ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-


Torna a Sistemi Operativi Windows


Topic correlati a "EXEL: Macro applicata di continuo":


Chi c’è in linea

Visitano il forum: Nessuno e 58 ospiti

cron