Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

Copiare dati con SelectionChange

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

Copiare dati con SelectionChange

Postdi Ricky0185 » 25/08/22 21:47

Buonasera,
nel file allegato cliccando su una cella dell'area I1:R2 automaticamente ricopia il contenuto sulla prima cella vuota della colonna B. Se si clicca fuori dell'area I1:R2 compare un messaggio bla bla. Per motivi diversi verranno scelte celle fuori della suddetta area e ad ogni movimento..voilà il messaggio. In pratica non si può fare più nulla. È possibile eliminare questo inconveniente e poter operare con celle fuori della suddetta area, e se si come, ma mantenendo attivo il
Codice: Seleziona tutto
Range("b5").End(xlDown).Offset(1, 0) = ActiveCell.Value
cliccando nelle celle dell'area.
Saluto
R
Ricky0185
Utente Senior
 
Post: 135
Iscritto il: 10/12/19 20:38

Sponsor
 

Re: Copiare dati con SelectionChange

Postdi Ricky0185 » 26/08/22 05:39

Forse cambiando l'approccio, ma lasciando il messaggio, con la macro
Codice: Seleziona tutto
Private Sub worksheet_SelectionChange(ByVal Target As Range)
'MsgBox "Attenzione. Devi inserire una voce con fornitore compreso tra I1 ed R2 "
If Intersect(Target, [i1:r2]) Is Nothing Then Exit Sub

Range("b5").End(xlDown).Offset(1, 0) = ActiveCell.Value
'Range("b5").End(xlDown).WrapText = True
'Range("b5").End(xlDown).EntireRow.AutoFit   
End Sub
oltre a copiare la cella dell'area I1:R2 in fondo alla colonna B non si può più far niente
Ricky0185
Utente Senior
 
Post: 135
Iscritto il: 10/12/19 20:38

Re: Copiare dati con SelectionChange

Postdi Anthony47 » 26/08/22 11:37

Quello che hai fatto e' quello che avrei suggerito anche io

Tuttavia io non lavorerei sull'evento SelectionChange (selezionando a caso, anche di passaggio, una di quelle celle ne accodi il valore quasi senza accorgetene), ma su BeforeDoubleClick, che presuppone una volonta' chiara:
Codice: Seleziona tutto
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Intersect(Target, Range("i1:r2")) Is Nothing Then Exit Sub
Cancel = True
Range("b5").End(xlDown).Offset(1, 0) = ActiveCell.Value
'Altro?
End Sub


oltre a copiare la cella dell'area I1:R2 in fondo alla colonna B non si può più far niente
Non sono certo di aver afferrato il senso...
Se intendi dire che l'utente puo' solo inserire uno dei contenuti di I2:R2 allora questo non e' vero: l'utente puo' fare quello che vuole, compreso scrivere a piacere nella colonna B. Queso sia con SelectionChange che con BeforeDoubleClick.
Avatar utente
Anthony47
Moderatore
 
Post: 18453
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Copiare dati con SelectionChange

Postdi Ricky0185 » 26/08/22 14:08

Si, puoi fare tutto, scrivere nelle celle valori o formule, etc. etc., ma non appena scegli una cella e clicchi sull'Enter ecco il messaggio. Affronto questa problematica poichè passerò il tutto ad altra persona che con excel sa fare a malapena operazioni matematiche. Il foglio è molto più grande, una ventina di colonne e un paio di migliaia di righe, destinate a diventare 1 dak. E fa parte di un file che ne contiene 13 di cui quasi tutti automatizzati grazie al tuo aiuto/tue macro di cui ti ringrazio.
Ritornando a bomba provo il Doubleclick, altrimenti penso di far apparire il messaggio all'apertura del foglio lasciando il salvataggio del file (con macro) previo spostamento su altro foglio. Sul foglio in esame ci si va quasi esclusivamente per fare registrazioni.
Ti ringrazio ancora per gli aiuti che mi hai dato insieme ad un caloroso
Saluto
R
Ricky0185
Utente Senior
 
Post: 135
Iscritto il: 10/12/19 20:38

Re: Copiare dati con SelectionChange

Postdi Ricky0185 » 06/09/22 18:52

Buonasera, sempre il solito file che ripropongo con richiesta di modifiche/integrazioni che ho spiegato sul Foglio1.
In sostanza non riesco a suddividere l’area del SelectionChange in due parti I1:M1 + I2:L2 e dedicare l’ultima cella della seconda area M2 ad altro compito, spiegato appunto sul Foglio1.
Ringrazio e saluto
R
Ricky0185
Utente Senior
 
Post: 135
Iscritto il: 10/12/19 20:38

Re: Copiare dati con SelectionChange

Postdi Anthony47 » 06/09/22 23:31

Avevo gia' spiegato perche' non condivido l'approccio del SelectionChange, ma vedo che ci sei affezionato e te lo lascio, con tutte le conseguenze che puo' portare dovuti a uso delle frecce per andare a zonzo tra le celle o a selezioni multiple.
Se vuoi escludere M2 dal codice successivo allora creiamo un If:
Codice: Seleziona tutto
If Intersect(Target, [i1:m2]) Is Nothing Then Exit Sub
If Target.Address <> "$M$2" Then                                         'If End If Aggiunto
    Range("b5").End(xlDown).Offset(1, 0) = ActiveCell.Value
    Range("b5").End(xlDown).WrapText = True
    'Etc
    'Etc
End If

Che l'uso di .Date non funzioni mi sembra ovvio; usa invece
Codice: Seleziona tutto
    Range("b5").End(xlDown).Offset(0, -1).Value = Date


Se in M2 vuoi un menu' a tendina, mettici una Convalida dati: imposta Consenti=Elenco e come Origine scrivi l'intervallo dei nomi di Foglio3
Se i nomi li scrivi da A2 di Foglio3 in avanti allora puoi crearti un "Intervallo nominato dinamico" che contiene automaticamente solo e tutti i nomi elencati:
-crea un nuovo intervallo nominato, chiamalo CONVA, come "Riferito a" gli inserisci la seguente formula
Codice: Seleziona tutto
=SCARTO(Foglio3!$A$2;0;0;CONTA.VALORI(Foglio3!$A$2:$A$1000);1)

Ora su M2 puoi mettere la convalida da elenco e come Origine ci scrivi =CONVA
(tra l'altro mi pare che su Office 2003 per usare un elenco presente su foglio diverso da quello con la convalida devi per forza usare un intervallo nominato)

Volendo, puoi far "aprire" l'elenco usando SendKeys inserendo un "Else" nel codice che ho scritto prima:
Codice: Seleziona tutto
If Target.Address <> "$M$2" Then
    Range("b5").End(xlDown).Offset(1, 0) = ActiveCell.Value
    Range("b5").End(xlDown).WrapText = True
    'Etc
    'Etc
Else
    SendKeys "%{DOWN}"
End If

Se vuoi che, scelto un nome da inserire in M2 lo stesso venga inserito in coda all'elenco presente in colonna B puoi aggiungere una macro di Worksheet_Change, nello stesso modulo che contiene la SelectionChange, corrispondente a questo codice:
Codice: Seleziona tutto
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$M$2" Then
    Me.Range("B5").End(xlDown).Offset(1, 0).Value = Target.Value
    Range("M3").Select
End If
End Sub


Buone prove...
Avatar utente
Anthony47
Moderatore
 
Post: 18453
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Copiare dati con SelectionChange

Postdi Ricky0185 » 07/09/22 06:49

Prove positivissime, funziona come da aspettative. L'ultima domanda è come far sparire il nome scelto dall'elenco nella cella M2 che resta anche dopo la
Codice: Seleziona tutto
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$M$2" Then
    Me.Range("B5").End(xlDown).Offset(1, 0).Value = Target.Value
    Range("b5").End(xlDown).Offset(0, -1) = Date
    Range("M3").Select
    'Range("M2") = "M" 'questo aggiunge la M e relativa data all'infinito sotto il nome registrato
End If
End Sub
Ricky0185
Utente Senior
 
Post: 135
Iscritto il: 10/12/19 20:38

Re: Copiare dati con SelectionChange

Postdi Anthony47 » 07/09/22 08:47

Se vuoi modificare il contenuto di M2 (facendo in questo modo perdere di vista all'utente l'operazione che ha compiuto) allora aggiungiamo Application.EnableEvents = False /True al codice:
Codice: Seleziona tutto
If Target.Address = "$M$2" Then
    Application.EnableEvents = False
    Me.Range("B5").End(xlDown).Offset(1, 0).Value = Target.Value
    'altre istruzioni
    'altre istruzioni
    Range("M3").Select
    Range("M2").Value = "Il Valore che vuoi tu"
    Application.EnableEvents = True
End If

Buona giornata
Avatar utente
Anthony47
Moderatore
 
Post: 18453
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Copiare dati con SelectionChange

Postdi Ricky0185 » 07/09/22 12:30

Questo EnableEvents = False /True prima o poi dovrò capire cosa cactus fa.
Per il momento ti ringrazio e ti saluto
R
Ricky0185
Utente Senior
 
Post: 135
Iscritto il: 10/12/19 20:38


Torna a Applicazioni Office Windows


Topic correlati a "Copiare dati con SelectionChange":


Chi c’è in linea

Visitano il forum: Marius44 e 23 ospiti