Condividi tramite

refresh automatico DATE modificate dall'elenco convalida dati

Anonimo
2022-08-30T17:02:35+00:00

Salve,

premettendo che non sono pratico di VBA script e che il mio problema è una variante molto molto simile a questo:

https://answers.microsoft.com/it-it/msoffice/forum/all/aiuto-aggiornamento-automatico-dei-dati-una-volta/f30be9cd-031f-4e3e-909b-6f7eb6066d6e

per il quale il moderatore Norman David Jones ha scritto, nei commenti/risposte al post, un codice VBA risolutivo e funzionante (lo riporto in basso).

Il mio caso è quasi identico ma nelle celle ho delle DATE (ad es. 30/08/2022) invece che dei semplici testi, per cui il codice VBA di Norman non funziona più. Ho provato a modificarlo ma, per mia ignoranza, non riesco a renderlo funzionante.

Vi chiedo gentilmente se potete rispondere col codice VBA modificato adatto al mio caso.

Vi ringrazio anticipatamente e mi scuso per le lacune tecniche.

Norman ha scritto:

Prova qualcosa del genere:

Fai clic dx sulla linguetta del foglio Foglio2

Seleziona l'opzione Visualizza Codice dal menu contestuale risultante

Incolla il seguente codice: 

'=========>>

Option Explicit

'--------->>

Private Sub Worksheet_Change(ByVal Target As Range)

    Dim destSH As Worksheet

    Dim rCibi As Range, rSrc As Range, rDest As Range

    Dim rCell As Range

    Dim sCiboOld As String, sCiboNew As String

    Dim arrCibiOld As Variant, arrCibiNew As Variant

    Dim Res As Variant

    Const sFoglioDestinazione As String = "Foglio1"   '<<=== Modifica

    Const sColonnaConvalidaDCati As String = "D"     '<<=== Modifica

    Set destSH = ThisWorkbook.Sheets(sFoglioDestinazione)

    Set rCibi = Me.Range("Cibi")

    Set rSrc = Intersect(rCibi, Target)

    If Not rSrc Is Nothing Then

        Set rDest = destSH.Columns(sColonnaConvalidaDCati)

        arrCibiNew = rCibi.Value

        On Error GoTo XIT

        With Application

            .EnableEvents = False

            .Undo

        End With

        arrCibiOld = rCibi.Value

        rCibi = arrCibiNew

        For Each rCell In rSrc.Cells

            sCiboNew = rCell.Value

            Res = Application.Match(sCiboNew, arrCibiNew, 0)

            sCiboOld = arrCibiOld(Res, 1)

            rDest.Replace What:=sCiboOld, _

                          Replacement:=sCiboNew, _

                          LookAt:=xlWhole, _

                          SearchOrder:=xlByRows, _

                          MatchCase:=False

        Next rCell

    End If

XIT:

    Application.EnableEvents = True

End Sub

'<<=========

Alt+Q per chiudere l'editor di VBA e tornare a Excel.

Salva il file con l'estensione xlsm.

Potresti scaricare il mio file di prova Villuccio2180605.xlsm Qui il link al file

Microsoft 365 e Office | Excel | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento

Risposta accettata dall'autore della domanda

Anonimo
2022-08-30T19:51:53+00:00

Ciao epicureo.aq,

premettendo che non sono pratico di VBA script e che il mio problema è una variante molto molto simile a questo:

https://answers.microsoft.com/it-it/msoffice/forum/all/aiuto-aggiornamento-automatico-dei-dati-una-volta/f30be9cd-031f-4e3e-909b-6f7eb6066d6e

per il quale il moderatore Norman David Jones ha scritto, nei commenti/risposte al post, un codice VBA risolutivo e funzionante (lo riporto in basso).

Il mio caso è quasi identico ma nelle celle ho delle DATE (ad es. 30/08/2022) invece che dei semplici testi, per cui il codice VBA di Norman non funziona più. Ho provato a modificarlo ma, per mia ignoranza, non riesco a renderlo funzionante.

Vi chiedo gentilmente se potete rispondere col codice VBA modificato adatto al mio caso.

Vi ringrazio anticipatamente e mi scuso per le lacune tecniche.

Norman ha scritto:

Prova qualcosa del genere:

Fai clic dx sulla linguetta del foglio Foglio2

Seleziona l'opzione Visualizza Codice dal menu contestuale risultante

Incolla il seguente codice: 

'=========>>



Option Explicit



'--------->>



Private Sub Worksheet_Change(ByVal Target As Range)



    Dim destSH As Worksheet



    Dim rCibi As Range, rSrc As Range, rDest As Range



    Dim rCell As Range



    Dim sCiboOld As String, sCiboNew As String



    Dim arrCibiOld As Variant, arrCibiNew As Variant



    Dim Res As Variant



    Const sFoglioDestinazione As String = "Foglio1"   '<<=== Modifica



    Const sColonnaConvalidaDCati As String = "D"     '<<=== Modifica



    Set destSH = ThisWorkbook.Sheets(sFoglioDestinazione)



    Set rCibi = Me.Range("Cibi")



    Set rSrc = Intersect(rCibi, Target)



    If Not rSrc Is Nothing Then



        Set rDest = destSH.Columns(sColonnaConvalidaDCati)



        arrCibiNew = rCibi.Value



        On Error GoTo XIT



        With Application



            .EnableEvents = False



            .Undo



        End With



        arrCibiOld = rCibi.Value



        rCibi = arrCibiNew



        For Each rCell In rSrc.Cells



            sCiboNew = rCell.Value



            Res = Application.Match(sCiboNew, arrCibiNew, 0)



            sCiboOld = arrCibiOld(Res, 1)



            rDest.Replace What:=sCiboOld, _



                          Replacement:=sCiboNew, _



                          LookAt:=xlWhole, _



                          SearchOrder:=xlByRows, _



                          MatchCase:=False



        Next rCell



    End If



XIT:



    Application.EnableEvents = True



End Sub



'<<=========

Alt+Q per chiudere l'editor di VBA e tornare a Excel.

Salva il file con l'estensione xlsm.

Potresti scaricare il mio file di prova Villuccio2180605.xlsm Qui il link al file

Per gestire le date, prova la seguente leggera modifica del mio vecchio codice:

'=========>>

Option Explicit

'--------->>

Private Sub Worksheet_Change(ByVal Target As Range)

Dim destSH As Worksheet 

Dim rCibi As Range, rSrc As Range, rDest As Range 

Dim rCell As Range 

Dim sCiboOld As String, sCiboNew As String 

Dim arrCibiOld As Variant, arrCibiNew As Variant 

Dim Res As Variant 

Const sFoglioDestinazione As String = **"Foglio1"     '&lt;&lt;=== Modifica** 

Const sColonnaConvalidaDCati As String = **"D"        '&lt;&lt;=== Modifica** 

Set destSH = ThisWorkbook.Sheets(sFoglioDestinazione) 

Set rCibi = Me.Range("Cibi") 

Set rSrc = Intersect(rCibi, Target) 

If Not rSrc Is Nothing Then 

    Set rDest = destSH.Columns(sColonnaConvalidaDCati) 

    arrCibiNew = rCibi.Value 

    On Error GoTo XIT 

    With Application 

        .EnableEvents = False 

        .Undo 

    End With 

    arrCibiOld = rCibi.Value 

    rCibi = arrCibiNew 

    For Each rCell In rSrc.Cells 

        sCiboNew = rCell.Value 

        Res = Application.Match(sCiboNew, arrCibiNew, 0) 

        sCiboOld = arrCibiOld(Res, 1) 

        rDest.Replace What:=**CDate(**sCiboOld**)**, \_ 

                      Replacement:=**CDate(**sCiboNew**)**, \_ 

                      LookAt:=xlWhole, \_ 

                      SearchOrder:=xlByRows, \_ 

                      MatchCase:=False 

    Next rCell 

End If 

XIT:

Application.EnableEvents = True 

End Sub

'<<=========

Potresti scaricare il mio file di prova Epicureo20220830.xlsm

Se dovessi ancora avere un problema, ti chiederei gentilmente di caricare il tuo file problematico.

===

Regards,

Norman

Immagine

La risposta è stata utile?

1 persona ha trovato utile questa risposta.
0 commenti Nessun commento

5 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2022-08-31T11:02:58+00:00

    Ciao epicureo.aq,

    fatto ;-)

    Grazie ancora!

    Ti ringrazio per il cortese riscontro.

    Alla prossima.

    ===

    Regards,

    Norman

    Immagine

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2022-08-31T10:40:33+00:00

    fatto ;-)

    Grazie ancora!

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2022-08-31T10:21:29+00:00

    Ciao epicureo.aq,

    Grazie mille Norman,

    funziona perfettamente!

    Bene, mi fa piacere!

    Per chiudere questo thread, ti chiederei gentilmente di contrassegnare la mia Risposta precedente.

    ===

    Regards,

    Norman

    Immagine

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2022-08-31T10:12:27+00:00

    Grazie mille Norman,

    funziona perfettamente!

    La risposta è stata utile?

    0 commenti Nessun commento