gestione tabella con condizioni



  • gestione tabella con condizioni
    di sago (utente non iscritto) data: 03/03/2014 12:50:00

    ho una tabella composta da 8 righe e 9 colonne (range B9:J16) la condizione è:
    1) se cella A9 contiene numero da 01 e le celle della riga corrente sono > "" allora SOLO le celle vuote della riga corrente e di quella successiva vanno riempite con il segno di ===;
    la stessa condizione va verificata con le celle da A10 a A16.
    Grazie dell'attenzione



  • di patel data: 03/03/2014 13:06:32

    allega un file di esempio con i dati ed il risultato desiderato





  • di Vecchio Frac data: 03/03/2014 13:13:31

    cit. le celle della riga corrente sono > ""
    ---> forse volevi dire <>"", cioè "diverse da vuote", "non vuote".
    Comunque hai già definito cosa deve fare il programmino, dovresti specificare se parti completamente da zero, o se hai già tentato di scrivere un codice (nel qual caso sei invitato a postare il tuo tentativo di codice così lo rivediamo).
    Che poi, magari, i maghi delle formule tirano fuori qualche magia senza ricorrere a VBA ^_^





  • di sago data: 03/03/2014 18:05:32

    precedentemente ero stato impreciso
    PROBLEMA
    mia tabella B9:J16
    CONDIZIONI:
    1) se A9=01 e almeno una delle celle della riga corrente (B9:J9) è diversa da vuota allora tutte le altre celle della riga corrente e di quella successiva devono essere riempite con ====;
    2) la stessa condizione devo verificarla per la cella A10, A11, A12, A13, A14 e A15.
    si ringrazia anticipatamente per l'attenzione.



  • di Vecchio Frac data: 03/03/2014 18:15:57

    Va bene, ma non hai risposto alle mie domande.
    Hai solo ridefinito il problema.





  • di sago data: 03/03/2014 18:22:21

    invio codice
     
    Dim CL As Object, a
    
    For Each CL In Range("Prescr")
    For a = 9 To 14
    If Cells(a, 1).Value = 1 And CL <> "" Then
    CL.Offset(1, 0) = "'===="
    
    End If
    Next a
    Next CL
    End Sub



  • di Vecchio Frac data: 03/03/2014 20:32:50

    Prova il codice seguente.
     
    Option Explicit
    
    Sub scorri_e_riempi()
    Dim r As Range, v As Variant
    
        Set r = Range("A9:A16")
        v = Application.Transpose(r)
        r.Resize(r.Rows.Count, 10).SpecialCells(xlCellTypeBlanks) = "'==="
        r = Application.Transpose(v)
        
    End Sub






  • di sago (utente non iscritto) data: 03/03/2014 22:47:08

    la routine mi riempie tutte le celle dell'intervallo mentre una condizione è:
    1) se A9=01 e se alcune celle contengono valori allora le altre celle della riga corrente e quelle della riga successiva (se A10=vuota) vanno riempite con ===;
    se anche A10=02 stessa procedura con riempimento fino alla riga sottostante non ha tutte le righe della tabella


  • sago
    di sago data: 04/03/2014 11:53:00

    precedentemente ero stato impreciso
    PROBLEMA
    mia tabella B9:J16
    CONDIZIONI:
    1) se A9=01 e almeno una delle celle della riga corrente (B9:J9) è diversa da vuota allora tutte le altre celle della riga corrente e di quella successiva devono essere riempite con ====, non devo riempire tutto il range con ==== ma solo la riga corrente e quella successiva;
    2) la stessa condizione devo verificarla per la cella A10, A11, A12, A13, A14 e A15.
    si ringrazia anticipatamente per l'attenzione



  • di sago (utente non iscritto) data: 04/03/2014 16:47:14

    precedentemente ero stato impreciso
    PROBLEMA
    mia tabella B9:J16
    CONDIZIONI:
    1) se A9=01 e almeno una delle celle della riga corrente (B9:J9) è diversa da vuota allora tutte le altre celle della riga corrente e di quella successiva devono essere riempite con ====, non devo riempire tutto il range con ==== ma solo la riga corrente e quella successiva;
    2) la stessa condizione devo verificarla per la cella A10, A11, A12, A13, A14 e A15.
    si ringrazia anticipatamente per l'attenzione




     
    Option Explicit
    
    Sub scorri_e_riempi()
    Dim r As Range, v As Variant
    
        Set r = Range("A9:A16")
        v = Application.Transpose(r)
        r.Resize(r.Rows.Count, 10).SpecialCells(xlCellTypeBlanks) = "'==="
        r = Application.Transpose(v)
        
    End Sub



  • di Raffaele_53 (utente non iscritto) data: 04/03/2014 19:34:07

    Se ho capito bene....
    La cella A9 contiene 01 (pertanto dovrebbe essere formattata come testo, perchè se c'è solo 1), non funziona
    Ora se la cella A9 è 01 + la condizione che nelle colonne B:J della riga ci sia una sola cella vuota, desideri cancellare tutta la riga e quella successiva???
     
    Option Explicit
    Sub scorri_e_riempi()
    Dim r As Range, x As Long, y As Long 
        For x = 9 To 15
            If Cells(x, 1) = "01" Then
                For y = 2 To 10
                    If Cells(x, y) = "" Then
                        Set r = Range("B" & x & ":J" & x + 1)
                        r = "'==="
                        Exit For
                    End If
                Next y
            End If
        Next x
    Set r = Nothing
    End Sub



  • di sago (utente non iscritto) data: 04/03/2014 19:55:14

    praticamente devo creare una piccola tabella composta da sei righe e 10 colonne
    condizione 1:se nella riga (B9:J9) esiste qualche cella non vuota allora alla prima cella A9 inserisco 01 mentre le altre celle della riga corrente che risultano vuote vanno riempite con ==== (trattini), lo stesso riempimento con trattini deve essere fatto per la riga successiva se non contiene nessun tipo di valore (quindi se ad esempio le celle F9 e F10 contengono dei valori allora celle A9=01, A10=02 e tutte le celle vuote della riga B9:J9, della riga B10:J10 e tutte le celle della riga successiva A11:J11) vanno riempite con ====.
    Ringrazio anticipatamente per l'interesse.



  • di Raffaele_53 (utente non iscritto) data: 04/03/2014 20:50:09

    Sono perplesso, prima dici che in cella A9 c'è 01.
    Adesso che la macro lo inserisca in sequenziale credo 01,02, ecc ecc (poi celle piene non piene non capisco bene). allega un files con la tabella originale (poi in un'altro foglio rimetti la tabella con tutte le modifiche che desideri)



  • di sago (utente non iscritto) data: 04/03/2014 21:17:39

    scusami
    provo a riassumere
    1) ho una tabella composta da 6 righe e 10 colonne (A9:J14)
    condizione1 - se nella riga (esempio B9:J9) corrente esistono dei valori allora la 1 cella (A9) deve assumere il valore 1 e SOLO le celle vuote della riga in oggetto devono assumere il valore ===
    poi possono verificarsi altre due condizioni:
    la prima: se la riga sottostante (A10:J10) è TUTTA VUOTA allora solo per questa inserisco in tutte le cella === oppure
    seconda condizione: se in alcune delle celle della riga A10:J10 esistono dei valori allora la cella A10 deve assumere il valore 2 e le celle vuote della riga in oggetto e della riga successiva se TUTTE le celle di quest'ultima sono vuote devono assumere il valore ===
    Ti ringrazio per l'interessamento spero di potermi sdebitare.



  • di Raffaele_53 (utente non iscritto) data: 04/03/2014 22:45:43

    >>>(A9:J14)
    In alto hai scritto (A9:J16) casomai modifica il ............. For x = 9 To 16

    Scrive in A9 (01) se esiste una sola cella vuota in B9:J9
    Se riga A10 è tutta vuota mette gli "===" e non scrive nulla in A10
    Se riga A11 esiste una sola cella vuota in B11:J11 mette gli "===" e non scrive in A11 (02) ecc ecc

    Se non va bene, allega un esempio come detto sopra
     
    Option Explicit
    Sub scorri_e_riempi()
    Dim r As Range, x As Long, y As Long, Qt1 As Long, Qt2 As Long
    Qt1 = 1
        For x = 9 To 16
            Qt2 = Application.WorksheetFunction.CountIf(Range("B" & x & ":J" & x), "")
                If Qt2 > 0 Then
                    For y = 2 To 10
                        If Cells(x, y) = "" Then
                            Cells(x, y).NumberFormat = "@"
                            Cells(x, y).FormulaR1C1 = "==="
                        End If
                    Next y
                        If Qt2 = 9 Then
                            Qt1 = Qt1
                            GoTo Fine
                        Else
                            Cells(x, 1).NumberFormat = "@"
                            Cells(x, 1).FormulaR1C1 = "0" & Qt1
                            Qt1 = Qt1 + 1
                        End If
                End If
    Fine:
        Next x
    End Sub



  • di sago (utente non iscritto) data: 06/03/2014 09:48:24

    scusami ma non riesco a spiegarmi
    siccome la tabella deve essere stampata (ogni volta 100 copie) dovrei stampare solo le righe che contengono dei dati più la riga VUOTA sottostante (questa riga avrà tutti simboli === ) mentre le ulteriori righe resteranno VUOTE (recupero consumo stampa),
    I numeri nella prima colonna della tabella devono obbligatoriamente iniziare con lo 01 nella prima cella (A9) e devono essere visibili solamente se la riga di riferimento contiene dei dati.
    Ringrazio nuovamente per il tuo interessamento, posso sdebitarmi in qualche modo?.



  • di Raffaele_53 (utente non iscritto) data: 06/03/2014 10:57:55

    >>>posso sdebitarmi in qualche modo?
    Si allegando un'esempio valido con dovute spiegazioni.

    """allega un files con la tabella originale (poi in un'altro foglio rimetti la tabella con tutte le modifiche che desideri)"""

    Visto che sinora hai modificato diversi errori di base, non capisco più nulla.

    >>> Stampare?
    Non ho letto nulla a riguardo e onestamente non capisco l'ultimo post



  • di sago (utente non iscritto) data: 07/03/2014 11:28:47

    inviato file di esempio
    ingrazio



  • di Raffaele_53 (utente non iscritto) data: 07/03/2014 12:09:29

    Sempre che abbia capito e scusami per le frasi successive.
    Spiegarsi e allegare un esempio aiuta tantissimo la persona che Ti aiuta.
    Ho richiesto una tabella originale e una come la desideraVi.

    Non essendoci le due tabelle, presumo che quella che hai allegato sia il risultato finale.
    Ti riallego il files che riproduce esattamente la tabella del foglio1
    Esempio fatto nel foglio2

    Ps. bastava spostare nel codice la riga --->Fine: alla riga successiva



  • di sago (utente non iscritto) data: 07/03/2014 14:42:11

    "grande" Raffaele_53
    il codice è quasi perfetto, se riesci fai ancora uno sforzo per me:
    prendi come esempio il foglio 1 del file che ti ho inviato
    NOTE:
    1) ogni volta che clicco sul pulsante AVVIA il codice riempie la riga successiva con i simboli === mentre dopo aver inserito 1 riga con tutti simboli === dovrebbe chiudersi la routine perché vuol dire che la tabella è "terminata";
    2) nella prima colonna non viene riportato automaticamente il valore 02 nella seconda riga (se avessi scritto ad esempio nelle prime tre righe, la prima colonna dovrebbe riportare in automatico i valori 01 -02 - 03).
    Ti ringrazio nuovamente.



  • di Raffaele_53 (utente non iscritto) data: 07/03/2014 15:33:09

    Se scrivo 5 righe, a me da la numerazione da 1 sino a 5 nella colonna A
    Ps. non credo che la riga con tutti "===" debba essere numerata.

    Devi premere solo una volta il bottone.
    Penso che desideri stampare la tabella......
    Una volta fatto, presumo che desideri cancellare la tabella per crearne una nuova con altri valori. Solo premendo il bottone ricrea nelle celle vuote il "===" e numera i record scritti.

    Per cancellare la tabella usa questo codice.
    Sub cancella()
    Range("A9:J16").ClearContents
    End Sub



  • di sago (utente non iscritto) data: 07/03/2014 19:25:05

    è quasi perfetto, unica nota
    1) non devo cancellare per forza la tabella. alcune volte devo solo aggiungere dei valori e qui mi si presenta un piccolo bug.
    Prendi sempre la mia tabella del foglio 1, se la creo ex-novo allora il codice funziona regolarmente ma se ad esempio apro il foglio 1 e devo SOLAMENTE aggiungere dei valori nella riga 3 (B11:J11) sovrascrivendo i simboli === e poi lancio la routine questa non numera automaticamente la riga 03.
    Nuovamente saluti e ringraziamenti



  • di Raffaele_53 (utente non iscritto) data: 07/03/2014 19:47:08

    Devi cancellare per forza, perche il codice controlla quante celle sono scritte e se sono nove come da tabella non fa nulla.
    Creati un Bottone = Pulisci e abbinalo al codice sotto
     
    Sub cancella()
        Range("A9:A16").ClearContents
        Range("B9:J16").Select
        Selection.Replace What:="===", Replacement:="", LookAt:=xlPart, _
            SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
            ReplaceFormat:=False
        Selection.NumberFormat = "General"
    End Sub



  • di sago (utente non iscritto) data: 07/03/2014 21:22:04

    Purtroppo alcune volte non posso cancellare la tabella perché il collega in taluni casi controlla quanto riportato (magari trova compilate correttamente le prime 6 righe e lui non deve fare altro che compilare la 7 riga (senza dovere ridigitare tutta la tabella)
    quindi lui inserisce nella prima riga utile che non contiene valori (ma solo i simboli ===) i dati necessari e poi dovrebbe digitare su avvia (il numero di tale riga in questo caso non risulta progressivo ma riparte da 01!!).
    Ti ringrazio comunque sinceramente per il tempo dedicato.



  • di sago (utente non iscritto) data: 07/03/2014 21:32:33

    non potrei inserire una macro che controlla solamente i numeri progressivi della prima colonna
    1) se anche un solo valore nelle celle della riga interessata è diverso da === (quindi vuol dire che ho inserito dei "dati" nuovi nella riga) allora ..... verifico il numero della cella superiore (nella 1 colonna) e +1
    potrei inserirlo alla fine della routine



  • di Raffaele_53 (utente non iscritto) data: 08/03/2014 00:26:19

    Non riesco a farlo con "====", però con "----" mi sembra che funzioni.
     
    Option Explicit
    Sub scorri_e_riempi3()
    Dim r As Range, x As Long, y As Long, Qt1 As Long, Qt2 As Long, Qt3 As Long
    If Cells(9, 1) = "" Then Qt1 = 1 Else Qt1 = Cells(Range("A" & Rows.Count).End(xlUp).Row, 1).Value + 1
    For x = 9 To 16
        If Application.WorksheetFunction.CountIf(Range("B" & x & ":J" & x), "") = 9 Then
                    For y = 2 To 10
                        If Cells(x, y) = "" Then
                            Cells(x, y).FormulaR1C1 = "'----"
                        End If
                    Next y
                    GoTo Fine
        ElseIf Application.WorksheetFunction.CountIf(Range("B" & x & ":J" & x), "") = 0 Then
            If Cells(x, 1) = "" Then
                Cells(x, 1).FormulaR1C1 = "'0" & Qt1
                Qt1 = Qt1 + 1
            End If
        ElseIf Application.WorksheetFunction.CountIf(Range("B" & x & ":J" & x), "") > 0 Then
                    For y = 2 To 10
                        If Cells(x, y) = "" Then
                            Cells(x, y).FormulaR1C1 = "'----"
                        End If
                    Next y
                    Cells(x, 1).FormulaR1C1 = "'0" & Qt1
                    Qt1 = Qt1 + 1
        ElseIf Application.WorksheetFunction.CountIf(Range("B" & x & ":J" & x), "----") < 9 And Cells(x, 1) = "" Then
            Cells(x, 1).FormulaR1C1 = "'0" & Qt1
            Qt1 = Qt1 + 1
        End If
    Next x
    Fine:
    End Sub