Condividi:        

[Excel VBA] Codice macro

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

[Excel VBA] Codice macro

Postdi robsol » 19/09/12 10:12

Ciao a tutti. ho un favore da chiedervi per una macro:
semplicemente, come potete vedere nel post precedente, riportavo dei valori ( sono celle fisse) da un foglio x (dove x e' una variabile ed e' il nome del cliente) ad un foglio chiamato Ospedale, anche qui in celle fisse. Ho fatto un cambiamento, e ho raccolto tutti i dati dei clienti in un unico worksheet, chiamato Summary View.

Vorrei fare un cambiamento: io ora ho sempre il mio worksheet Ospedale in cui in voglio riportare i valori, sempre in quelle celle,fisse. Deve pero' prendere i valori da nuovo worksheet (Summary View), che contiene i dati di ogni cliente (mentre prima c'era un worksheet per ogni cliente). il problema e' che i clienti vengono inseriti e tolti di volta in volta, quindi non ho dei riferimenti assoluti per le celle. Avrei bisogno che la macro cercasse (nel worsksheet Summary view) il nome del cliente ( si trovano tutti sulla riga 4, es. C4, F4, I4, L4...), e una volta che ho trovato il nome cliente, vada a recuperare delle celle (se ad esempio il cliente e' Paperino e si trova nella cella C4, le celle da prendere saranno la cella C15 e C22) [se pero' aggiungo un nuovo cliente Pluto, e Paperino non sara' piu' nella cella C4 ma slitta in F4, dovra' prendermi le celle F15 e F22).

Siccome sono parecchio impedito con vba, avrei proprio bisogno che mi riportiate il codice, perche' se me lo spiegate a parole, so che non riusciro' mai a farlo.

Codice: Seleziona tutto
Sub SourceCliente()

Dim x As String

    x = InputBox("Inserire il nome del Cliente")
   
    [A4].Value = Worksheets(x).Name
     
    Worksheets("Ospedale").Range("B14:B15").Value = Worksheets(x).Range("C385:C386").Value
   
    Worksheets("Ospedale").Range("B31:B39").Value = Worksheets(x).Range("C391:C399").Value
   
    Worksheets("Ospedale").Range("B53:B57").Value = Worksheets(x).Range("I385:I389").Value
   
    Worksheets("Ospedale").Range("B61:B84").Value = Worksheets(x).Range("I391:I414").Value
   
    Worksheets("Ospedale").Range("B94").Value = Worksheets(x).Range("B314").Value
   
    Worksheets("Ospedale").Range("B96").Value = Worksheets(x).Range("B316").Value
     End Sub
robsol
Newbie
 
Post: 7
Iscritto il: 19/09/12 10:08

Sponsor
 

Re: [Excel VBA] Codice macro

Postdi Flash30005 » 19/09/12 12:09

Fai un ciclo for next sulla riga 4 del foglio Summary View fino a trovare il nome del cliente
es.:

Codice: Seleziona tutto
X = "nomecliente"
Set Ws1 = Worksheets("Summary View")
For CC1 = 1 to 254
If Ws1.cells(4,CC1).value = x then
ColS = CC1
exit for
Next CC1
msgbox ColS
'<<<< da qui in poi hai la colS che corrisponde alla colonna del foglio Summary View che corrisponde al nome cliente e potrai usare per il copia e incolla
'.... resto della macro


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-

Re: [Excel VBA] Codice macro

Postdi robsol » 20/09/12 12:01

Grazie, ma ho il parte risolto, in modo leggermente diverso.
Ti chiedo pero' un altro piccolo aiuto
Di seguito ti riporto il codice, vorrei sapere come posso renderlo piu' veloce, accorpandolo in un'unica riga..
Codice: Seleziona tutto
With Worksheets("Ospedale")
         .[B31] = Worksheets("Summary View").Cells(154, f.Column)
        .[B32] = Worksheets("Summary View").Cells(155, f.Column)
        .[B33] = Worksheets("Summary View").Cells(156, f.Column)
        .[B34] = Worksheets("Summary View").Cells(157, f.Column)
        .[B35] = Worksheets("Summary View").Cells(158, f.Column)
        .[B36] = Worksheets("Summary View").Cells(159, f.Column)
        .[B37] = Worksheets("Summary View").Cells(160, f.Column) 


Essendo un range continuo di celle...credo che il codice si possa scrivere in un'unica riga.
Io ho provato a fare cosi' ma mi da' errore:
Codice: Seleziona tutto
With Worksheets("Ospedale")
         .[B31:B37] = Worksheets("Summary View").Range(Cells(154, f.Column),Cells(160,f.Column))

o anche cosi', stesso errore:
Codice: Seleziona tutto
With Worksheets("Ospedale")
         .Range("B31:B37) = Worksheets("Summary View").Range(Cells(154, f.Column),Cells(160,f.Column))


HELP ME, PLEASE
robsol
Newbie
 
Post: 7
Iscritto il: 19/09/12 10:08

Re: [Excel VBA] Codice macro

Postdi Flash30005 » 20/09/12 14:03

:roll:

edito in diretta
Codice: Seleziona tutto
Worksheets("Summary View").Range(Cells(154, f.Column),Cells(160,f.Column)).copy destination:=Worksheets("Ospedale").Range("B31")

prova e fai sapere
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-

Re: [Excel VBA] Codice macro

Postdi Anthony47 » 21/09/12 00:17

In alternativa al Copia /Incolla suggerito da Flash si potrebbe anche usare
Codice: Seleziona tutto
Sheets("Ospedale").Range("B31:B37").Value = Sheets("Summary View"). Range(Cells(154, f.Column),Cells(160,f.Column)).Value

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

Re: [Excel VBA] Codice macro

Postdi robsol » 21/09/12 04:17

Ragazzi vi ringrazio, ma continua a darmi errore. Se invece la scrivo come l'ho postata ieri, cioe' valore per valore, la macro funziona senza problemi. E' pero', perche' e' lunghissima per me da scrivere, e magari e' anche meno veloce nell'esecuzione.

Any other suggestion? :-? :-? :-? :-?
robsol
Newbie
 
Post: 7
Iscritto il: 19/09/12 10:08

Re: [Excel VBA] Codice macro

Postdi wallace&gromit » 21/09/12 07:29

Ciao,
se le celle in cui risiedono i valori sono sempre le stesse non puoi lavorare con le formule?
Dalla macro fai inserire la tua variabile "f.column" in una cella libera del foglio "Ospedale" e usi quel valore con la formula =INDIRETTO(INDIRIZZO...)
Office2016 + 2019 su win11
Avatar utente
wallace&gromit
Utente Senior
 
Post: 2174
Iscritto il: 16/01/12 14:21

Re: [Excel VBA] Codice macro

Postdi robsol » 21/09/12 07:43

Ciao w&g, non sono molto ferrato, non saprei fare quello che mi hai spiegato a parole.
le celle non sono pero' fisse...cioe' le righe si', ma non le colonne (uso proprio la f.column per questo motivo)
robsol
Newbie
 
Post: 7
Iscritto il: 19/09/12 10:08

Re: [Excel VBA] Codice macro

Postdi wallace&gromit » 21/09/12 08:00

mettiamo che fai inserire il valore di f.column nella cella A31, in B31 inserisci questa formula:
Codice: Seleziona tutto
=INDIRETTO(INDIRIZZO(154+RIF.RIGA()-31;$A$31;;;"Summary view"))
e trascini in giù.
Office2016 + 2019 su win11
Avatar utente
wallace&gromit
Utente Senior
 
Post: 2174
Iscritto il: 16/01/12 14:21

Re: [Excel VBA] Codice macro

Postdi Flash30005 » 21/09/12 08:03

Prova a rendere attivo il foglio "Summary View" prima di far fare la copia
con la select
Codice: Seleziona tutto
Worksheets("Summary View").Select '<<<< aggiungi questa riga, qui!
Worksheets("Summary View").Range(Cells(154, f.Column), Cells(160, f.Column)).Copy Destination:=Worksheets("Ospedale").Range("B31")


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-

Re: [Excel VBA] Codice macro

Postdi robsol » 21/09/12 08:42

grazie flash, forse cosi' credo che possa funzionare, pero' ora l'errore me lo da' quando scrivo destination:=Worksheets ecc ecc
mi evidenzia := e mi dice compile error: Expected: espression
robsol
Newbie
 
Post: 7
Iscritto il: 19/09/12 10:08

Re: [Excel VBA] Codice macro

Postdi wallace&gromit » 21/09/12 09:06

e con le formule?
Office2016 + 2019 su win11
Avatar utente
wallace&gromit
Utente Senior
 
Post: 2174
Iscritto il: 16/01/12 14:21

Re: [Excel VBA] Codice macro

Postdi robsol » 21/09/12 09:15

ho provato come hai detto, copiando e incollando la tua formula, cambiando al posto che A31, usando T10. Mi dice che la formula contiene errori. fai conto che ho sostuito Indiretto con Indirect e indizzo con address perche' sono all'estero e devo usare la versione inglese.
robsol
Newbie
 
Post: 7
Iscritto il: 19/09/12 10:08

Re: [Excel VBA] Codice macro

Postdi wallace&gromit » 21/09/12 09:42

prova togliendo anche "rif.riga()-31", al massimo lo riaggiungi in un secondo tempo
Office2016 + 2019 su win11
Avatar utente
wallace&gromit
Utente Senior
 
Post: 2174
Iscritto il: 16/01/12 14:21

Re: [Excel VBA] Codice macro

Postdi Anthony47 » 21/09/12 11:46

C' e' un messaggio di w&g prima del mio da leggere.

Ragazzi vi ringrazio, ma continua a darmi errore. Se invece la scrivo come l'ho postata ieri, cioe' valore per valore, la macro funziona senza problemi. E' pero', perche' e' lunghissima per me da scrivere, e magari e' anche meno veloce nell'esecuzione.
Se non dici che errore allora possiamo solo sparare qualcosa di diverso e sperare nella sorte...
Se il codice che hai postato funziona allora lascialo cosi', non c' e' nessun problema di rallentamento.
In quanto all' errore di compilazione con Destination, la cosa piu' probabile e' che che hai scritto quella parte nella riga dopo la Copy, mentre deve essere la continuazione dell' istruzione ".copy"
I Select servono solo a "fare ammujna".
La formula di w&g dove l' hai scritta e come l' hai scritta (copiandola dalla barra della formula)? E se dice "contiene degli errori" quale parte viene selezionata nella barra della formula?

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


Torna a Applicazioni Office Windows


Topic correlati a "[Excel VBA] Codice macro":


Chi c’è in linea

Visitano il forum: raimea e 110 ospiti