Condividi:        

Trova cella ed incolla solo se condizione vera

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

Trova cella ed incolla solo se condizione vera

Postdi Marco75CT » 23/10/16 07:27

Ciao Ragazzi,
sono in un vicolo cieco.
Ho un file (allegato) dove devono crearsi le seguenti condizioni:
1. se il valore in cella A1 è già presente in colonna A3:A1000, allora il valore in cella A2 va copiato in tutte le celle presenti nella riga corrispondente al valore in A1 e nella colonna corrispondente a VERO
2. se il valore in cella A1 non è presente in colonna A3:A1000, allora il valore in cella A1 va copiato nella prima riga libera in colonna A ed il valore in cella A2 va copiato in tutte le celle presenti nella riga corrispondente al valore in A1 e nella colonna corrispondente a VERO
Spero in un vostro aiuto.
Grazie

Allegato:
http://www.filedropper.com/esempio

Marco
Marco75CT
Utente Senior
 
Post: 146
Iscritto il: 05/08/11 11:54

Sponsor
 

Re: Trova cella ed incolla solo se condizione vera

Postdi cromagno » 23/10/16 08:36

Ciao Marco,
ma allora a ch servono le colonne dove c'è scritto FALSO se in entrambi i casi copierai il valore della cella A2 sulle celle con intestazione VERO ?? :roll:

Comunque, in base a quanto hai descritto potresti provare un codice del genere (associato all'evento Change del foglio):

Codice: Seleziona tutto
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Valore As Double, Campo As Range, Confronto As Boolean, VeroFalso As Range
Dim Cella As Range, Vuote As Boolean, Inserimento As Range

If Not Intersect(Target, Range("A1")) Is Nothing Then
    Set Campo = Range("A3:A1000")
    Valore = Range("A2").Value
    Confronto = Application.WorksheetFunction.CountIf(Campo, Target) > 0
    Vuote = Application.WorksheetFunction.CountBlank(Campo) > 0
    If Confronto = False Then
        If Vuote = False Then
            MsgBox "Non ci sono celle vuote nel range " & Campo.Address & " !!!", vbCritical + vbOKOnly, "ERRORE"
            GoTo fine
        Else
            Set Inserimento = Campo.Find("", , xlValues)
            Inserimento.Value = Range("A1").Value
            Set Inserimento = Nothing
        End If
    End If
   
    Set VeroFalso = Range("B2:L2")
    Application.EnableEvents = False
    For Each Cella In VeroFalso
        If Cella.Offset(-1, 0).Value = True Then
            Cella.Value = Valore
        End If
    Next
    Application.EnableEvents = True

fine:
Set Campo = Nothing
Set VeroFalso = Nothing
End If
End Sub


Qui il file:
http://dropcanvas.com/lljl0
Windows 10 + Office 2013 64bit(ita)
"Sono le persone che nessuno immagina che possano fare certe cose, quelle che fanno cose che nessuno può immaginare."
Avatar utente
cromagno
Utente Junior
 
Post: 66
Iscritto il: 08/10/16 16:33
Località: Sardegna

Re: Trova cella ed incolla solo se condizione vera

Postdi Marco75CT » 23/10/16 12:22

Ciao e grazie per la risposta.
Ora sono fuori e non posso testare il tuo codice.
Per risponderti, il file non comprende altre funzioni che spiegherebbero meglio la mia richiesta. In effetti, il valore vero o falso cambia sulla base di altre condizioni. Pertanto, il codice deve permettemi di inserire la tariffa (variabile) a seconda della data scelta (rappresentata dal valore vero). Capita che il listino abbia per la stessa ditta importi diversi a seconda della data.
È un po' contorto come ragionamento, lo so, ma è difficile da spiegare.
Ti farò sapere.
Ciao
Marco75CT
Utente Senior
 
Post: 146
Iscritto il: 05/08/11 11:54

Re: Trova cella ed incolla solo se condizione vera

Postdi Marco75CT » 23/10/16 12:48

Ho provato il tuo codice e purtroppo non fa quello che vorrei :( .
Sicuramente è perché io mi sono espresso male :roll: .
La tua macro, al variare di A1, cambia l'importo solo nella riga A2, in corrispondenza della colonna VERO, mentre dovrebbe inserire il valore di A2 nella riga corrispondente al valore presente in A1.
Esempio:
Se in A1 c'è il valore Val3 ed in A2 il valore 135,00 in corrispondenza la cella che interseca riga A3 e colonna VERO sarà popolata con il valore 135,00.
Se il valore in A1 è già presente nel range A3:A1000, allora i dati dovranno essere sovrascritti, altrimenti la macro inserirà nella prima cella libera in A il valore presente in A1 e poi andrà ad inserire le tariffe nelle celle corrispondenti.
Marco75CT
Utente Senior
 
Post: 146
Iscritto il: 05/08/11 11:54

Re: Trova cella ed incolla solo se condizione vera

Postdi cromagno » 23/10/16 15:46

Ciao,
potrò modificare solo domani...

Comunque è semplice come modifica, prova a capire come agisce il codice e non dovresti aver difficoltà a ottenere la riga nella quale scrivere i valori.

Ciao
Tore
Windows 10 + Office 2013 64bit(ita)
"Sono le persone che nessuno immagina che possano fare certe cose, quelle che fanno cose che nessuno può immaginare."
Avatar utente
cromagno
Utente Junior
 
Post: 66
Iscritto il: 08/10/16 16:33
Località: Sardegna

Re: Trova cella ed incolla solo se condizione vera

Postdi cromagno » 24/10/16 04:19

Marco75CT ha scritto:Esempio:
Se in A1 c'è il valore Val3 ed in A2 il valore 135,00 in corrispondenza la cella che interseca riga A3 e colonna VERO sarà popolata con il valore 135,00.


Ciao,
stavo rileggendo la tua spiegazione e non mi sembra che sia corretta...
Perchè hai scritto in corrispondena dell riga 3???
Immaginando che quello sia il caso in cui il valore non è presente nel range A3:A1000 (non l'hai scritto), dovrei trovare la prima cella Vuota in colonna A che potrebbe essere diversa dalla cella A3.....

Detto questo, ho modificato in base ad un mix tra le tue due spiegazioni:

Codice: Seleziona tutto
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
Dim Valore As Double, Campo As Range, Confronto As Boolean, VeroFalso As Range
Dim Cella As Range, Vuote As Boolean, Inserimento As Range, Riga As Long

If Not Intersect(Target, Range("A1")) Is Nothing Then
    Set Campo = Range("A3:A1000")
    Valore = Range("A2").Value
    Confronto = Application.WorksheetFunction.CountIf(Campo, Target) > 0
    Vuote = Application.WorksheetFunction.CountBlank(Campo) > 0
    If Confronto = False Then
        If Vuote = False Then
            MsgBox "Non ci sono celle vuote nel range " & Campo.Address & " !!!", vbCritical + vbOKOnly, "ERRORE"
            GoTo fine
        Else
            Set Inserimento = Campo.Find("", , xlValues)
            Inserimento.Value = Range("A1").Value
            Riga = Inserimento.Row
            Set Inserimento = Nothing
        End If
    Else
        Set Inserimento = Campo.Find(Target, , xlValues)
        Riga = Inserimento.Row
        Set Inserimento = Nothing
    End If
   
    Set VeroFalso = Range("B" & Riga & ":L" & Riga)
    VeroFalso.ClearContents
    Application.EnableEvents = False
    For Each Cella In VeroFalso
        If Cells(1, Cella.Column).Value = True Then
            Cella.Value = Valore
        End If
    Next
    Application.EnableEvents = True

fine:
Set Campo = Nothing
Set VeroFalso = Nothing
End If
End Sub


Il ifle:
http://www.filedropper.com/copiavaloresepresente

N.B.
non te l'ho detto prima e non so se te ne sei accorto leggendo il codice, comunque se il valore non è presente nel range A3:A1000 e non ci sono celle vuote disponibili (sempre in quel range), verrai avvisato con un messaggio ed il codice si interromperà.
Windows 10 + Office 2013 64bit(ita)
"Sono le persone che nessuno immagina che possano fare certe cose, quelle che fanno cose che nessuno può immaginare."
Avatar utente
cromagno
Utente Junior
 
Post: 66
Iscritto il: 08/10/16 16:33
Località: Sardegna

Re: Trova cella ed incolla solo se condizione vera

Postdi Marco75CT » 24/10/16 18:09

Perfetto!
Ho solo eliminato la riga "VeroFalso.ClearContents" perchè le tariffe sotto le colonne FALSO non devono essere cancellate, ma per il resto va benissimo.
Grazie 1000!
Marco75CT
Utente Senior
 
Post: 146
Iscritto il: 05/08/11 11:54


Torna a Applicazioni Office Windows


Topic correlati a "Trova cella ed incolla solo se condizione vera":


Chi c’è in linea

Visitano il forum: Nessuno e 103 ospiti