Formatage cellules en VB et rafraichissement de graphique

Bonjour,

N'étant pas expert dans le codage VB Excel je viens vers vous exposer mon problème qui semblera peut-être simple pour vous mais sur lequel je bloque.

Je souhaite générer un graphique via des données importées depuis une base Oracle.

Le graphique est basé sur un onglet qui comporte les données importées après une simple requête SQL.

J'ai défini 4 graphiques dans le même "objet graphique Excel" et je n'arrive pas à formater toutes les données comme il le faudrait.

Après import dans l'onglet données, le graphique avec les numériques s'affiche correctement mais les autres ne se rafraichissent pas.

J'ai essayé de formater manuellement les colonnes avant import et aussi via le code VB mais rien ne fonctionne.

Par contre en "entrant dans les cellules" une par une, sous Windows via la touche F2 et Entrée (ou double clic sur la cellule et Entrée), là le format est appliqué à la cellule en question et le graphique le prend en compte automatiquement (exemple de la colonne C dans les images pour les ç première lignes, le second graphique en vert s'affiche pour ces valeurs).

Le code généré par cette action, et pour un exemple de cellule, ne m'avance pas plus:

ActiveCell.FormulaR1C1 = "2:57:23 AM"

wks.Range("$C$1").Select

En gros il prend la valeur de la cellule et lui ajouter " AM" et fait un select. J'ai donc ajouté dans le formatage manuel le " AM"/" PM" mais rien ne change.

J'ai bien la solution de faire une boucle sur toutes les cellules concernées et de faire générer les actions touche " F2" et "Entrée" mais ce n'est pas vraiment propre ni performant...

En pièces jointes le graphique avant ma manipulation sur les cellules, idem pour les données, et le résultat après.

Je n'ai rien fais de plus que de faire "F2" et entrer machinalement sur une dizaine de cellules.

Avez-vous une idée de l'action à faire, paramétrage ou code ?

Merci par avance de votre aide

graph avant f2 entree graph apres f2 entree donnees f2 entree

Bonjour,

Merci de joindre un ficher à ta demande.

Cdlt.

Bonjour

Et aussi préciser le moyen utiliser pour l'import des données Oracle.

J'avais posté le problème sur un autre forum de dev fin de semaine dernière et je viens tout juste d'avoir la réponse lorsque j'écrivais ici

Voilà une solution de Phil Free, qui fonctionne très bien, sur le forum en question, un reformatage via une colonne temporaire puis un collage spécial:

Sub Demo()
    Dim DerniereLigne As Long, Maplage As Range
    Dim Mafeuille As Worksheet
    Application.ScreenUpdating = False
    Set Mafeuille = Worksheets("Feuil1") 'la feuille sur la quelle cela se passe
    With Mafeuille
        DerniereLigne = .Range("B" & Columns("B").Rows.Count).End(xlUp).Row 'recherche dernière valeur
        Set Maplage = .Range("H1:H" & DerniereLigne) 'on en profite pour définir la plage temporaire en colonne H
    End With
    With Maplage.Cells(1) 'sur la première cellule de la colonne temporaire
        .Formula = "=TIMEVALUE(IF(ISNONTEXT(B1)=TRUE,TEXT(B1,""hh:mm:ss""),B1))" 'on écrit la formule excel qui va bien
        'note que la formule contient une fonction "isnontext" "EstNonTexte" en français qui permet ici de gérer un cas toujours
        'possible de valeur déjà au bon format ce qui nous évitera de se retrouver avec une erreur #Valeur
        .NumberFormat = "[$-x-systime]h:mm:ss AM/PM" 'on lui donne le bon format
        .AutoFill Maplage 'on étend la formule à toute la plage temporaire
    End With
    Maplage.Copy 'on copie 
    Mafeuille.Range("C1").PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:=xlNone, SkipBlanks:=False, Transpose:=False ' et on colle en colonne C les valeurs et leur format
    Maplage.ClearContents 'on efface le contenu de la colonne temporaire
    Application.ScreenUpdating = True
End Sub

Merci à lui et à vous pour votre réactivité...

J'espère que cette solution servira.

Rechercher des sujets similaires à "formatage rafraichissement graphique"