Condividi:        

macro che ricerca dato non assegnato

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

macro che ricerca dato non assegnato

Postdi martin » 24/10/11 14:48

Salve a tutti
ho da chiedervi un piccolo aiuto
mi servirebbe una macro che mi aiuti a compilare dei turni
settimanali dove comunque dovrei indicare dei dati fissi come riposo ,ferie, malattia
o determinati orari specifici la macro dovrebbe ultimare i restanti orari gia prestabiliti su altro foglio es:
foglio1 (orari prestabiliti)
lunedi
09:00 - 14:00
14:00 - 20:00
15:00 - 18:00
malattia
riposo
ferie
foglio2 (assegnazione)
lunedi
rossi 09:00 - 14:00
bianchi
verdi
esposito malattia
berlusconi riposo
fini ferie


quindi preparando la giornata di lunedi so che devo coprire 3 turni il si rossi puo fare solo la mattina quindi lo "fisso"
lo stesso per le persone che sono in riposo, libere o ferie.
le altri due celle dovrebbero cercare su foglio1 casualmente e inserire gli altri orari rimasti 14 -20 o 15 -18
da assegnare alle altre due persone
vorrei quanto meno un input poi mi finirei di completare la settimana.
grazie Martin
martin
Utente Senior
 
Post: 108
Iscritto il: 03/12/08 17:04

Sponsor
 

Re: macro che ricerca dato non assegnato

Postdi martin » 29/10/11 17:44

:cry:
mi sa che ho chiesto qualcosa che non si puo fare
cmq
io qualcosa ho trovato devo solo sistemarla
dovrebbe essere una macro che confronta 2colonne di fogli diversi e su uno dei fogli dovrebbe scrivere cio che manca
riconoscendo anche la cella vuota

Codice: Seleziona tutto
Sub naAB0()
Sheets("Foglio6").Select
Dim rngA As Range
Dim rngB As Range
Dim rw As Long

Set rngA = Range(Cells(3, 1), Cells(Rows.Count, 1).End(xlUp))
rw = 3
Sheets("Foglio3").Select
Set rngB = Range(Cells(1, 8), Cells(Rows.Count, 8).End(xlUp))

 
Sheets("Foglio6").Select



For Each cell In rngB
If Application.CountIf(rngA, cell.Value) = 0 Then
Cells(rw, 1).Value = cell.Value
nriga = 3
While Cells(nriga, 1) <> ""
nriga = nriga + 1
Wend
rigalibera = nriga
rw = nriga
End If

Next

End Sub

ora diciamo che funziona
nel senso che se fisso uno, due dati su foglio 6 colonna 1 cella 4,5,6 etc
azionando la macro mi riempe le celle vuote mancanti leggendole da foglio3

tranne se lascio un dato fisso sulla cella 3 colonna 1
questo ogni qualvolta aziono la macro per altri cambi o fissi si cambia
avro fatto qualche errore??
grazie
martin
Utente Senior
 
Post: 108
Iscritto il: 03/12/08 17:04

Re: macro che ricerca dato non assegnato

Postdi Flash30005 » 29/10/11 20:38

Midifica questa riga
da così
Codice: Seleziona tutto
Cells(rw, 1).Value = cell.Value

a così
Codice: Seleziona tutto
If Cells(rw, 1).Value = 0 Then Cells(rw, 1).Value = cell.Value


Elimina questa riga in quanto inutile
Codice: Seleziona tutto
ìrigalibera = nriga '<<< Inutile


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: macro che ricerca dato non assegnato

Postdi martin » 30/10/11 05:18

grazie per avermi risposto flash30005
ok si è bloccata la cella 3 colonna 1
ma mi da un dato in meno ,cella vuota.
esempio se fisso cella 3 colonna 1 or altre 2 or 3 etc
quando aziono la macro mi da una cella vuota quindi un dato in meno.
ciao
martin
Utente Senior
 
Post: 108
Iscritto il: 03/12/08 17:04

Re: macro che ricerca dato non assegnato

Postdi martin » 30/10/11 15:43

Flash30005 ha scritto:Midifica questa riga
da così
Codice: Seleziona tutto
Cells(rw, 1).Value = cell.Value

a così
Codice: Seleziona tutto
If Cells(rw, 1).Value = 0 Then Cells(rw, 1).Value = cell.Value


Elimina questa riga in quanto inutile
Codice: Seleziona tutto
ìrigalibera = nriga '<<< Inutile


Ciao


ti allego file prova
http://www.filedropper.com/confrontacolonne
martin
Utente Senior
 
Post: 108
Iscritto il: 03/12/08 17:04

Re: macro che ricerca dato non assegnato

Postdi Flash30005 » 31/10/11 05:21

Ho provato il tuo file e non mi dà alcun errore

inoltre
ho ripulito il foglio2 ed avviato la macro e non ci sono celle vuote

Non ho capito cosa intendi quando dici
martin ha scritto:esempio se fisso cella 3 colonna 1 or altre 2 or 3 etc


allego il file
Download

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: macro che ricerca dato non assegnato

Postdi martin » 31/10/11 10:54

Flash30005 ha scritto:Ho provato il tuo file e non mi dà alcun errore

inoltre
ho ripulito il foglio2 ed avviato la macro e non ci sono celle vuote

Non ho capito cosa intendi quando dici
martin ha scritto:esempio se fisso cella 3 colonna 1 or altre 2 or 3 etc


allego il file
Download

Ciao

Mi spiego meglio , infatti per questo ti ho mandato il file.
Se lo svuoti come dici tu e chiami la macro si riempe tutto ... ok

se provi a cancellare 2 , 3 ... celle a caso e lo richiami, ti lascia una cella vuota (dato mancante).
Oppure al mio dire non chiaro : se è vuoto e io scrivo 3 o 4 dati quando chiamo la macro mi da tutti i dati mancanti meno uno.

quindi funziona solo se è vuoto . this is the problem...
se tolgo invece la modifica che mi hai dato tu e metto quella che avevo io, funziona , ma ad ogni azione di macro mi cambia la prima riga (riga tre colonna 1 foglio2) e non mi sta bene, perche se io fisso tre nomi questi devono rimanere.

grazie sempre flash :( sto andando in tilt ti prego di aiutarmi...
martin
Utente Senior
 
Post: 108
Iscritto il: 03/12/08 17:04

Re: macro che ricerca dato non assegnato

Postdi Flash30005 » 31/10/11 17:36

Per "tagliare la testa al toro"

Ho realizzato un'altra macro, più spartana ma funzionante, fai i dovuti test e fai sapere

Codice: Seleziona tutto
Sub CopiaSeAssente()
Set ws1 = Worksheets("Foglio1")
Set Ws2 = Worksheets("Foglio2")
UR1 = ws1.Range("A" & Rows.Count).End(xlUp).Row
For RR1 = 1 To UR1
UR2 = Ws2.Range("A" & Rows.Count).End(xlUp).Row + 1
    TR = 0
    CV = 0
    TCV = 0
    Val1 = ws1.Cells(RR1, 1).Value
    For RR2 = 3 To UR2
        If Val1 = Ws2.Cells(RR2, 1).Value Then TR = 1
        If Ws2.Cells(RR2, 1).Value = 0 Then
            If TCV = 0 Then Riga = RR2
            TCV = 1
        End If
    Next RR2
    If TCV = 1 And TR = 0 Then Ws2.Cells(Riga, 1).Value = Val1
Next RR1
End Sub


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: macro che ricerca dato non assegnato

Postdi martin » 01/11/11 01:38

allora !!
ho provato la tua nuova macro è ok , però se non c'è nessun dato sul foglio 2 non richiama nulla,
devi almeno inserire una dato esistente.
se scrivi maiuscolo ,non riconosce.
ma tutto sommato mi sta bene.

Ma chiariscimi quello che ho fatto io di cui ti allego file, in sostanza alla 1^ macro che in precedenza mi avevi modificato ho aggiunto una memoria set da rileggere sul
foglio 2 su unaltra colonna , funziona !! casualmente avevo pero scritto i dati a partire da range k1 e mi dava lo stesso problema
poi per caso li ho scesi a partire da K3 e funziona.(vedi file)
Codice: Seleziona tutto
Sub naAB0()
Sheets("Foglio2").Select
Dim rngA As Range
Dim rngB As Range
Dim rw As Long

Set rngA = Range(Cells(3, 1), Cells(Rows.Count, 1).End(xlUp))
rw = 3
Sheets("Foglio1").Select
Set rngB = Range(Cells(1, 1), Cells(Rows.Count, 1).End(xlUp))

 
Sheets("Foglio2").Select
Set rngB = Range(Cells(1, 11), Cells(Rows.Count, 11).End(xlUp)) '(aggiunto)

For Each cell In rngB
Set rngA = Range(Cells(3, 1), Cells(Rows.Count, 1).End(xlUp))


If Application.CountIf(rngA, cell.Value) = 0 Then
If Cells(rw, 1).Value = 0 Then Cells(rw, 1).Value = cell.Value

'Cells(rw, 1).Value = cell.Value
nriga = 3
While Cells(nriga, 1) <> ""
nriga = nriga + 1
Wend

funziona anche se no c'è nessun dato su foglio 2 ,e mi riconosce il maiuscolo

devo solo sistemare sullo stesso foglio una colonna che poi nasconderò, che mi rilegge i dati da foglio 1
tranne che tu riesci a trovare la soluzione sulla macro direttamente.
http://www.filedropper.com/2confrontacolonne
alla fine sembrava un incubo ma mi hai risolto il problema.
fammi sapere
ciao grazie
martin
Utente Senior
 
Post: 108
Iscritto il: 03/12/08 17:04

Re: macro che ricerca dato non assegnato

Postdi Flash30005 » 01/11/11 09:19

Ho scaricato il tuo file
nel foglio 2 colonna A ho cancellato la lettera "m"
nel foglio1 colonna A ho aggiunto "x" e "y" dopo la lettera "z"
ho avviato la mia macro ed ha funzionato regolarmente inserendo la m dove era e aggiungendo x e y alla fine delle righe.
____

Cosa che non fa la tua macro modificata
il set da te inserito
Codice: Seleziona tutto
Set rngB = Range(Cells(1, 11), Cells(Rows.Count, 11).End(xlUp))

Prende in esame la colonna K infatti il codice cells prevede cells(riga, colonna) e la colonna 11 corrsiponde appunto alla colonna K

Altro non so dirti

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: macro che ricerca dato non assegnato

Postdi martin » 01/11/11 10:19

Infatti quella che userò nel mio programma definito che poi è un programma di turni e proprio la tua macro
per il semplice motivo che se devo aggiungere un nominativo e/o un orario lo ritrova inserendolo senza bisogno di andare sul foglio uno, questa era una cosa che dovevo prevedere.
La mia domanda era specifica sul fatto che a foglio2 vuoto se provi ad azionare la macro non ti da alcun dato
e se il nome (ma questo non è di importanza) erroneamente è scritto in maiuscolo te lo riconosce come nuovo, solo questo se potevi risolvere per favore.

Della mia era sottinteso che in attesa di una tua risposta ieri avevo fatto delle prove e test ed ero riuscito
ad arrivare a quella soluzione, e pensavo magari se con la tua esperieza che est di gran lunga superiore alla mia riusciva ad esserti chiaro dove si doveva modificare la macro per avere gli stessi risultati senza inserire quella colonna k . Grazie sempre per la tua disponibiltà un abbraccio Martin.
martin
Utente Senior
 
Post: 108
Iscritto il: 03/12/08 17:04

Re: macro che ricerca dato non assegnato

Postdi Flash30005 » 01/11/11 22:37

Sostituisci la macro anche se c'è solo una riga codice in più e una modificata (specifico nella macro come intervengono)
Codice: Seleziona tutto
Sub CopiaSeAssente()
Set ws1 = Worksheets("Foglio1")
Set Ws2 = Worksheets("Foglio2")
UR1 = ws1.Range("A" & Rows.Count).End(xlUp).Row
For RR1 = 1 To UR1
UR2 = Ws2.Range("A" & Rows.Count).End(xlUp).Row + 1
If UR2 < 3 Then UR2 = 3  '<<<< aggiunegendo questa interviene se il foglio2 è vuoto
    TR = 0
    CV = 0
    TCV = 0
    Val1 = ws1.Cells(RR1, 1).Value
    For RR2 = 3 To UR2
        If UCase(Val1) = UCase(Ws2.Cells(RR2, 1).Value) Then TR = 1 '<<< modificando questa si evita di trascrivere se il carattere è maiuscolo o miniscolo
        If Ws2.Cells(RR2, 1).Value = 0 Then
            If TCV = 0 Then Riga = RR2
            TCV = 1
        End If
    Next RR2
    If TCV = 1 And TR = 0 Then Ws2.Cells(Riga, 1).Value = Val1
Next RR1
End Sub


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: macro che ricerca dato non assegnato

Postdi martin » 01/11/11 23:56

Flash30005 ha scritto:Sostituisci la macro anche se c'è solo una riga codice in più e una modificata (specifico nella macro come intervengono)
Codice: Seleziona tutto
Sub CopiaSeAssente()
Set ws1 = Worksheets("Foglio1")
Set Ws2 = Worksheets("Foglio2")
UR1 = ws1.Range("A" & Rows.Count).End(xlUp).Row
For RR1 = 1 To UR1
UR2 = Ws2.Range("A" & Rows.Count).End(xlUp).Row + 1
If UR2 < 3 Then UR2 = 3  '<<<< aggiunegendo questa interviene se il foglio2 è vuoto
    TR = 0
    CV = 0
    TCV = 0
    Val1 = ws1.Cells(RR1, 1).Value
    For RR2 = 3 To UR2
        If UCase(Val1) = UCase(Ws2.Cells(RR2, 1).Value) Then TR = 1 '<<< modificando questa si evita di trascrivere se il carattere è maiuscolo o miniscolo
        If Ws2.Cells(RR2, 1).Value = 0 Then
            If TCV = 0 Then Riga = RR2
            TCV = 1
        End If
    Next RR2
    If TCV = 1 And TR = 0 Then Ws2.Cells(Riga, 1).Value = Val1
Next RR1
End Sub


Ciao

Okkkkkkkk! alla grande
grazie mille Flash
martin
Utente Senior
 
Post: 108
Iscritto il: 03/12/08 17:04

Re: macro che ricerca dato non assegnato

Postdi martin » 04/11/11 12:12

Flash volevo chiederti un'ultima cosa , sviluppando il programma che come avevo accennato serve per una turnistica
vorrei saper se su questa macro è possibile modificare la funzione anziche confrontare per colonna , fare il confronto per rigo.
quindi sette colonne per i giorni della settimana e 5 sei righi circa per provare
in quanto ho avuto necessita di compilare anche per rigo e quindi la stessa funzione mi servirebbe che funzioni anche per rigo.
ti ringrazio per la tua disponibilità
ciao martin
martin
Utente Senior
 
Post: 108
Iscritto il: 03/12/08 17:04

Re: macro che ricerca dato non assegnato

Postdi Flash30005 » 04/11/11 12:48

Certo che si può fare!
Ma dovresti, come la solito, inviare il file-esempio per sapere la distribuzione dei dati input e output

Ciao

P.s ho notato che in ogni risposta Quoti il post precedente quando dovresti, se non vuoi rimarcare una o più frasi scritte, rispondendo semplicemente con l'apposito comando "Rispondi" collocato alla fine della pagina del topic e non usando i comandi posti nel/i messaggi precedenti.
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: macro che ricerca dato non assegnato

Postdi martin » 05/11/11 11:41

Ok scusa per l'errore (da senior che sono stato promosso non dovevo farlo!)
Si
ti mando il file di prova a cui sto lavorando come noterai sul foglio 6 ho fissato alcuni riposi e due orari
che servono per indicare che quelle persone devono assolutamente fare quelli.
gli altri azionando le macro verranno in automatico letti dal foglio 2 dove organizzo gli orari da coprire in settimana
che poi saranno assegnati dal foglio 6
noterai che ho anche aggiunto un "mescola dati" per averli sempre diversi quando cancello e richiamo la macro.
un'altra colonna mi fa invece la somma delle ore

gli orari doppi li ho dovuti dividere aggiungendo 1,2,3 ecc. perchè non me li scriveva
nel senso che possono esserci 1,2,3,4 ecc persone nello stesso turno.

il problema alla quale non ho fatto caso che puo esserci la possibilita che su un rigo di un dipendente ci siano piu riposi o piu orari uguali.
nella realta logica di solito do un riposo settimanale 3 orari pom 3 di notte ,chi fa la notte logicamente non puo fare la mattina il giorno dopo (specialmente se fa un orario che viene la mattina stacca e ritorna la sera (solo una volta a settimana)).

come vedi per questo mi serve realizzare il turno singolo per rigo per dipendente, dopo averne fatti 2,3,4 gli altri
al richiamo macro dovrebbero riempirsi in automatico considerando dal foglio 2 la disponibilita per qul giorno.
e quindi inserire gli orari rimanenti.
penso di essere stato chiaro e ti ringrazipo sempre
martin
http://www.filedropper.com/110proveturni
martin
Utente Senior
 
Post: 108
Iscritto il: 03/12/08 17:04

Re: macro che ricerca dato non assegnato

Postdi Flash30005 » 08/11/11 03:04

Ho scaricato il file
pensavo di trovare una riga da confrontare con un'altra e invece ho trovato una matrice di date e orari :roll:
In pratica un foglio completamente diverso da quello realizzato finora.

In questo foglio quale riga vuoi confrontare e rispetto a cosa?

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: macro che ricerca dato non assegnato

Postdi martin » 09/11/11 11:53

hai pienamente ragione cerco di spiegarmi meglio.
il confronto deve essere fatto dal rigo foglio 6 sul rigo foglio 2.

ma io ho risolto dando un valore manuale alla tua macro "RR2 = Range("a1")" scegliendo cosi manualmente il rigo dove operare sul foglio 6. e mi va bene. ma visto nelle altre colonne stessa riga posso aver prefissato un riposo ad esempio
venerdi ,se io martedi attivo la macro nel confronto essa deve saltare il riposo perche gia c'è
quindi la macro deve operare a condizione.

mi devi aiutare solo nel trovare la formula adatta da inserire per dare delle condizioni:
es:
ho inserito dopo il "If TCV = 1 And TR = 0 Then Ws2.Cells(Riga, 3).Value = val1"

Z = Range("b3")
i = Range("c3")

a= riposo1
b=riposo2
c= riposo3
d=riposo4

If Z = a And i = a Then Selection.ClearContents '(cosi cancella e mi ricerca e scrive il valore successivo)
ma se ci sono piu condizioni come faccio?
io ho provato nella mia ignoranza a fare
"If Z = a or b or c or d And i = a or b or c or d And Then Selection.ClearContents "
ma logicamente non funziona!
siccome le condizioni saranno tante come posso fare?.

considera che:

come hai visto le macro sono una per ogni giorno che confrontano il valore mancante su foglio 6 (ho aggiunto anche un mescola dati per avere valori casuali)
essendo che ci sono piu persone che fanno lo stesso turno o sono di riposo ho dovuto scrivere sul foglio 2 riposo1 ,riposo2, riposo3... anche negli orari 21:00-0200 1..2..3 ecc per avere cosi il dato univoco.

si puo semplificare togliendo la numerazione accanto il valore ma avere sempre la stessa condizione nel confronto?
nel senso che se sono 4 sono i riposi 4 devono essere i confronti e scritti anche se uguali.

in questo caso sarebbero minori le condizioni da fare dopo sul foglio6 come suddetto.
perche considera riposo1 deve cercare se uguale riposo2 riposo3 riposo4
a sua volto riposo2 deve cercare riposo1 riposo3 riposo4 (troppe condizioni)

se non ti è chiaro per favore dimmelo
ciao
martin
Utente Senior
 
Post: 108
Iscritto il: 03/12/08 17:04

Re: macro che ricerca dato non assegnato

Postdi Flash30005 » 09/11/11 13:33

martin ha scritto:il confronto deve essere fatto dal rigo foglio 6 sul rigo foglio 2.

Nel file da te inviato c'è il foglio6 e foglio3 :roll:

Comunque vedo che sai cosa vuoi ottenere e ti occorrono le condizioni (tante)
bene usa Select Case con questa funzione ne potrai mettere infinite

cerca gli esempi nella guida
per fare prima scrivi nel vba
Select Case
posizioni il mouse nella parola Case (cursore lampeggiante all'interno della parola) poi premi F1
e vedi l'esempio
ci vuole poco per applicarlo al tuo quesito

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: macro che ricerca dato non assegnato

Postdi martin » 10/11/11 15:52

ciao
si scusa ho sbagliato foglio era foglio3 nell'esempio.
io ci sono andato in help f1 ma mi spiega poco ho fatto altri tentativi tutta la notte e non ci riesco
se puoi darmi un accenno tu
mi faresti un favore.

una delle condizioni è: " if colonna b terzo rigo = riposo1 o riposo2 o riposo3 o riposo4 and colonna c, d, e,f,g,h terzo rigo = riposo1 o riposo2 o riposo3 o riposo 4 Then Selection.ClearContents.

(se avevo prefissato un riposo in altro giorno )

un'altra : if colonna b terzo rigo = "21:00-02:00" o "19-02" and colonna b terzo rigo = "10-14" o 10-15 o 10-18 Then Selection.ClearContents
(chi fa la notte non fa la mattina)
(le condizioni si sempilficherebbero se nella tua macro iniziale possiamo togliere in riposo1 o riposo2 il numero finale pur rimanendo univoco).

provo cosi tutto e ti faccio sapere
ciao grazie martin
grazie martin
martin
Utente Senior
 
Post: 108
Iscritto il: 03/12/08 17:04

Prossimo

Torna a Applicazioni Office Windows


Topic correlati a "macro che ricerca dato non assegnato":


Chi c’è in linea

Visitano il forum: Nessuno e 144 ospiti