Risultati da 1 a 12 di 12

Discussione: Aiuto convalida dati in range tramite VBA



  1. #1
    L'avatar di joseph_wid
    Clicca e Apri
    Data Registrazione
    Jan 2016
    Località
    Palermo
    Messaggi
    9
    Versione Office
    2016
    Likes ricevuti
    0
    Likes dati
    0

    Aiuto convalida dati in range tramite VBA

    A B C D E F G H I J K L M N O P Q R S T U V W X Y Z AA AB AC AD AE AF
    1 =CONTA.SE(B2:H2;"Mele") L M M G V S D L M M G V S D L M M G V S D L M M G V S D L M M
    2 Mele Pere Pere Kiwi Mele Pere Pere Mele


    Salve, essendo nuova credo di aver postato nella sezione sbagliata, quindi ripropongo il quesito, sperando di avere un pò + di fortuna. Grazie
    Ho un piccolo problema che mi sta dannando l'anima, spero che in questo forum, possa trovare qualcuno che lo possa risolvere facilmente.

    Ho un Range B2:AF2 in cui inserisco dei dati vari, ad esempio: Mele, Pere,Kiwi, etc. e un conteggio nella Cella A1 conta le "Mele" nel corso del mese. (Premetto che nella convalida dati ho già un elenco nel predetto range), quindi mi servirebbe una macro che svolgesse le seguenti operazioni: se inserisco "Mele" in una qualsiasi cella dopo la cella K ma il conteggio nella cella A1 è = 3, non deve accettare il valore "Mele", ma deve cambiarlo in "Kiwi" ignorando le celle vuote precedenti(G2, H2). Spero di essere stata chiara. Gentilmente ringrazio. Ciao a tutti e complimenti per questo bellissimo forum.

  2. #2

    L'avatar di scossa
    Clicca e Apri
    Data Registrazione
    Jul 2015
    Località
    Verona Provincia
    Età
    57
    Messaggi
    1017
    Versione Office
    .
    Likes ricevuti
    366
    Likes dati
    0
    Ciao,

    potresti allegare un file di esempio con la convalida dati attuale?
    Bye!
    scossa
    scossa's web site
    ___
    Se tu hai una mela, e io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw)

  3. #3
    L'avatar di joseph_wid
    Clicca e Apri
    Data Registrazione
    Jan 2016
    Località
    Palermo
    Messaggi
    9
    Versione Office
    2016
    Likes ricevuti
    0
    Likes dati
    0

    Convalida dati in range tramite VBA

    Citazione Originariamente Scritto da scossa Visualizza Messaggio
    Ciao,

    potresti allegare un file di esempio con la convalida dati attuale?
    Ciao e grazie per aver risposto. Cmq, la convalida nel mio caso nel range che va da $B$3:$AF$3 è semplicemente un elenco contenente alcuni prodotti tra cui anche le mele (anche se è solo un esempio del file originale che contiene molti altri dati. Ad ogni modo a me interessa che svolga quelle operazioni, poi se si chiamano mele o altro non importa.
    Allego un file di esempio.
    File Allegati File Allegati

  4. #4

    L'avatar di cromagno
    Clicca e Apri
    Data Registrazione
    Aug 2015
    Località
    Sardegna
    Età
    37
    Messaggi
    4019
    Versione Office
    2013
    Likes ricevuti
    1228
    Likes dati
    923
    Ciao a tutti,
    non so se ho capito bene ma ci provo....

    Nelle celle A9:A13 ho messo la lista dei frutti (che penso tu avrai per il tuo convalida dati).

    Il codice parte se vengono modificate le celle del range K3:AF3.
    Quindi, nel modulo di classe del foglio:

    Codice: 
    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim Frutta As Range, Casuale As Integer, Conteggio As Integer, Limite As Integer
    Dim Val_Attuale As Integer, New_Fruit As String
    
    
    If Not Intersect(Target, Range("K3:AF3")) Is Nothing Then
        Set Frutta = Range("A9:A13")
        Conteggio = Frutta.Count
        Val_Attuale = Range("A1").Value
        Limite = 3
        If Val_Attuale > Limite And Target.Value = "Mele" Then
        Do
            Casuale = Rnd() * Conteggio + 1
            New_Fruit = Frutta(Casuale)
        Loop Until New_Fruit <> "Mele"
        Cells(Target.Row, Target.Column).Value = New_Fruit
        End If
    End If
    Set Frutta = Nothing
    End Sub
    Ho usato tante variabili per cercare di farti capire meglio la logica....
    Ti lascio un esempio in allegato.

    "Sono le persone che nessuno immagina che possano fare certe cose, quelle che fanno cose che nessuno può immaginare."

  5. #5
    L'avatar di joseph_wid
    Clicca e Apri
    Data Registrazione
    Jan 2016
    Località
    Palermo
    Messaggi
    9
    Versione Office
    2016
    Likes ricevuti
    0
    Likes dati
    0
    Citazione Originariamente Scritto da cromagno Visualizza Messaggio
    Ciao a tutti,
    non so se ho capito bene ma ci provo....

    Nelle celle A9:A13 ho messo la lista dei frutti (che penso tu avrai per il tuo convalida dati).

    Il codice parte se vengono modificate le celle del range K3:AF3.
    Quindi, nel modulo di classe del foglio:

    Codice: 
    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim Frutta As Range, Casuale As Integer, Conteggio As Integer, Limite As Integer
    Dim Val_Attuale As Integer, New_Fruit As String
    
    
    If Not Intersect(Target, Range("K3:AF3")) Is Nothing Then
        Set Frutta = Range("A9:A13")
        Conteggio = Frutta.Count
        Val_Attuale = Range("A1").Value
        Limite = 3
        If Val_Attuale > Limite And Target.Value = "Mele" Then
        Do
            Casuale = Rnd() * Conteggio + 1
            New_Fruit = Frutta(Casuale)
        Loop Until New_Fruit <> "Mele"
        Cells(Target.Row, Target.Column).Value = New_Fruit
        End If
    End If
    Set Frutta = Nothing
    End Sub
    Ho usato tante variabili per cercare di farti capire meglio la logica....
    Ti lascio un esempio in allegato.
    Grazie per aver risposto ma non è il risultato desiderato. Invio un file di esempio per rendere migliore l'idea. Ciao
    File Allegati File Allegati

  6. #6
    L'avatar di joseph_wid
    Clicca e Apri
    Data Registrazione
    Jan 2016
    Località
    Palermo
    Messaggi
    9
    Versione Office
    2016
    Likes ricevuti
    0
    Likes dati
    0
    Ho risolto PARZIALMENTE modificando (Val_Attuale > Limite) con Val_Attuale > 3) e limitando il range del loop a sole due voci: Mele e Pere.
    Però se cancello uno qualsiasi dei valori ultimi inseriti, la macro va in errore.
    Grazie infinite

  7. #7

    L'avatar di cromagno
    Clicca e Apri
    Data Registrazione
    Aug 2015
    Località
    Sardegna
    Età
    37
    Messaggi
    4019
    Versione Office
    2013
    Likes ricevuti
    1228
    Likes dati
    923
    All'inizio di questa discussione apri il menu "Strumenti discussione" e scegli la voce "Segna questo thread come risolto".

    "Sono le persone che nessuno immagina che possano fare certe cose, quelle che fanno cose che nessuno può immaginare."

  8. #8

    L'avatar di cromagno
    Clicca e Apri
    Data Registrazione
    Aug 2015
    Località
    Sardegna
    Età
    37
    Messaggi
    4019
    Versione Office
    2013
    Likes ricevuti
    1228
    Likes dati
    923
    Citazione Originariamente Scritto da joseph_wid Visualizza Messaggio
    Ho risolto PARZIALMENTE modificando (Val_Attuale > Limite) con Val_Attuale > 3) e limitando il range del loop a sole due voci: Mele e Pere.
    Però se cancello uno qualsiasi dei valori ultimi inseriti, la macro va in errore.
    Grazie infinite
    Ma ieri non avevi chiesto come si fa a mettere RISOLTO?!?
    Hai cambiato post?

    "Sono le persone che nessuno immagina che possano fare certe cose, quelle che fanno cose che nessuno può immaginare."

  9. #9

    L'avatar di cromagno
    Clicca e Apri
    Data Registrazione
    Aug 2015
    Località
    Sardegna
    Età
    37
    Messaggi
    4019
    Versione Office
    2013
    Likes ricevuti
    1228
    Likes dati
    923
    Citazione Originariamente Scritto da joseph_wid Visualizza Messaggio
    Ho risolto PARZIALMENTE modificando (Val_Attuale > Limite) con Val_Attuale > 3) e limitando il range del loop a sole due voci: Mele e Pere.
    Però se cancello uno qualsiasi dei valori ultimi inseriti, la macro va in errore.
    Grazie infinite
    Comunque,
    scrivere:
    Codice: 
    Limite = 3
    Val_Attuale > Limite
    oppure :

    Codice: 
    Val_Attuale > 3
    è la stessa identica cosa!

    Ho aperto il tuo secondo file allegato e letto quello che vorresti... beh, la macro di prima fa esattamente questo (se dopo , oltre il limite di 3 vuoi assegnare sempre un unico frutto, Pere a quanto ho capito, non c'è più bisogno del ciclo Do...Loop e dell'estrazione casuale.

    Per quanto riguarda l'errore che ti da cancellando i valori, non capisco a cosa ti riferisci.
    Nel file che ti ho allegato non da questo errore, quindi sarebbe meglio che allegassi il file con tanto di codice modificato da te.

    "Sono le persone che nessuno immagina che possano fare certe cose, quelle che fanno cose che nessuno può immaginare."

  10. #10
    L'avatar di joseph_wid
    Clicca e Apri
    Data Registrazione
    Jan 2016
    Località
    Palermo
    Messaggi
    9
    Versione Office
    2016
    Likes ricevuti
    0
    Likes dati
    0

    RE. Convalida

    Citazione Originariamente Scritto da cromagno Visualizza Messaggio
    Comunque,
    scrivere:
    Codice: 
    Limite = 3
    Val_Attuale > Limite
    oppure :

    Codice: 
    Val_Attuale > 3
    è la stessa identica cosa!

    Ho aperto il tuo secondo file allegato e letto quello che vorresti... beh, la macro di prima fa esattamente questo (se dopo , oltre il limite di 3 vuoi assegnare sempre un unico frutto, Pere a quanto ho capito, non c'è più bisogno del ciclo Do...Loop e dell'estrazione casuale.

    Per quanto riguarda l'errore che ti da cancellando i valori, non capisco a cosa ti riferisci.
    Nel file che ti ho allegato non da questo errore, quindi sarebbe meglio che allegassi il file con tanto di codice modificato da te.
    Invio un file esplicativo senza codice, che spero possa valere + di mille parole.
    Grazie
    File Allegati File Allegati

  11. #11
    L'avatar di joseph_wid
    Clicca e Apri
    Data Registrazione
    Jan 2016
    Località
    Palermo
    Messaggi
    9
    Versione Office
    2016
    Likes ricevuti
    0
    Likes dati
    0
    Citazione Originariamente Scritto da scossa Visualizza Messaggio
    Ciao,

    potresti allegare un file di esempio con la convalida dati attuale?
    Certo, grazie.
    Il file (Convalida.xlsm) lo trovi in fondo al post di Cromagno
    Ciao

  12. #12

    L'avatar di cromagno
    Clicca e Apri
    Data Registrazione
    Aug 2015
    Località
    Sardegna
    Età
    37
    Messaggi
    4019
    Versione Office
    2013
    Likes ricevuti
    1228
    Likes dati
    923
    Ciao,
    premetto che secondo me anche il codice proposto prima puoi adattarlo facilmente alle tue reali esigenze (anche se non ho ancora capito se sai usare un pò il VBA)....

    Comunque, ti propongo un altro metodo....
    Ogni volta che aggiungi un frutto, parte il codice che controlla se il frutto è "Mele" o "Kiwi" e se ci sono già 3 frutti dello stesso tipo per quel cliente.
    Se così fosse, si aprirà una userform dove puoi scegliere se inserire "Arance" o "Pere" al posto di "Mele" o "Kiwi" oppure lasciare la cella vuota annullando l'inserimento.

    Il codice per l'evento Worksheet_Change :

    Codice: 
    Option Explicit
    Option Compare Text
    
    
    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim Val_Attuale As Integer, uRiga As Long, Campo As Range, Mele As Integer, Kiwi As Integer
    
    
    uRiga = Range("A4").End(xlDown).Row
    Set Campo = Range("B4:AF" & uRiga)
    
    
    If Not Intersect(Target, Campo) Is Nothing Then
        Cells(Target.Row, Target.Column).Select
        Mele = Application.WorksheetFunction.CountIf(Range("B" & Target.Row & ":" & "AF" & Target.Row), "Mele")
        Kiwi = Application.WorksheetFunction.CountIf(Range("B" & Target.Row & ":" & "AF" & Target.Row), "Kiwi")
        If Target.Value = "Mele" And Mele > 3 Or _
        Target.Value = "Kiwi" And Kiwi > 3 Then
        UserForm1.Show
        End If
    End If
    
    
    Set Campo = Nothing
    End Sub
    Quelli per gestire la UserForm :

    Codice: 
    Option Explicit
    
    
    Private Sub CommandButton1_Click()
    ActiveCell.Value = "Arance"
    Unload UserForm1
    End Sub
    
    
    Private Sub CommandButton2_Click()
    ActiveCell.Value = "Pere"
    Unload UserForm1
    End Sub
    
    
    Private Sub CommandButton3_Click()
    ActiveCell.ClearContents
    Unload UserForm1
    End Sub
    Fammi sapere....

    "Sono le persone che nessuno immagina che possano fare certe cose, quelle che fanno cose che nessuno può immaginare."

  13. I seguenti utenti hanno dato un "Like"


Discussioni Simili

  1. [Tutorial VBA] Range.End() - Range.OffSet() - Come operare sulle tabelle di dati
    Di dracoscrigno nel forum Imparando Excel & VBA - Tutorial di Excel-
    Risposte: 3
    Ultimo Messaggio: 29/03/17, 22:30
  2. [Risolto] Cercare Range di valori in un insieme di dati. Excel 2016
    Di Irda88 nel forum Domande su Excel in generale
    Risposte: 6
    Ultimo Messaggio: 25/08/16, 21:50
  3. Archiviazione dati tramite macro
    Di bopo57 nel forum Domande su Excel VBA e MACRO
    Risposte: 10
    Ultimo Messaggio: 22/08/16, 12:21
  4. [Risolto] dati univoci tramite funzione
    Di annnndrea nel forum Domande su Excel in generale
    Risposte: 16
    Ultimo Messaggio: 15/10/15, 22:19
  5. Convalida dati da elenco per dati univoci dinamica
    Di tsunami1978 nel forum Domande su Excel in generale
    Risposte: 8
    Ultimo Messaggio: 27/08/15, 00:52

Permessi di Scrittura

  • Tu non puoi inviare nuove discussioni
  • Tu non puoi inviare risposte
  • Tu non puoi inviare allegati
  • Tu non puoi modificare i tuoi messaggi
  •