Condividi:        

[Excel]Msgbox per celle multiple

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

[Excel]Msgbox per celle multiple

Postdi maxkoala » 13/10/16 21:23

Ciao , su un foglio excel ho delle colonne nominate in questo modo : B operatore , D codice prodotto
,E quantità , F descrizione prodotto .
Ad esso è collegata una macro che , una volta compilati i campi traferisce i dati su un'altro foglio.
all'interno della macro ho inserito dei messagi di avviso (msgbox) , che bloccano la macro se alcune condizioni non vengono rispettate.

tra queste c'è:
Codice: Seleziona tutto
If Range("e11") = "" Then
   MsgBox ("Completa il campo : QTA "), 0 + 48, Title:="Errore": Exit Sub
End If
cioè se dimentico di inserire manualmente un valore di quantità ,sulla riga dove è inserito codice prodotto la macro si blocca !
funziona perfettamente , ma questa condizione vale solo per la cella e11 . come si può implementare la macro per le celle succesive a e11 ,
cioè quando sono presenti valori neille celle successive a d11 ?
Codice: Seleziona tutto
Sub trasferisci()

If IsNumeric(Range("b11").Value) And _
Range("b11").Value <> "" Then
    MsgBox ("Codice Operatore errato"), 0 + 48, Title:="Errore"
: Exit Sub
 End If
     If Range("b11") = "" Then
    MsgBox ("Completa il campo : Operatore "), 0 + 48, Title:="Errore": Exit Sub
    End If
     If Range("e11") = "" Then
    MsgBox ("Completa il campo : QTA "), 0 + 48, Title:="Errore": Exit Sub
    End If
   
      With Worksheets("PERSONALE").Range("A2:A100")
Dim X As String
X = Range("B11").Value
Set c = .Find(X, LookIn:=xlValues, LookAt:=xlWhole)

If Not c Is Nothing Then
firstAddress = c.Address
Do
Set c = .FindNext(c)
Loop While Not c Is Nothing And c.Address <> firstAddress

Else
MsgBox ("Codice Operatore Errato"), 0 + 48, Title:="Errore": Exit Sub
End If
End With
   
   Application.Run "aaa1.xls!elimina_vuote"

    Application.ScreenUpdating = False
    ChDir "D:\Documents and Settings\s003327\Desktop\"
    Workbooks.Open Filename:= _
        "D:\Documents and Settings\s003327\Desktop\aaa.xls"
   
    Windows("aaa1.xls").Activate
   
Range("I2").Select
DataRiga = Range("I2").Value
   
Rigacontrollo = 11
Controllo = Trim(Range("B" & Rigacontrollo).Value)

Do While Len(Controllo) > 0
            CID = Range("B" & Rigacontrollo).Value
            CODICE = Range("D" & Rigacontrollo).Value
            QTA = Range("E" & Rigacontrollo).Value
           
                Windows("aaa.xls").Activate
           
                RigacontrolloArrivo = 7
                ControlloArrivo = Trim(Range("C" & RigacontrolloArrivo).Value)
                    Do While ControlloArrivo <> ""
                        ControlloArrivo = Trim(Range("C" & RigacontrolloArrivo).Value)
                        RigacontrolloArrivo = RigacontrolloArrivo + 1
                    Loop
            If RigacontrolloArrivo > 7 Then RigacontrolloArrivo = RigacontrolloArrivo - 1
            Range("C" & RigacontrolloArrivo).Value = CID
            Range("D" & RigacontrolloArrivo).Value = DataRiga
            Range("F" & RigacontrolloArrivo).Value = CODICE
            Range("G" & RigacontrolloArrivo).Value = QTA
               
                Windows("aaa1.xls").Activate
   
    Rigacontrollo = Rigacontrollo + 1
    Controllo = Trim(Range("B" & Rigacontrollo).Value)
Loop

    Windows("aaa.xls").Activate
    ActiveWorkbook.Save
    ActiveWindow.Close

    Windows("aaa1.xls").Activate
    Application.Run "aaa1.xls!azzerafoglio"
    Range("B11").Select
    MsgBox ("Operazione Completata !"), 0 + 64, Title:="Complimenti !"
End Sub
maxkoala
Utente Junior
 
Post: 31
Iscritto il: 09/02/13 18:35

Sponsor
 

Re: [Excel]Msgbox per celle multiple

Postdi maxkoala » 14/10/16 21:28

Buongiorno a tutti. , Ho letto varie discussioni però non riesco a venire a capo del mio problema che di seguito vi descriverò.

Vi prego di aiutarmi passo passo (e fornirmi anche consigli). Grazie. Di seguito descrivo il mio ambiente di lavoro.
su un foglio excel ho delle colonne nominate in questo modo : B operatore , D codice prodotto
,E quantità , F descrizione prodotto .
Ad esso è collegata una macro che , una volta compilati i campi traferisce i dati su un'altro foglio.
all'interno della macro ho inserito dei messagi di avviso (msgbox) , che bloccano la macro se alcune condizioni non vengono rispettate.

tra queste c'è:

Codice: Seleziona tutto
If Range("e11") = "" Then
MsgBox ("Completa il campo : QTA "), 0 + 48, Title:="Errore": Exit Sub
End If

cioè se dimentico di inserire manualmente un valore di quantità ,sulla riga dove è inserito codice prodotto la macro si blocca !
funziona perfettamente , ma questa condizione vale solo per la cella e11 . come si può implementare la macro per le celle succesive a e11 ,
cioè quando sono presenti valori neille celle successive a d11 ?

Codice: Seleziona tutto
Sub trasferisci()

If IsNumeric(Range("b11").Value) And _
Range("b11").Value <> "" Then
MsgBox ("Codice Operatore errato"), 0 + 48, Title:="Errore"
: Exit Sub
End If
If Range("b11") = "" Then
MsgBox ("Completa il campo : Operatore "), 0 + 48, Title:="Errore": Exit Sub
End If
If Range("e11") = "" Then
MsgBox ("Completa il campo : QTA "), 0 + 48, Title:="Errore": Exit Sub
End If

With Worksheets("PERSONALE").Range("A2:A100")
Dim X As String
X = Range("B11").Value
Set c = .Find(X, LookIn:=xlValues, LookAt:=xlWhole)

If Not c Is Nothing Then
firstAddress = c.Address
Do
Set c = .FindNext(c)
Loop While Not c Is Nothing And c.Address <> firstAddress

Else
MsgBox ("Codice Operatore Errato"), 0 + 48, Title:="Errore": Exit Sub
End If
End With

Application.Run "aaa1.xls!elimina_vuote"

Application.ScreenUpdating = False
ChDir "D:\Documents and Settings\s003327\Desktop\"
Workbooks.Open Filename:= _
"D:\Documents and Settings\s003327\Desktop\aaa.xls"

Windows("aaa1.xls").Activate

Range("I2").Select
DataRiga = Range("I2").Value

Rigacontrollo = 11
Controllo = Trim(Range("B" & Rigacontrollo).Value)

Do While Len(Controllo) > 0
CID = Range("B" & Rigacontrollo).Value
CODICE = Range("D" & Rigacontrollo).Value
QTA = Range("E" & Rigacontrollo).Value

Windows("aaa.xls").Activate

RigacontrolloArrivo = 7
ControlloArrivo = Trim(Range("C" & RigacontrolloArrivo).Value)
Do While ControlloArrivo <> ""
ControlloArrivo = Trim(Range("C" & RigacontrolloArrivo).Value)
RigacontrolloArrivo = RigacontrolloArrivo + 1
Loop
If RigacontrolloArrivo > 7 Then RigacontrolloArrivo = RigacontrolloArrivo - 1
Range("C" & RigacontrolloArrivo).Value = CID
Range("D" & RigacontrolloArrivo).Value = DataRiga
Range("F" & RigacontrolloArrivo).Value = CODICE
Range("G" & RigacontrolloArrivo).Value = QTA

Windows("aaa1.xls").Activate

Rigacontrollo = Rigacontrollo + 1
Controllo = Trim(Range("B" & Rigacontrollo).Value)
Loop

Windows("aaa.xls").Activate
ActiveWorkbook.Save
ActiveWindow.Close

Windows("aaa1.xls").Activate
Application.Run "aaa1.xls!azzerafoglio"
Range("B11").Select
MsgBox ("Operazione Completata !"), 0 + 64, Title:="Complimenti !"
End Sub
maxkoala
Utente Junior
 
Post: 31
Iscritto il: 09/02/13 18:35

Re: [Excel]Msgbox per celle multiple

Postdi Anthony47 » 17/10/16 02:25

La descrizione e' contraddittoria e anche equivoca, comunque mi pare che tu voglia emettere un messaggio quando una cella a compilazione obbligatoria non e' stata compilata (cioe' e' ancora vuota).
Supponiamo che le celle da controllare siano E11:K11; ti dovrebbe aiutare questo pezzo di codice:
Codice: Seleziona tutto
mustBe = "E11:K11"              '<<< L'area dei valori obbligatori
For Each Obblig In Range(mustBe)
    If Obblig.Value = "" Then
        Obblig.Select
        MsgBox ("Completa la cella " & Obblig.Address), 0 + 48, Title:="Errore": Exit Sub
    End If
Next Obblig

La riga marcata <<< va compilata con l'effettiva area da controllare

Va usato in sostituzione delle tre righe di controllo presenti nella tua macro.
Non sapendo dove sono presenti le corrispondenti descrizioni mi limito, nel messaggio, a indicare e selezionare la cella da compilare.

Nulla dico sul resto della macro non sapendo che cosa va a fare.

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

Re: [Excel]Msgbox per celle multiple

Postdi maxkoala » 17/10/16 15:07

Ciao Anthony47 ,
mi spiace non essere stato più preciso nel presentare il problema , perchè va a discapito di chi ci vede! ,
comunque ho cercato di focalizzare il problema solo sulla riga del msgbox , perchè il resto fa parte di una macro più elaborata , e mi sarebbe stato più difficile spiegare il constesto con il quale si muoveva. il file in se non è altro che un report di carico / scarico materiale , che registra tutti i movimenti e la macro le registra su un'altro file di riepilogo . il msgbox ha lo scopo di costringere chi fa lo scarico di inserire obbligatoriamente la "quantità " tutte le volte , tante volte , quanti sono i prodotti selezionati nella colonna "D" !
In conclusione la tua stringa funziona esattamente come avrei voluto !!!!
ti ringrazio nuovamente per la tua cortesia e pazienza

saluti Max !
maxkoala
Utente Junior
 
Post: 31
Iscritto il: 09/02/13 18:35

Re: [Excel]Msgbox per celle multiple

Postdi maxkoala » 19/10/16 20:12

Ciao Anthony47 , mi sono accorto solo ora che la stringa suggerita ( che sostituisce benissimo quella proposta in origine ), non soddisfa una condizione fondamentale ! cioè restutisce il messaggio" complila cella" su tutte le celle della colonna "E" indipendentemnete dai valori compliati nella colnna "D". quello che vorrei che a valori presenti della clonna "d" se non compilo la corrispettiva cella in "E" deve restituire msgbox ,
maxkoala
Utente Junior
 
Post: 31
Iscritto il: 09/02/13 18:35

Re: [Excel]Msgbox per celle multiple

Postdi Anthony47 » 20/10/16 01:14

Se "restituisce il messaggio" complila cella" su tutte le celle della colonna "E" indipendentemnete dai valori compliati nella colnna "D" allora hai adattato il codice che ti diedi ma non so come.
In linea di massima devi mettere tutto quel codice in un if, tipo:
Codice: Seleziona tutto
If Range("D11")<>"" then
'
'qui il precedente codice
'
End if


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

Re: [Excel]Msgbox per celle multiple

Postdi maxkoala » 20/10/16 21:37

Sono demoralizzato , non come aiutarti nella spiegazione ! la riga del codice : ' If Range("e11") = "" Then
MsgBox ("Completa il campo : QTA "), 0 + 48, Title:="Errore": Exit Sub
End If
dice: tizio ha compilato la cella D11 (solo la cella d11 !) con un valore , se tu non compili con un valore la cella E11 , restituisco valore msgbox ! questo funziona solo con la cella d11, e11.

se tizio compila la cella d11 e la cella d12 con valori si presenta la seguente esigenza : se tu compili con un valore , solo la cella E11 o solo la cella E12, restituisco valore msgbox ! cioè la condizione per andare avanti con la macro e che siano compliate entrambi.
questa condizione deve essere valida anche per campi compilati da tizio successivi a "D12"

in codice da te suggerito , soddisfa la condizione che se le celle nella colonna E sono vuote ( senza valori) , restituisce messaggio msgbox senza considerare se le corrispettive celle in D compilate da tizio sono riempite !

forse ho utilizzato male la tua stringa ! ho cambiato dolo il range di riferimento celle da d11 a e50 ( ho sbagliato qualcosa !)


mustBe = "d11:e50" '<<< L'area dei valori obbligatori
For Each Obblig In Range(mustBe)
If Obblig.Value = "" Then
Obblig.Select
MsgBox ("Completa la cella " & Obblig.Address), 0 + 48, Title:="Errore": Exit Sub
End If
Next Obblig
maxkoala
Utente Junior
 
Post: 31
Iscritto il: 09/02/13 18:35

Re: [Excel]Msgbox per celle multiple

Postdi Anthony47 » 21/10/16 00:53

Sono avvilito anche io, ma capire che cosa vi passa per la mente a volte e' piu' opera di un indovino che di un sedicente competente Excel.
Io avevo capito:
-a fronte di una cella compilata, devo essere certo che mi compili una serie di altre celle; da qui la macro che cominciava con mustBe = "E11:K11"
Ma ora forse ho decodificato meglio, forse:
-ho una colonna, es la D, che se e' compilata va obbligatoriamente compilata anche la cella accanto.

Se e' cosi', allora lo snippet di codice da usare potrebbe essere
Codice: Seleziona tutto
CheckArea = "D2:D15"        '<<< L'area da sondare in colonna D
For Each myD In Range(CheckArea)
    If myD.Value <> "" And myD.Offset(0, 1) = "" Then
        MsgBox ("Compila la cella " & myD.Offset(0, 1).Address(0, 0))
        Exit Sub
    End If
Next myD

Che sia la volta buona?

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

Re: [Excel]Msgbox per celle multiple

Postdi maxkoala » 21/10/16 17:47

mi spiace per tutto ! si.. perfetto !
maxkoala
Utente Junior
 
Post: 31
Iscritto il: 09/02/13 18:35


Torna a Applicazioni Office Windows


Topic correlati a "[Excel]Msgbox per celle multiple":


Chi c’è in linea

Visitano il forum: Nessuno e 43 ospiti