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
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.