Automatisch grafiek maken

  • Onderwerp starter Onderwerp starter HJ25
  • Startdatum Startdatum
Status
Niet open voor verdere reacties.

HJ25

Gebruiker
Lid geworden
30 jan 2013
Berichten
304
Hallo,

in bijgevoegd bestand heb ik een deel van een planning staan. Nu is het de bedoeling dat ik dmv een knop hier direct een grafiek van krijg. Het probleem hierbij is dat ik met tijden werk. Daarnaast moet in de grafiek, wanneer er in het schema bij de begintijd 10:00 uur en bij de eindtijd 12:00 uur staat dat in de grafiek aangegeven wordt dat dit deel dus van 10:00 tot 12:00 in gebruik is.

Bij de grafiek moet in de horizontale as in de grafiek de waarden van elk uur bevatten van 08:00 tot 22:00 uur. Is dit mogelijk?
 

Bijlagen

Laatst bewerkt:
Wat je wilt realiseren is geen grafiek. Je wilt eigenlijk een soort planning hebben...
Is dit een oplossing? Natuurlijk nog zonder macro's of tiereletijntjes..

Nog een puntje. Als de tijden die op je blad staan weggeschreven worden door een userform of iets dergelijks.
Zorg ervoor dat VBA een 'tijd' wegschrijft en niet al tekst...

Misschien: TimeValue(Format(TextBox1, "h:mm"))
 

Bijlagen

Ja zoiets zoek ik wel ja! Het moet gewoon overzichtelijk zijn wie wanneer gebruik maakt van, in dit geval, deel A. Eventueel zou er dan nog de klantnaam voor moeten komen te staan. Uiteindelijk zou het natuurlijk mooi zijn dat dit er ook nog eens mooi uit komt te zien, dmv een grafiek o.i.d.

Maar je hebt mijn idee begrepen!

Zelf leek het me mooi, en ook duidelijk, om het te doen zoals in de bijlage. Hierbij moet het eigenlijk zo zijn dat wanneer er twee klanten op dezelfde tijden op hetzelfde deel ingepland staan dat de ene klant het lijntje t.h.v. nummer 1 krijgt en de volgende klant t.h.v. nummer 2, maar of dit mogelijk is weet ik niet.
 

Bijlagen

Laatst bewerkt:
Als je mijn voorbeeldbestand aanpast naar je gewenste resultaat dan kunnen we zien wat je wilt, want niemand anders dan jezelf weet welke info er moet staan en waar je het vandaan haalt...
Ik zie alleen een tabelletje waar ik een 'kruistabel' van gemaakt heb en de letter A
 
Bij deze een bestand die hopelijk wat duidelijker is.

Ik heb namelijk straks in een ander bestand een grote database waarbij allerlei klanten staan die gebruik willen maken van verschillende delen. Nu gaat het alleen even om deel A. Ik ga een macro maken waarbij automatisch alle informatie van deel A gekopieerd wordt en geplakt wordt in een nieuw werkblad met daarvoor de klantnaam (zoals in het bestand te zien is in de tabel in A1:E12.

Hier komen de begin- en eindtijden te staan dat de klant gebruik wil gaan maken van deel A. Vervolgens is het de bedoeling dat er een overzicht gemaakt wordt zoals te zien is in W1:AL12. Hierbij moet bij de juiste klant die gebruikmaakt van deel A op de desbetreffende tijden een "1" komen te staan, zoals nu te zien is bij klant 1. Dit moet voor alle klanten zo gedaan worden in dezelfde tabel. Maar! Wanneer wanneer bijvoorbeeld klant 1 al gebruikmaakt van deel A tussen 10:00 en 12:00 dan moet bij bijvoorbeeld klant 4 (wanneer deze ook tussen 10:00 en 12:00 gebruikmaakt van deel A) een "2" komen te staan. Mocht klant 4 alleen maar gebruikmaken van deel A op tijden waarop nog niemand dit deel gebruikt, dan kan er gewoon weer een "1" komen te staan.

Vervolgens moet dit in de grafiek komen te staan zoals deze ook in de bijlage staat. Hierdoor is er snel te zien wie wanneer gebruikmaakt van deel A, en of er eventueel deelgebruik is.

Als laatste zou het mooi zijn dat de klanten die geen gebruikmaken van deel A ook niet meegenomen worden in de grafiek, zodat alleen de klanten in de legenda staan die ook daadwerkelijk gebruikmaken van deel A.

Ik hoop dat het nu wat duidelijker is...
 

Bijlagen

Sorry, maar wat verwacht je dat wij nu gaan doen?
Denk dat je met de kennis die je onderhand wel bezit en de macrorecorder een heel eind komt. Mocht je hierin tegen problemen aanlopen dan zullen wij uiteraard proberen te helpen..
 
Prima ik zal hem op opgelost zetten ook al is dit niet het geval...
 
Ik heb de formule naar een ander bestand gekopieerd maar hier werkt hij niet. Wat doe ik verkeerd?
 

Bijlagen

Lees #2 nog eens en dan specifiek vanaf "Nog een puntje".
Dat is nu aan de hand. In de tabel staan geen tijden, maar teksten. Druk maar eens in een cel met waarde op F2 en dan Enter, pas na die Enter maakt Excel er een tijd van en dan doet ie het wel.

Als je trouwens cijfers gaat wegschrijven zoals in je formule doe je dat zonder "-tekens
=ALS(OF(EN(G$2>=$A3;G$2<=$B3);EN(G$2>=$C3;G$2<=$D3));1;"")
 
Oke maar ik heb dit al voor alle comboboxen gedaan:
Code:
Private Sub ComboBox1_Change()
ComboBox1.Value = Format(ComboBox1, "hh:mm")
End Sub
Of is het hoe ik het heb niet goed?

Ah aan dat laatste heb ik even niet gedacht! Bedankt voor de oplettendheid!
 
Dat is wel goed, maar in een combobox zelf heb je daar toch niet zoveel aan?
Het gaat erom hoe je hem wegschrijft naar je werkblad
Code:
Sheets(1).Range("A1") = [COLOR="#FF0000"]Format([/COLOR]Combobox1[COLOR="#FF0000"], "hh:mm")[/COLOR]
 
Oke ik snap het! Als ik dit dus voor ComboBox1 wil doen in het bereik AB3:AB in het werkblad "Planningsoverzicht" dan komt het er dus zo uit te zien?
Code:
Sheets("Planningsoverzicht").Range("AB3:AB") = Format(ComboBox1, "hh:mm")

Ow en moet ik deze code dan achter het werkblad "Planningsoverzicht" zetten met Private Sub planningsoverzicht_initialize ofzo?
 
Uuuhm (voorzichtige) ja, ik weet niet hoe je de data naar je werkblad schrijft, maar dat moet je dan met de Format functie doen ja...
 
Even voor de zekerheid dan maar de code zoals ik de gegevens in het werkblad zet:
Code:
Private Sub CommandButton1_Click()
If MsgBox("Weet u zeker dat u de gegevens wilt invoeren?", vbYesNo, "Gegevens invoeren") = vbYes Then
    With Sheets("Planningsoverzicht")
    .Cells(Rows.Count, 1).End(xlUp).Offset(1, 2).Resize(1, 241).Value = Array(TextBox500, ListBox1, (ENZOVOORT ENZOVOORT ENZOVOORT) ComboBox170, ComboBox171)
    End With
    MsgBox "De gegevens zijn ingevoerd!", vbOKOnly, "Gegevensinvoer"
    Unload Nieuw
End If
End Sub

Gaat dit dan goed komen denk je?
Ow en moet ik voor elke combobox opnieuw de code in #12 invoeren of is er een code waarbij ik dit voor meerdere tegelijk kan doen?
 
Laatst bewerkt:
Met een Array durf ik het zo niet te zeggen, dat zou je even moeten proberen bijv:
Code:
.Cells(Rows.Count, 1).End(xlUp).Offset(1, 2).Resize(1, 241).Value = [COLOR="#FF0000"]Format([/COLOR]Array(TextBox500, ListBox1, (ENZOVOORT ENZOVOORT ENZOVOORT) ComboBox170, ComboBox171)[COLOR="#FF0000"], "hh:mm")[/COLOR]
ofzo iets?

Nee dat hoeft niet, zolang je maar bij het wegschrijven van je data naar het werkblad (in jouw geval met een CommandButton) aangeeft dat het om Format(*, "hh:mm") gaat...
 
Ik ben bang dat dit heel lastig gaat worden. Ik heb namelijk ook allemaal textboxen enzo die tegelijk met de comboboxen ingevoerd worden. Of is dit geen probleem? Wanneer ik jouw code probeer dan krijg ik: "Fout 13 tijdens uitvoering: Typen komen niet met elkaar overeen". Als ik vervolgens op foutopsporing klik wordt het deel vanaf .Cells t/m "hh:mm" geel met een gele pijl bij "hh:mm".
 
Wat je ook zou kunnen doen is, wanneer alles weggeschreven is met een code alle cellen die gevuld zijn op F2 laten drukken en dan past ie ze automatisch aan...
Gebaseerd op je tabelletje in je voorbeeld
Code:
Sub Spaarie()
    With Sheets(1)
        For Each cel In .Range("A2:D" & .Range("A" & Rows.Count).End(xlUp).Row) 'of .UsedRange
            If cel <> "" Then cel = Trim(cel.Value)
        Next
    End With
End Sub
 
Laatst bewerkt:
Ik denk dat dat verstandiger is ja! Ik neem aan dat ik het deel vanaf Width Sheets tot het eind kan plakken in de code voor het wegschrijven?

En kan ik wanneer ik bijvoorbeeld G3:G wel, maar de kolommen E en F niet, wil toevoegen aan het deel
Code:
.Range("A2:D" & .Range("A" & Rows.Count)
dit doen zoals hieronder?
Code:
.Range("A2:D" [COLOR="#0000CD"]& "G3:G"[/COLOR] & .Range("A" & Rows.Count)

Of is het stukken makkelijker om gewoon UsedRange te gebruiken? (sorry maar hier heb ik nog niet mee gewerkt in visual basic)
 
Laatst bewerkt:
Ja vanaf With...

En ik zou het dan zo een beetje doen
Code:
    With Sheets(1)
    lRij = .UsedRange.Rows.Count
        For Each cel In .Range("A2:D" & lRij, "G2:J" & lRij)
            If cel <> "" Then cel.Value = Trim(cel.Value)
        Next
    End With
 
Het is gelukt met een klein bereik, maar nu heb ik een groot deel van alle stukken waar dit in moet gebeuren maar hij geeft dan de hele regel vanaf "For Each cel" een foutmelding. Zit hier soms een maximum aan? Ik heb de code nu zoals hieronder:
Code:
lRij = .UsedRange.Rows.Count
[COLOR="#FF0000"]For Each cel In .Range("AB3:CE" & lRij, "CG3:CJ" & lRij, "CL3:CO" & lRij, "CQ3:CT" & lRij, "CV3:CY" & lRij, "DA3:DD" & lRij, "DF3:DI" & lRij, "DK3:DN" & lRij, "DP3:DS" & lRij, "DU3:DX" & lRij, "DZ3:EC" & lRij, "EE3:EH" & lRij, "EJ3:EM" & lRij, "EO3:ER" & lRij, "ET3:EW" & lRij, "EY3:FR" & lRij, "FU3:GJ" & lRij, "GL3:GU" & lRij, "GY3:HD" & lRij)[/COLOR]
If cel <> "" Then cel.Value = Trim(cel.Value)
Next
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan