Condividi:        

COPIA & INCOLLA INTERVALLO

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

COPIA & INCOLLA INTERVALLO

Postdi cd7019 » 19/03/14 21:50

Ciao,
avrei bisogno di un aiutino x completare la mia macro.

Ho creato un pulsante per attivare la userform COPIA nel foglio1
Codice: Seleziona tutto
Sub COPIA_RIGHE()
COPIA.Show vbModeless
End Sub


nella userform COPIA ho creato la mia macro:
Codice: Seleziona tutto
Private Sub UserForm_Initialize()
Set iset = Application.Intersect(Range("A14:V1000"), Selection)
If Not iset Is Nothing Then
    If Application.Intersect(Range("A14:V1000"), Selection).Count = Selection.Count Then
        L1.Caption = "Le righe da copiare sono:  " & Selection.EntireRow.Address(0, 0) & "." & Chr$(10) _
        & Chr$(10) & "*** Indicare la destinazione ***"
        Range(Cells(Selection.Row, 2), Cells(Selection.Row + Selection.Rows.Count - 1, 22)).Copy
        ' IF SELEZIONO UNA CELLA MI COPIA L'INTERVALLO E CHIUDE LA USERFORM
        Cells(34, 2).Insert Shift:=xlDown ' CELLA FISSA X PROVA
        Application.CutCopyMode = False
        COPIA.Hide
    End If
End If
End Sub


Ho provare ad indicare una cella di destinazione Cells(34, 2) fissa X prova e mi copia perfettamente tutto, come desiderato.
Però NON chiude la userform. non capisco perchè!
Però vorrei che copiasse l'intervallo nella cella da me selezionata (ho usato vbModeless) e conseguentemente mi chiudesse la userform.

Per semplificare, c'è la possibilità di usare un msgbox senza pulsanti di conferma e in modo vbModeless?

Grazie
EXCEL 2003
cd7019
Utente Senior
 
Post: 232
Iscritto il: 26/06/12 21:38

Sponsor
 

Re: COPIA & INCOLLA INTERVALLO

Postdi Anthony47 » 20/03/14 01:37

La tua macro di UserForm_Initialize si completera' prima che tu possa compiere qualsiasi scelta; addirittura prima che la userform compaia sullo schermo. Inoltre la .Hide e' presente in un If, quindi da progetto e' previsto che in qualche caso la form rimanga presente. Inoltre2 l' uso di "Hide" lascera' la tua form inizializzata e in memoria, quindi la Userform_Initialize non partira' in caso di successivi ".Show". Infine non so a quali fini vorresti usare la userform.

Conclusione: non so da dove partire...

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

Re: COPIA & INCOLLA INTERVALLO

Postdi cd7019 » 20/03/14 14:33

ciao,
ho provato come tentativo ad usare la userform, ma evidentemente senza risultati.
Desidero ottenere una procedura molto semplice:
1) seleziono un mio intervallo
2) premo il pulsante con abbinato la macro seguente
3) visualizzo il messaggio ( non è indispensabile)
4) aspetto una selezione
5) copio l'intervallo (esteso alle colonne 2-22) nella nuova posizione
6) chiudo il messaggio ( non è indispensabile)


Codice: Seleziona tutto
Private Sub UserForm_Initialize()
Set iset = Application.Intersect(Range("A14:V1000"), Selection)
If Not iset Is Nothing Then
    If Application.Intersect(Range("A14:V1000"), Selection).Count = Selection.Count Then
        ****messagio "Le righe da copiare sono:  " & Selection.EntireRow.Address(0, 0)  Indicare la destinazione ****
        Range(Cells(Selection.Row, 2), Cells(Selection.Row + Selection.Rows.Count - 1, 22)).Copy
       ....
        ' ASPETTO LA SELEZIONE DI UNA CELLA
        Cells(activecell.row, 2).Insert Shift:=xlDown
        Application.CutCopyMode = False
        COPIA.Hide
    End If
End If
End Sub


Grazie
EXCEL 2003
cd7019
Utente Senior
 
Post: 232
Iscritto il: 26/06/12 21:38

Re: COPIA & INCOLLA INTERVALLO

Postdi Anthony47 » 20/03/14 15:50

Penso che questa macro (da associare al tuo pulsante) faccia una cosa simile a quanto chiedi:
Codice: Seleziona tutto
Sub SelCopy()
Dim myDest As Range, myArea As Range
If Application.Intersect(Range("A14:V1000"), Selection).Count = Selection.Count Then
On Error GoTo Abooort
    Set myArea = Selection
    Set myDest = Application.InputBox("Seleziona la cella di destinazione", "Scegli...", , , , , , 8)
    myArea.Copy Destination:=myDest.Cells(1, 1)
End If
Exit Sub
Abooort:
MsgBox ("operazione fallita; accertarsi di aver selezionato un' area da copiare e l' area di destinazione")
End Sub

Ciao, fai sapere.
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: COPIA & INCOLLA INTERVALLO

Postdi cd7019 » 20/03/14 19:19

ciao e grazie.

Ho apportato alcune modifiche, ma non riesco a dire a inputbox che quando seleziono la cella di destinazione deve premere in modo automatico il tasto OK e quindi chiedere la finestra.

Codice: Seleziona tutto
Sub SelCopy()
Dim myDest As Range, myArea As Range
If Application.Intersect(Range("A14:V1000"), Selection).Count = Selection.Count Then
On Error GoTo Abooort
    Set myArea = Range(Cells(Selection.Row, 2), Cells(Selection.Row + Selection.Rows.Count - 1, 22))
    Set myDest = Application.InputBox("Seleziona la cella di destinazione", "Scegli...", , , , , , 8)
    myArea.Copy Destination:=Cells(myDest.Row, 2)
    If myDest.Row > 0 Then myDest = vbOK     ' ?????????  NON FUNZIONA  ???????????
    'If myDest <> "" Then myDest = vbOKOnly    ?????????  NON FUNZIONA  ???????????
End If
Exit Sub
Abooort:
MsgBox ("operazione fallita; accertarsi di aver selezionato un' area da copiare e l' area di destinazione")
End Sub



Grazie
EXCEL 2003
cd7019
Utente Senior
 
Post: 232
Iscritto il: 26/06/12 21:38

Re: COPIA & INCOLLA INTERVALLO

Postdi Anthony47 » 21/03/14 01:21

No, non puoi uscire dall' inputbox senza pigiare un pulsante; se vuoi modifico la macro affinche' incolli nella prima cella che selezioni dopo aver avviato la macro, che e' quello che vorresti fare... ma e' lo stesso che incollare a caso...

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

Re: COPIA & INCOLLA INTERVALLO

Postdi cd7019 » 22/03/14 14:15

La finestra di visualizzazione può essere anche eliminata, era solo un modo x attendere l'introduzione della cella di destinazione.
Vorrei fare la stessa cosa del copia -inserisci incolla, però selezionando non tutto l'intervallo ma solo alcune celle, perché potrei avere diverse colonne e quindi spostarmi continuamente con il mouse verso destra.

grazie.
EXCEL 2003
cd7019
Utente Senior
 
Post: 232
Iscritto il: 26/06/12 21:38

Re: COPIA & INCOLLA INTERVALLO

Postdi Anthony47 » 23/03/14 22:41

Non ho capito se l' ultimo messaggio contiene una precisazione per il quesito iniziale o una nuova richiesta...
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: COPIA & INCOLLA INTERVALLO

Postdi cd7019 » 23/03/14 22:45

E' solo una precisazione.

Grazie
EXCEL 2003
cd7019
Utente Senior
 
Post: 232
Iscritto il: 26/06/12 21:38

Re: COPIA & INCOLLA INTERVALLO

Postdi Anthony47 » 23/03/14 23:06

Allora...
Io ero partito dalla descrizione di quel che volevi fare:
Codice: Seleziona tutto
1) seleziono un mio intervallo
2) premo il pulsante con abbinato la macro seguente
3) visualizzo il messaggio ( non è indispensabile)
4) aspetto una selezione
5) copio l'intervallo (esteso alle colonne 2-22) nella nuova posizione
6) chiudo il messaggio ( non è indispensabile)

1 e 2 lo fai tu; il pulsante avvia la macro che ti avevo proposto; (3)l' inputbox puo' mostrare un messaggio (oltre all' intestazione) che io ho compilato con "Seleziona la cella di destinazione" ma puo' essere piu' articolato; (4)l' utente seleziona l' area in cui vuole incollare [in realta' di quanto seleziona sara' usato solo la Cella(1,1)]; (5)quando la selezione e' fatta l' utente preme Ok l' inputbox si chiude e l' incollo viene eseguito.

Ora mi sembra che tu non voglia che (punto 5) l' utente prema Ok quando la selezione e' stata fatta; ma la mia domanda e': come fai a sapere che la cella selezionata sia quella dove bisogna incollare, e non una selezione fatta per errore? Se ti basta incollare nella prima cella selezionata dopo il Copia, cioe' la prima cella selezionata dall' utente dopo che ha premuto scientemente il pulsante, si puo' fare (ma rimango sempre dell' idea che equivalga a incollare a caso).

Tutto questo trascurando il fatto che si sta discutendo di come automatizzare un ciclo che in modo nativo si fa con Contr-c seguito da Contr-v...

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

Re: COPIA & INCOLLA INTERVALLO

Postdi cd7019 » 23/03/14 23:18

si, è un semplice copia-incolla, ma senza andare a selezionare le n colonne (=22 in questo caso, ma potrebbero essere 53, 64, ecc...), ma selezionando solamente le celle volute in una colonna.

Codice: Seleziona tutto
Range(Cells(Selection.Row, 2), Cells(Selection.Row + Selection.Rows.Count - 1, 22)).Copy
 ' *** ASPETTO LA SELEZIONE DI UNA CELLA + MESSAGGIO ***
 Cells(activecell.row, 2).Insert Shift:=xlDown



mi manca la 2 riga

Grazie
EXCEL 2003
cd7019
Utente Senior
 
Post: 232
Iscritto il: 26/06/12 21:38

Re: COPIA & INCOLLA INTERVALLO

Postdi Anthony47 » 23/03/14 23:29

Direi che non ci capiamo.
ma senza andare a selezionare le n colonne (=22 in questo caso, ma potrebbero essere 53, 64, ecc...), ma selezionando solamente le celle volute in una colonna.
Parli della selezione delle celle da copiare o dell' intervallo su cui incollare?
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: COPIA & INCOLLA INTERVALLO

Postdi cd7019 » 23/03/14 23:30

le celle da copiare
EXCEL 2003
cd7019
Utente Senior
 
Post: 232
Iscritto il: 26/06/12 21:38

Re: COPIA & INCOLLA INTERVALLO

Postdi Anthony47 » 23/03/14 23:43

Suggerirei di ripartire da quello che vorresti fare, che in passato avevi descritto qui: viewtopic.php?f=26&t=101579#p587549 (la parte descrittiva, non il codice).

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

Re: COPIA & INCOLLA INTERVALLO

Postdi cd7019 » 24/03/14 00:01

1) seleziono un mio PICCOLO intervallo (con N righe, n° colonne qualsiasi)
2) premo il pulsante con abbinata la macro
3) visualizzo il messaggio "attendo selezione x incollare la selezione" (senza pulsanti, nè conferme)
4) aspetto una selezione
5) copio l'intervallo (con N righe e le colonne dalla 2° alla 22°) nella nuova posizione (alla 2° colonna)
6) chiudo il messaggio


esempio:
seleziono l'intervallo H20:H22
premo il pulsante
compare il messaggio ...
seleziono la cella L25
mi inserisce - copia l'intervallo B20:V22 nella cella B25.
chiude il messaggio ...
EXCEL 2003
cd7019
Utente Senior
 
Post: 232
Iscritto il: 26/06/12 21:38

Re: COPIA & INCOLLA INTERVALLO

Postdi Anthony47 » 25/03/14 02:21

Creati una userform dal nome UF_Wait; comeCaption scrivici "Wait..." o altra cosa a piacere. Inseriscici una Label che come Caption contenga "Selezionare l' area su cui incollare" o altra cosa a piacere.
In un modulo standard "vergine" inserire questo codice:
Codice: Seleziona tutto
Public CArea As Range, STimer As Single
Sub mmmm()
Dim SArea As String, MArea As Range
'
SArea = "A14:N1000"      '<<< L'area e le colonne copiabili
'
Set CArea = Nothing: STimer = 0
Set MArea = Application.Intersect(Selection, Range(SArea))
If MArea Is Nothing Then Exit Sub
If Selection.Count <> MArea.Count Then Exit Sub
'
Set CArea = Application.Intersect(Range(SArea), Selection.EntireRow)
CArea.Select
'aaa = CArea.Address
UF_wait.Show vbModeless
STimer = Timer
End Sub

Personalizza l' istruzione marcata <<<
Torna su Excel.
Disegna il tuo pulsante e assegnagli la macro "mmm"
Tasto dx sul tab col nome fogli su cui devi fare copia e incolla; scegli Visualizza codice
Incolla questo codice nel frame vuoto di dx
Codice: Seleziona tutto
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim MArea1 As Range
'
On Error GoTo ErrA
If Not UF_wait.Visible Then Exit Sub
If Timer > (STimer + 20) Or Timer < STimer Then GoTo ErrA
If CArea Is Nothing Then GoTo ErrA
Set MArea1 = Application.Intersect(Target, CArea)
If Not MArea1 Is Nothing Then GoTo ErrA
If Target.Count > 1 Then GoTo ErrA
'Tutto sembra ok..
Application.EnableEvents = False
CArea.Copy Destination:=Target
ErrA:
UF_wait.Hide
Set CArea = Nothing
STimer = 0
Application.EnableEvents = True
End Sub

Se il frame di dx non e' vuoto, controlla se contiene gia' una Private Sub Worksheet_SelectionChange; se No, procedi regolarmente; se Si, pubblica il codice della Sub Worksheet_SelectionChange presente.
La macro assegnata al pulsante dovrebbe identificare se la selezione e' entro l' area dichiarata; se Si, allora allarga la selezione a tutte le colonne dichiarate, poi attiva la userform col messaggio e aspetta una selezione di destinazione.
Appena l' utente seleziona una cella (1 cella), fuori dall' area di copia selezionata, entro 20 secondi da quando la prima area e' stata selezionata, la copia dovrebbe essere fatta.
Altre situazioni, identificabili nelle istruzioni in testa alla Sub Worksheet_SelectionChange, portano al reset della situazione.
Se la seconda selezione non avviene entro 20 secondi il messaggio rimane visualizzato, salvo che quando la selezione avverra' la copia non sara' eseguita; si puo' sia modificare il timeout (aumentare i 20 secondi) che inserire una macro OnTime che parte 20 secondi dopo la Sub mmm ed esegue le istruzioni comprese tra ErrA: /End Sub.

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

Re: COPIA & INCOLLA INTERVALLO

Postdi cd7019 » 25/03/14 23:32

Grazie
EXCEL 2003
cd7019
Utente Senior
 
Post: 232
Iscritto il: 26/06/12 21:38


Torna a Applicazioni Office Windows


Topic correlati a "COPIA & INCOLLA INTERVALLO":


Chi c’è in linea

Visitano il forum: Nessuno e 31 ospiti