Condividi:        

Funzioni per foglio Prima Nota

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

Funzioni per foglio Prima Nota

Postdi libraio » 21/01/20 15:07

SO Windows 7 + EXCEL 2003

Un saluto a tutti,
sto creando un foglio di Prima Nota, il più possibile "automatizzato".

Vorrei applicare la seguente funzione.
=SE(B2="Incasso Fatt.";-G2;0)
ma non ottengo il risultato voluto, perchè la cella B2 contiene un testo in parte ripetuto (Incasso fatt.) ed in parte variabile (il n. del documento). Io vorrei che il risultato in cella G2 fosse sottratto nella cella scelta - in cui applico la funzione - indipendentemente dalla parte variabile del testo.
Mi aiutate a correggere la formula?...

Altro caso che non riesco a risolvere:
= se la cella B2 contiene il testo "POS" vorrei che il cursore si spostasse automaticamente nella cella E2.
E' possibile?

Grazie per il prezioso aiuto
libraio
Utente Senior
 
Post: 334
Iscritto il: 04/01/10 20:31

Sponsor
 

Re: Funzioni per foglio Prima Nota

Postdi Anthony47 » 21/01/20 16:32

La prima formula potrebbe essere
Codice: Seleziona tutto
=SE(VAL.ERRORE(RICERCA("Incasso Fatt";B2));0;-G2)

Quanto al posizionamento automatico in funzione del contenuto di colonna B, devi procedere con una macro di WorksheetChange, ad esempio:
Codice: Seleziona tutto
Private Sub Worksheet_Change(ByVal Target As Range)
Dim ckArea As String
'
ckArea = "B2:B100"      '<<< L'area a cui si applichera' la regola
If Not Application.Intersect(Target, Range(ckArea)) Is Nothing Then
    If Target.Count = 1 Then
        If InStr(1, Target.Value, "POS", vbBinaryCompare) > 0 Then
            Target.Offset(0, 3).Select
        End If
    End If
End If
End Sub

La riga marcata <<< identifica a quale intervallo la regola sara' applicata

Ambedue le proposte, per le poche informazioni fornite, guardano l'intero contenuto della cella. Nella formula tuttavia ho scelto di ignorare Maiuscolo/Minuscolo (quindi contenuti tipo "Questo e' un INCASSO Fattura" oppure "incasso Fattura" porteranno al risultato -G2); nella macro invece ho scelto di cercare la presenza di POS (maiuscolo; quindi contenuti tipo "Posizione netta" oppure "pagamento via pos" non produrranno effetto, mentre contenuti tipo "Pagamento POS" oppure "POS" ma anche "Valore POSITIVO" produrranno l'effetto)

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

Re: Funzioni per foglio Prima Nota

Postdi libraio » 21/01/20 19:59

Grazie Anthony,
la prima formula risponde perfettamente alle mie esigenze

Riguardo il posizionamento automatico, ho copiato il codice, ma potrei aver commesso un errore... Non ottengo purtroppo il risultato sperato.
Qui puoi trovare l'immagine del codice, così come l'ho copiato:
Immagineupload to photos site

Rinnovo il mio ringraziamento, confidando in "ulteriori sviluppi"...
libraio
Utente Senior
 
Post: 334
Iscritto il: 04/01/10 20:31

Re: Funzioni per foglio Prima Nota

Postdi Anthony47 » 21/01/20 20:42

Dopo 10 anni mi sembrava che potessi omettere che il codice della WorksheetChange va posizionato "nel modulo vba del foglio su cui lavori", e non in un Modulo standard :D

Quindi, partendo da Excel:
a) Tasto destro sul Tab col nome del Foglio a cui il codice va agganciato
b) Scegli Visualizza codice
In questo modo si aprira' l'ambiente Vba direttamente sul modulo in cui il codice va inserito

Riprova...
Avatar utente
Anthony47
Moderatore
 
Post: 19438
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Funzioni per foglio Prima Nota

Postdi libraio » 22/01/20 13:18

Grazie Anthony,
ammiro la decennale pazienza che mi dedichi... :)
Non avevo mai applicato una Worksheet Change; adesso lo so.

Ho tentato di implementare la Worksheet Change con un altro comando, ma "capra resto":
vorrei applicare la stessa funzione di "POS" con "VERSAMENTO" e "INCASSO GIORNALIERO", si possono inserire nella stessa Worksheet Change?
Ti chiedo scusa per questa ulteriore richiesta, ma il mio è un work in progress, dopo anni di prime note compilate manualmente, e, con il tuo insostituibile contributo, sto realizzando un bel lavoretto.
libraio
Utente Senior
 
Post: 334
Iscritto il: 04/01/10 20:31

Re: Funzioni per foglio Prima Nota

Postdi Anthony47 » 22/01/20 13:49

vorrei applicare la stessa funzione di "POS" con "VERSAMENTO" e "INCASSO GIORNALIERO", si possono inserire nella stessa Worksheet Change?
La risposta e' Sì, ma ovviamente bisogna lavorare sulle condizioni complete.

Se parliamo di altre voci inseribili nella stessa area di POS, allora basta aggiungere altre If con le condizioni da esaminare e l'operazione da eseguire. Ad Esempio:
Codice: Seleziona tutto
        If InStr(1, Target.Value, "POS", vbBinaryCompare) > 0 Then
            Target.Offset(0, 3).Select              'B + 3 = E
        ElseIf InStr(1, Target.Value, "VERSAMENTO", vbBinaryCompare) > 0 Then
            Target.Offset(0, 4).Select              '<<< B + 4 = F
        ElseIf InStr(1, Target.Value, "GIORNALIERO", vbBinaryCompare) > 0 Then
            Target.Offset(0, 5).Select              '<<< B + 4 = G
        'altri ElseIf
        '   Altri Select
        End If

Ovviamente dovresti modificare le nuove If in modo che selezionino le colonne desiderate, agendo sulle istruzioni marcate <<<

Se invece l'area in cui si scrivono questi nuovi valori e' diversa da B2:B100 allora andrebbe ripetuto l'intero blocco, da ckArea = "xxx:yyy" fino alla fine

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

Re: Funzioni per foglio Prima Nota

Postdi libraio » 22/01/20 14:13

Fantastico!
Grazie di cuore
libraio
Utente Senior
 
Post: 334
Iscritto il: 04/01/10 20:31

Re: Funzioni per foglio Prima Nota - AGGIORNAMENTO

Postdi libraio » 06/11/23 19:43

So Windows 7 + Office 2003

Ciao a tutti,
vorrei implementare la preziosa macro di WorksheetChange di Anthony, consegnatami da Anthony nel post 21/01/20.
Le stringhe che vorrei aggiungere sono:

Codice: Seleziona tutto
ckArea = "C2:C10000"      '<<< L'area a cui si applichera' la regola
If Not Application.Intersect(Target, Range(ckArea)) Is Nothing Then
    If Target.Count = 1 Then
        If InStr(1, Target.Value, "BCCPAY", vbBinaryCompare) > 0 Then
            Target.Offset(0, 2).Select
        ElseIf InStr(1, Target.Value, "PAGOBANCOMAT", vbBinaryCompare) > 0 Then
            Target.Offset(0, 2).Select              '<<< B + 4 = F
        ElseIf InStr(1, Target.Value, "AMEX", vbBinaryCompare) > 0 Then
            Target.Offset(0, 2).Select              '<<< B + 4 = F
        'altri ElseIf
        '   Altri Select
        End If

Ne risulta il seguente codice:

Codice: Seleziona tutto
Private Sub Worksheet_Change(ByVal Target As Range)
Dim ckArea As String
'
ckArea = "B2:B10000"      '<<< L'area a cui si applichera' la regola
If Not Application.Intersect(Target, Range(ckArea)) Is Nothing Then
    If Target.Count = 1 Then
        ElseIf InStr(1, Target.Value, "VERSAMENTO", vbBinaryCompare) > 0 Then
            Target.Offset(0, 3).Select              '<<< B + 4 = F
        ElseIf InStr(1, Target.Value, "Ricarica carta prepagata", vbBinaryCompare) > 0 Then
            Target.Offset(0, 6).Select              '<<< B + 4 = F
        ElseIf InStr(1, Target.Value, "INCASSO GIORNALIERO", vbBinaryCompare) > 0 Then
            Target.Offset(0, 2).Select              '<<< B + 4 = G
        'altri ElseIf
        '   Altri Select
        End If
ckArea = "C2:C10000"      '<<< L'area a cui si applichera' la regola
If Not Application.Intersect(Target, Range(ckArea)) Is Nothing Then
    If Target.Count = 1 Then
        If InStr(1, Target.Value, "BCCPAY", vbBinaryCompare) > 0 Then
            Target.Offset(0, 2).Select
        ElseIf InStr(1, Target.Value, "PAGOBANCOMAT", vbBinaryCompare) > 0 Then
            Target.Offset(0, 2).Select              '<<< B + 4 = F
        ElseIf InStr(1, Target.Value, "AMEX", vbBinaryCompare) > 0 Then
            Target.Offset(0, 2).Select              '<<< B + 4 = F
        'altri ElseIf
        '   Altri Select
        End If
        End If
        End If
End Sub


che, ovviamente, non funziona! Dove sbaglio?
E' possibile inserire una seconda condizione (ck area) nella medesima macro?
Grazie per l'aiuto
libraio
Utente Senior
 
Post: 334
Iscritto il: 04/01/10 20:31

Re: Funzioni per foglio Prima Nota

Postdi Anthony47 » 07/11/23 00:46

la prima riga dopo If Target.Count=1 dovrebbe essere If Instr(etc etc ma in uno dei due blocchi te ne sei dimenticato...
Avatar utente
Anthony47
Moderatore
 
Post: 19438
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Funzioni per foglio Prima Nota

Postdi libraio » 07/11/23 10:40

Grazie Anthony,
come avrai notato ho "scomposto" la riga Pos del primo codice ma, cancellando la riga originaria, ho dimenticato di convertire la nuova prima riga...
Gli esami non finiscono mai (e io resto un ripetente impenitene).
Ancora grazie
libraio
Utente Senior
 
Post: 334
Iscritto il: 04/01/10 20:31

Re: Funzioni per foglio Prima Nota

Postdi libraio » 22/09/24 17:37

So Windos7PRO + Excel 2003

Ciao a tutti e ben ritrovati.
Vorrei, un volta im più, implementare la WorksheetChange di Anthony nel post 21/01/20.
Vorrei (ma non riesco..) aggiungere questa funzione:

Codice: Seleziona tutto
B2          C2
RIBA        MONDADORI

A prescindere dal fornitore, dopo aver compilato la cella C2, se la cella B2 contiene la voce "RIBA", il cursore si sposta in H2.
Ovviamente, poi, applicherei le varianti di pagamento (RID,MAV, ecc.).

Potete, ancora una volta, aiutarmi? :oops:
Grazie
libraio
Utente Senior
 
Post: 334
Iscritto il: 04/01/10 20:31

Re: Funzioni per foglio Prima Nota

Postdi Anthony47 » 22/09/24 18:23

Probabilmente:
Codice: Seleziona tutto
Private Sub Worksheet_Change(ByVal Target As Range)
Dim ckArea As String
'
ckArea = "B2:B100"      '<<< L'area a cui si applichera' la regola
If Not Application.Intersect(Target, Range(ckArea)) Is Nothing Then
    If Target.Count = 1 Then
        If InStr(1, Target.Value, "POS", vbBinaryCompare) > 0 Then
            Target.Offset(0, 3).Select
        End If
    End If
End If
'+++Gestione C2-B2:
If Target.Address = "$C$2" Then
    If Range("B2") = "RIBA" Then
        Range("H2").Select
    End If
End If
End Sub
Ho aggiunto un blocco di istruzioni
Avatar utente
Anthony47
Moderatore
 
Post: 19438
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Funzioni per foglio Prima Nota

Postdi libraio » 30/09/24 19:12

Ciao Anthony,
riscontro solo ora la tua soluzione perché un imprevisto mi ha tenuto fuori sede fino ad oggi.
Ho accodato il tuo codice al Worsheet già in uso e vivia implementato, ma non ottengo alcun risultato...
Mi inginocchio sui ceci e ti trasmetto in codice con l'aggiunta della tua soluzione in fondo:


Codice: Seleziona tutto
Private Sub Worksheet_Change(ByVal Target As Range)
Dim ckArea As String
'
ckArea = "B2:B10000"      '<<< L'area a cui si applichera' la regola
If Not Application.Intersect(Target, Range(ckArea)) Is Nothing Then
    If Target.Count = 1 Then
        If InStr(1, Target.Value, "VERSAMENTO", vbBinaryCompare) > 0 Then
            Target.Offset(0, 3).Select              '<<< B + 4 = F
        ElseIf InStr(1, Target.Value, "Ricarica carta prepagata", vbBinaryCompare) > 0 Then
            Target.Offset(0, 6).Select              '<<< B + 4 = F
        ElseIf InStr(1, Target.Value, "INCASSO GIORNALIERO", vbBinaryCompare) > 0 Then
            Target.Offset(0, 2).Select              '<<< B + 4 = G
        'altri ElseIf
        '   Altri Select
        End If
        End If
        End If
ckArea = "C2:C10000"      '<<< L'area a cui si applichera' la regola
If Not Application.Intersect(Target, Range(ckArea)) Is Nothing Then
    If Target.Count = 1 Then
        If InStr(1, Target.Value, "BCCPAY", vbBinaryCompare) > 0 Then
            Target.Offset(0, 2).Select
        ElseIf InStr(1, Target.Value, "PAGOBANCOMAT", vbBinaryCompare) > 0 Then
            Target.Offset(0, 2).Select              '<<< B + 4 = F
        ElseIf InStr(1, Target.Value, "AMEX", vbBinaryCompare) > 0 Then
            Target.Offset(0, 2).Select              '<<< B + 4 = F
        'altri ElseIf
        '   Altri Select
        End If
        End If
        End If
ckArea = "B2:B10000"      '<<< L'area a cui si applichera' la regola
If Not Application.Intersect(Target, Range(ckArea)) Is Nothing Then
    If Target.Count = 1 Then
        If InStr(1, Target.Value, "POS", vbBinaryCompare) > 0 Then
            Target.Offset(0, 3).Select
        End If
    End If
End If
'+++Gestione C2-B2:
If Target.Address = "$C$2" Then
    If Range("B2") = "RIBA" Then
        Range("H2").Select
    End If
End If
End Sub


Dove sbaglio? :oops:
Grazie per la tua paziente disponibilità
Libraio
libraio
Utente Senior
 
Post: 334
Iscritto il: 04/01/10 20:31

Re: Funzioni per foglio Prima Nota

Postdi Anthony47 » 30/09/24 20:25

Mah... Il codice controlla se la cella modificata e' C2; se Sì e in B2 c'e' scritto esattamente RIBA allora dovrebbe selezionare H2.
Prova togliendo l'istruzione If Range("B2") = "RIBA" Then e usando
Codice: Seleziona tutto
    If InStr(1, Range("B2").Value, "RIBA", vbTextCompare) > 0 Then

Questa controlla che in B2 ci sia la sequenza riba o Riba o RIBA, anche all'interno di una stringa piu' lunga, es uno spazio in fondo ma, purtroppo, anche all'interno di una parola /frase piu' complessa tipo "Abbiamo applicato un ribasso"

Se anche così non funziona (e la cosa da fare e' proprio quella che ti ho descritto) allora ...devi portare il PC a Lourdes
Avatar utente
Anthony47
Moderatore
 
Post: 19438
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Funzioni per foglio Prima Nota

Postdi maxpit » 30/09/24 21:17

Buonasera libraio,

ma con questa frase cosa intendi
libraio ha scritto:A prescindere dal fornitore, dopo aver compilato la cella C2, se la cella B2 contiene la voce "RIBA", il cursore si sposta in H2.

che deve valere solo per C2 o per tutte le righe che in B contengono solo RIBA a partire dalla seconda (magari anche con Ri.Ba.)?

Perché se così fosse, il pezzo di codice potrebbe tranquillamente andare nel secondo blocco della Private Sub Worksheet_Change quello che si occupa di esaminare la colonna C

Codice: Seleziona tutto
            [...]
            ElseIf Len(Target.Text) <> 0 Then
                If Replace$(UCase$(Trim$(Cells(Target.Row, 2))), ".", "") = "RIBA" Then
                    Target.Offset(0, 5).Select
                End If
            'altri ElseIf
            '   Altri Select
            End If
            [...]

dove con [...] intendo tutto il codice che precede e che segue.

Prova e fai sapere.
Avatar utente
maxpit
Utente Junior
 
Post: 19
Iscritto il: 04/08/24 11:59

Re: Funzioni per foglio Prima Nota

Postdi libraio » 01/10/24 19:30

Grazie per l'insostituibile contributo.
Ho provato la soluzione di maxpit e funziona a meraviglia!
Rispondo al tuo quesito: il codice deve valere per tutte le righe che in 'C' sono piene (creditore) e nell'adiacente cella 'B' contengono la voce "RIBA".
Ancora grazie
libraio
libraio
Utente Senior
 
Post: 334
Iscritto il: 04/01/10 20:31


Torna a Applicazioni Office Windows


Topic correlati a "Funzioni per foglio Prima Nota":


Chi c’è in linea

Visitano il forum: Anthony47 e 12 ospiti