Condividi:        

cerca nome in un'area

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

cerca nome in un'area

Postdi robybarc » 16/08/15 11:12

ciao a tutti,
in una macro devo inserire una ricerca di un nome in un'area, quando usavo le vecchie macro 4.0 i comandi erano i seguenti:

=ERRORE(FALSO) ' per non darmi errore se non trovava il nome
=SE(FORMULA.TROVA(U8)=VERO) ' entra se trova il nome scritto nella cella U8
=SELEZIONA("RC")
=SELEZIONA("R[-1]C")
=ATTIVA.FINESTRA("Dati.xlsm")
=CARTELLA.DI.LAVORO.SELEZIONA("P0")
=SELEZIONA("R7C21:R400C24")
=MODIFICA.COPIA()
=ATTIVA.FINESTRA("Archivio.xlsm")
=CARTELLA.DI.LAVORO.SELEZIONA("SCH")
=SELEZIONA("RC")
=MODIFICA.INCOLLA() ' incolla i dati aggiornati sostituendo quelli precedenti già presenti in archivio
=MACRO.ESEGUI(N71) ' passa alla Riga 71 dopo l'aggiornamento salto le istruzioni che farebbe se non avesse trovato il nome
=FINE.SE()
' se non ha trovato il nome parte da qui e lo inserisce
=ATTIVA.FINESTRA("Dati.xlsm")
=CARTELLA.DI.LAVORO.SELEZIONA("P0")
=SELEZIONA("R3C21:R400C25")
=MODIFICA.COPIA()
=ATTIVA.FINESTRA("Archivio.xlsm")
=CARTELLA.DI.LAVORO.SELEZIONA("SCH")
=SELEZIONA("R5C6")
=INSERISCI(1) ' inserisce in archivio i dati nuovi
Riga 71 da dove riparte la macro dopo l'aggiornamento fatto entrando nel ciclo SE... FINE SE
...
...

con il codice VBA non riesco a venirne a capo, qualcuno mi può aiutare?
Grazie
Roberto
robybarc
Utente Junior
 
Post: 17
Iscritto il: 09/05/15 10:36

Sponsor
 

Re: cerca nome in un'area

Postdi alfrimpa » 16/08/15 11:31

Ciao Roby

A prescindere dalle macro di Excel 4.0 che non conosco e premesso che non ho capito bene la tua richiesta provo a postarti una funzione scritta in vba che che ricerca un valore in una tabella e ne restituisce l'indirizzo

Codice: Seleziona tutto
Function TrovaParola(Tabella_Dati As Range, Parola As Variant) As Variant
    If Parola = "" Then
        TrovaParola = ""
     Exit Function
    End If
    TrovaParola = Tabella_Dati.Find(Parola, LookAt:=xlWhole).Address(0, 0)
End Function


Questa function va inserita in un modulo standard e sul foglio di lavoro va scritto supponendo che la tabella di ricerca sia in A1:C50 ed il valore da cercare in b1:

=TrovaParola(A1:C20;B1)

Comunque ti consiglio di lasciar perdere le macro di,Excel 4.0 e di spiegare bene il tuo problema magari allegando un file di esempio.
Alfredo

Win7 + Office 2007
Avatar utente
alfrimpa
Utente Senior
 
Post: 1201
Iscritto il: 30/12/13 17:01
Località: Napoli

Re: cerca nome in un'area

Postdi alfrimpa » 16/08/15 11:50

O meglio, per evitare il messaggio di errore qualora il valore non venga trovato puoi scrivere:

SE.ERRORE(TrovaParola(A1:C20;B1);"Valore non trovato")
Alfredo

Win7 + Office 2007
Avatar utente
alfrimpa
Utente Senior
 
Post: 1201
Iscritto il: 30/12/13 17:01
Località: Napoli

Re: cerca nome in un'area

Postdi robybarc » 16/08/15 12:32

Ciao Alfredo,
se non conosci le vecchie macro 4.0 giustamente non puoi aiutarmi se non sono più specifico,
il mio scenario è questo:
nel file Dati.xlsm ho un'area ( Range("R9:Y340").Select ) che devo aggiornare od inserire nel file Archivio.xlsm.
A questo proposito seleziono tutta la riga ( Rows(10).Select ) del file Archivio.xlsm che contiene tutti i NOMI dove devo cercare quello che ho nella cella "U8" del file Dati.xlsm
Se nel file Archivio.xlsm TROVO il NOME nella cella "U8" file Dati.xlsm allora seleziono una certa area sotto il NOME del foglio Dati.xlsm e la copio nel file Archivio.xlsm a partire dal NOME uguale che ha trovato nella riga 10,
Se NON TROVO il NOME devo inserire l'area ( Range("R9:Y340").Select ) del file Dati.xlsm nel file Archivio.xlsm.

E complicato ma spero di essere stato abbastanza chiaro.
Io ho cercato di adattare l'esempio sotto ma funziona sullo stesso foglio di lavoro mentre io devo copiare da Dati.xlsm nel file Archivio.xlsm, inoltre se la cella "U8" fosse vuota copia la prima riga, e se non trova il NOME copia sempre la prima riga.

Codice: Seleziona tutto
Sub TrovaCodCli()
    Dim rng As Range
      Dim c As Range
      Dim s As String
      Dim sh As Worksheet
      Set sh = ThisWorkbook.Worksheets("SE")
      s = [VbaSeH11]
        Range("C8:C18").Select
    With sh
        Set rng = .Range("C8:C18")
        For Each c In rng
              If UCase(c.Value) = UCase(s) Then
                  c.Select
                  Exit For
              End If
          Next
      End With
      Set sh = Nothing
      Set c = Nothing
      Set rng = Nothing
    ActiveCell.Offset(0, 1).Select
    ActiveCell.Resize(1, 2).Select
    Selection.Copy
    ActiveCell.Offset(0, 8).Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _
    SkipBlanks:=False, Transpose:=False
    Application.CutCopyMode = False
End Sub

Grazie
Roberto
robybarc
Utente Junior
 
Post: 17
Iscritto il: 09/05/15 10:36

Re: cerca nome in un'area

Postdi alfrimpa » 16/08/15 12:45

Ciao Roberto

Purtroppo (per te) sono in ferie e non ho il pc con me per cui non sono in grado di fornirti un aiuto "concreto".

Ti rinnovo il consiglio di allegare file di esempio con il risultato desiderato e certamente qualcuno ti aiuterà.
Alfredo

Win7 + Office 2007
Avatar utente
alfrimpa
Utente Senior
 
Post: 1201
Iscritto il: 30/12/13 17:01
Località: Napoli

Re: cerca nome in un'area

Postdi robybarc » 18/08/15 08:00

Ciao Alfredo,
anzitutto buone vacanze,
il link del file con le istruzioni è il seguente:

https://www.dropbox.com/s/x8kpw0pjr8oaxjm/AA.zip?dl=0

a risentirci
Roberto
robybarc
Utente Junior
 
Post: 17
Iscritto il: 09/05/15 10:36

Re: cerca nome in un'area

Postdi alfrimpa » 18/08/15 13:55

Ciao Roberto

Come dicevo prima di lunedì prossimo non riesco a vedere il file.
Alfredo

Win7 + Office 2007
Avatar utente
alfrimpa
Utente Senior
 
Post: 1201
Iscritto il: 30/12/13 17:01
Località: Napoli

Re: cerca nome in un'area

Postdi Anthony47 » 18/08/15 17:10

Personalmente penso che se non descrivi il problema da risolvere, ignorando la macro 4.0 ora in uso, difficilmente la risolveremo col vba.
E purtroppo la descrizione fin qui data non e' granche':
il mio scenario è questo:
nel file Dati.xlsm ho un'area ( Range("R9:Y340").Select ) che devo aggiornare od inserire nel file Archivio.xlsm.
A questo proposito seleziono tutta la riga ( Rows(10).Select ) del file Archivio.xlsm che contiene tutti i NOMI dove devo cercare quello che ho nella cella "U8" del file Dati.xlsm
Se nel file Archivio.xlsm TROVO il NOME nella cella "U8" file Dati.xlsm allora seleziono una certa area sotto il NOME del foglio Dati.xlsm e la copio nel file Archivio.xlsm a partire dal NOME uguale che ha trovato nella riga 10,
Se NON TROVO il NOME devo inserire l'area ( Range("R9:Y340").Select ) del file Dati.xlsm nel file Archivio.xlsm.

Assumiamo (con riferimento al .zip pubblicato) che il file Archivio.xlsm sia invece SCH.xlsm, e il file Dati.xlsm sia invece PA.xlsm.
Nel file archivio (SCH.xlsm) in riga 11 (non "riga 10") ora si trovano piu' ripetizioni dello stesso nome (vedasi Jvonne, Viviana): e' questo che vuoi tu o, se il nome gia' esiste in riga 11, le relative informazioni prese da PA.xlsm devono essere "accodate sotto le info esistenti per quel nome", provvedendo all'inserimento del nome e del relativo blocco di info solo nel caso che il nominativo sia assente?
Facendo questo per tutti i Nominativi presenti in colonna U di PA.xlsm?

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

Re: cerca nome in un'area

Postdi robybarc » 19/08/15 16:40

Ciao Anthony,
giustamente come mi hai fatto notare ho fatto un po di confusione, comunque Archivio.xlsm = SCH.xlsm mentre Dati.xlsm = PA.xlsm
nel file SCH.xlsm la riga da selezionare è la 10, i numeri che ci sono corrispondono ad una data,
nel file PA.xlsm la cella U8 contiene un altro numero che corrisponde a sua volta ad una data, lo scopo della macro è di trovare il numero (data) della cella U8 di PA.xlsm nella Riga 10 di SCH.xlsm, se trova lo stesso numero dal file PA.xlsm seleziono una certa area U3:X400 e la copio nel file SCH.xlsm a partire da 5 celle sopra alla stessa data che ha trovato (in questo caso fa un aggiornamento dei dati).
Nel caso non trovasse la stessa data mi deve fare la ricerca per il giorno della settimana selezionando la riga 4 del file SCH.xlsm per cercare lo stesso giorno che c'è nella cella U2 del file PA.xlsm, e anche qui seleziona l'area in PA.xlsm e la incolla in quella dello stesso giorno in SCH.xlsm.
Se fai il Debug della macro vedi esattamente quello che dovrebbe fare in VBA, copi i file nella directory c:\AA apri il foglio MP in PA.xlsm, posizionati sulla cella B1 e clicca il tasto DX del mouse, scegli Esegui, nella nuova finestra che si apre scegli Esegui Istruzione, cosi vedi passo passo cosa fa.

Grazie
Roberto
robybarc
Utente Junior
 
Post: 17
Iscritto il: 09/05/15 10:36

Re: cerca nome in un'area

Postdi Anthony47 » 19/08/15 23:31

Ho lavorato sulla descrizione fornita, e penso che questa macro possa risolvere:
Codice: Seleziona tutto
Sub myE4m()
Dim myPath As String, myMatch, SrcSh As Worksheet
'
Set SrcSh = ThisWorkbook.Sheets("P0")
myPath = ThisWorkbook.Path & Application.PathSeparator
Workbooks.Open myPath & "SCH.xlsm"
Sheets("SCH").Activate
myMatch = Application.Match(SrcSh.Range("U8").Value, Range("10:10"), 0)
If Not IsError(myMatch) Then
    Cells(9, myMatch).Select        'Solo per debug
    SrcSh.Range("U7:X400").Copy Cells(9, myMatch)
Else
    myMatch = Application.Match(SrcSh.Range("U2"), Range("4:4"), 0)
    If Not IsError(myMatch) Then
        Cells(9, myMatch).Select        'Solo per debug
        SrcSh.Range("U7:X400").Copy Cells(9, myMatch)
    Else
        MsgBox ("Errore fatale: trovata ne' data ne' weekday; operazione abortita")
    End If
End If
Application.CutCopyMode = False
'
End Sub
Mettila in un "modulo standard del vba" all'interno di PA.xlsm ed eseguila all'occorrenza: Alt-F8; scegli myE4m dall'elenco di macro disponibili; premi Esegui.
Il file SCH.xlsm verra' aperto e compilato con i nuovi dati, ma non viene salvato; questo per permettere il controllo dell'esito.
L'area su cui viene incollato il nuovo contenuto e' quella selezionata.
Si assume che i file PA.xlsm e SCH.xlsm siano nella stessa directory.

Un commento: Trovo pericoloso che in PA.xlsm alcune celle sono calcolate sulla data contenuta in U8, ma altre (che pure dovrebbero essere legate alla data, es U2 e U7) sono invece scritte come stringhe; spero che "sopra" ci sia un meccanismo che garantisca l'allineamento.

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

Re: cerca nome in un'area

Postdi robybarc » 20/08/15 13:10

Ciao Anthony,
la macro funziona alla perfezione e la trovo geniale, l'ho provata in diversi scenari e il risultato è sempre stato preciso, naturalmente questa macro è solo un piccolo pezzo di una molto più complessa che sto man mano traducendo dal 4.0 al VBA, e i dati che mi salva sul file SCH.xlsm sono di riepilogo e non definitivi, quelli definitivi li devo elaborare successivamente dopo avere stampato e/o archiviato le schede di lavoro e dopo averle archiviate in una lista.
Mi studierò attentamente tutti i tuoi passaggi per capirne il funzionamento, perché in alcune altre macro del mio progetto dovrò adottare qualcosa di simile, purtroppo nei libri e manuali che ho non riesco quasi mai a trovare quello che cerco così devo chiedere aiuto on-line.
E' probabile che ci risentiremo ancora

Grazie
Roberto
robybarc
Utente Junior
 
Post: 17
Iscritto il: 09/05/15 10:36


Torna a Applicazioni Office Windows


Topic correlati a "cerca nome in un'area":


Chi c’è in linea

Visitano il forum: Nessuno e 91 ospiti