È soltanto un Pokémon con le armi o è un qualcosa di più? Vieni a parlarne su Award & Oscar!

Excel Forum Per condividere esperienze su Microsoft Excel

Codice VBA che agisce su tutta la colonna

  • Messaggi
  • OFFLINE
    Gibbo989
    Post: 2
    Registrato il: 03/04/2020
    Età: 34
    Utente Junior
    Excel 2006
    00 06/04/2020 10:47
    Buongiorno a tutti,
    vorrei proporvi questo quesito:

    Nella colonna "A" ho la possibilità di inserire 6 valori (1 - OFFERTA, 2 - PROGETTAZIONE, 3 - PRODUZIONE, 4 - CONSUNTIVARE, 5 - CHIUSA, 6 - ANNULLATA) e vorrei che la colonna "C" si compilasse automaticamente con la data in cui viene inserito il valore "3 - PRODUZIONE" e che tale data non cambiasse più (a meno che il valore della cella "A" non venisse sostituito per poi ritornare a "3 - PRODUZIONE". In quel caso dovrebbe aggiornarsi.)

    Le colonne "B" e "D" si compileranno automaticamente in base alla colonna "C" con semplici funzioni "SE":

    Col. B = =SE($C1="";"";($C1-2))
    Col. D = =SE($C1="";"";SE($C1
    Purtroppo sono un vero e proprio neofita con il software VBA, ma vorrei imparare.
    Ho seguito qualche video online..credo anche di averli capiti...ma purtroppo comincio a pensare che la mia idea sia troppo avanzata per le mia capacità.

    Qualcuno può aiutarmi?
    Grazie in anticipo.

    Alex

    P.s. allego file excel per comprendere meglio. 👍
  • OFFLINE
    dodo47
    Post: 2.634
    Registrato il: 06/04/2013
    Utente Veteran
    2010
    10 06/04/2020 11:19
    ciao
    nel vba del foglio1, prova:

    Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Count > 1 Then Exit Sub
    If Not Intersect(Target, Range("A2:A11")) Is Nothing Then
        If Target.Value = "3 - PRODUZIONE" Then
            Cells(Target.Row, 3) = Date
        Else
            Cells(Target.Row, 3) = ""
        End If
    End If
    End Sub


    saluti



    Domenico
    Win 10 - Excel 2016
  • OFFLINE
    Gibbo989
    Post: 2
    Registrato il: 03/04/2020
    Età: 34
    Utente Junior
    Excel 2006
    00 06/04/2020 11:37
    Grazie Domenico
    Ti ringrazio Domenico, ma adesso la situazione si fa interessante..
    Forse prima non mi sono spiegato al meglio! 😅

    Vorrei che quando nella colonna "A" compare "3 - PRODUZIONE" la colonna "C" si autocompili con la data, e fin qui ha risolto il mio problema al 100%, ma vorrei implementare il file in questo modo:

    Dal momento che la colonna "C" si compila con la data, vorrei che la mantenese anche se il valore della colonna "A" passa a "4 - CONSUNTIVARE", "5 - CHIUSA", mentre nei casi di "1 - OFFERTA", "2 - PROGETTAZIONE" e "6 - ANNULLATA" la colonna "C" può rimanere vuota.

    Grazie infinite!😁

    Alex

  • OFFLINE
    dodo47
    Post: 2.636
    Registrato il: 06/04/2013
    Utente Veteran
    2010
    00 06/04/2020 11:50
    ciao
    utilizza un Select Case Target.value per le varie opzioni, es:

    Select Case Target.value
    case is ="1 - ...."
    fai questo
    case is ="2 - ...."
    fai quest'altro

    etc etc

    saluti




    Domenico
    Win 10 - Excel 2016
  • OFFLINE
    Gibbo989
    Post: 3
    Registrato il: 03/04/2020
    Età: 34
    Utente Junior
    Excel 2006
    00 06/04/2020 12:13
    Grazie per la tempestiva risposta Domenico.
    Purtroppo sono un po' "ignorante" e non conosco quel tipo di funzione.

    Per gestire più casi "conosco" solo "if" e "elseif".
    Ho provato a lavorare un po sul tuo codice ma non ho tirato fuori un ragno dal buco..😅

    Grazie

    Alex
  • OFFLINE
    dodo47
    Post: 2.637
    Registrato il: 06/04/2013
    Utente Veteran
    2010
    00 06/04/2020 12:50
    ciao
    il Select Case (lo dice l'istruzione stessa) fa alcune cose sulla base del valore della selezione.
    Ora il valore della tua selezione in colonna A si trova nella variabile Target, quindi come accennato, se tale valore è uguale a "1 - OFFERTA", allora la relativa cella in C dovrà essere vuota, se è uguale a "3 - PRODUZIONE", ci va la data, se è uguale a 4 - CONSUNTIVARE", oppure a "5 - CHIUSA" non fai nulla.

    Provaci

    https://docs.microsoft.com/it-it/dotnet/visual-basic/language-reference/statements/select-case-statement

    saluti




    [Modificato da dodo47 06/04/2020 12:51]
    Domenico
    Win 10 - Excel 2016
  • OFFLINE
    Gibbo989
    Post: 4
    Registrato il: 03/04/2020
    Età: 34
    Utente Junior
    Excel 2006
    00 06/04/2020 13:40
    Provo a lavorarci.
    Intanto grazie.

    Alex
  • OFFLINE
    GiuseppeMN
    Post: 3.843
    Registrato il: 03/04/2013
    Utente Master
    Excel 2000 - 2013
    00 06/04/2020 15:45
    Buona giornata, @Gibbo989;
    Excel 2006 sbaglio o si riferisce a MAC?

    In ogni caso, dopo aver preso buona nota dei consigli di @dodo, potresti pensare a questa alternativa.

    Option Explicit
    
    Private Sub Worksheet_Change(ByVal Target As Range)
    Application.ScreenUpdating = False
    Dim NRc As Long
    
        NRc = Range("A" & Rows.Count).End(xlUp).Row
            If Not Intersect(Target, Range(Cells(2, 1), Cells(NRc, 1))) Is Nothing Then
                Cells(Target.Row, 3).ClearContents
                If Left(Target, 1) = 3 _
                    Or Left(Target, 1) = 4 _
                        Or Left(Target, 1) = 5 _
                            Then Cells(Target.Row, 3).Value = Date
                End If
    End Sub
    


    Questa è solo un possibile Codice VBA; ce ne possono essere altri.



    A disposizione.

    Giuseppe

    Windows XP - Excel 2000
    Windows 10 - Excel 2013
  • OFFLINE
    Gibbo989
    Post: 5
    Registrato il: 03/04/2020
    Età: 34
    Utente Junior
    Excel 2006
    00 07/04/2020 11:03
    Grazie per l'info @GiuseppeMN!
    Utilizzo comunque un sistema operativo Windows Xp Professional.
    Buona giornata.

    Alex😁
  • 15MediaObject5,0019 1