nougitch
Messages postés431Date d'inscriptionmercredi 22 octobre 2003StatutMembreDernière intervention17 novembre 2008
-
28 août 2006 à 17:22
nougitch
Messages postés431Date d'inscriptionmercredi 22 octobre 2003StatutMembreDernière intervention17 novembre 2008
-
29 août 2006 à 16:15
Bonjour,
Je suis sous un classeur XLS.
Je récupère des données d'une BDD Oracle.
Parmi ces données, une colonne récupère des priorités de trois niveaux à l'aide d'étoiles, c'est-à-dire *, ** et ***
J'aimerais que * soit remplacé par 'low', ** soit remplacé par 'medium' et *** soit remplacé par 'high'.
J'ai cru voir une fonction du genre 'Replace'.
Merci par avance à tous ceux qui voudront bien m'aider.
nougitch
Messages postés431Date d'inscriptionmercredi 22 octobre 2003StatutMembreDernière intervention17 novembre 2008 29 août 2006 à 16:13
Re,
Bon, en fait, j'ai fait un truc tout simple, mais qui marche.
J'ai créé une fonction que j'appelle à la fin de l'extraction
Sub PriorityReplace()
Dim PriorityCell As Range
ActiveSheet.Columns("H:H").Select
Dim p As String
For Each PriorityCell In Selection
If PriorityCell.Value = "-" Then
PriorityCell.Value = "Low"
ElseIf PriorityCell.Value = "*" Then
PriorityCell.Value = "Medium"
ElseIf PriorityCell.Value = "**" Then
PriorityCell.Value = "High"
ElseIf PriorityCell.Value = "***" Then
PriorityCell.Value = "Urgent"
End If
Next
End Sub
jrivet
Messages postés7392Date d'inscriptionmercredi 23 avril 2003StatutMembreDernière intervention 6 avril 201260 28 août 2006 à 17:36
Salut,
Voici une petite usine a gaz
Dim UneCellule As Range
'Selectionne la colonne D (c'est la ou j ai testé avec des ** *** *)
ActiveSheet.Columns("D:D").Select
Dim p As String
'Pour chaque cellule de la colonne
For Each UneCellule In Selection
'récupération de la valeur
p = UneCellule.Value
'remplacement des *** par high
p = Replace (p, "***", "'high'")
'remplacement des ** par medium
p = Replace(p, "**", "'medium'")
'remplacement des * par low
p = Replace (p, "*", "'low'")
'remise de p dans la cellule
UneCellule.Value = p
Next
Molenn
Messages postés797Date d'inscriptionmardi 7 juin 2005StatutMembreDernière intervention23 février 20117 28 août 2006 à 23:56
Salut Julien, Salut Mortalino,
Je ne fais que passer en coup de vent mais ... Heu .. En formule Excel, ça donne, à supposer que tu as ton ou tes * dans la cellule B2 :
Par ex, en C2 : =SI(NBCAR(B2)=1;SUBSTITUE(B2;"*";"Low");SI(NBCAR(B2)=2;SUBSTITUE(B2;"**";"Medium");SUBSTITUE(B2;"***";"High")))
Et hop là, plus qu'à jouer avec Excel.
Mais chuuuut, je suis déjà parti
Molenn
Vous n’avez pas trouvé la réponse que vous recherchez ?
jrivet
Messages postés7392Date d'inscriptionmercredi 23 avril 2003StatutMembreDernière intervention 6 avril 201260 29 août 2006 à 08:39
>Molenn: Va falloir que tu m'expliques comment utiliser ta formule car je viens de la mettre en fonction dans C2 et je viens de mettre * dans B2 et Ô miracle, rien ne s'est produit....
Molenn
Messages postés797Date d'inscriptionmardi 7 juin 2005StatutMembreDernière intervention23 février 20117 29 août 2006 à 09:45
Tu m'étonnes parce que je l'ai faite de chez moi (sous Excel 2000), aucun soucis.
Je l'essaye du boulot (sous Excel 2003), aucun soucis.
Par acquis de conscience, j'ai enlevé tout ce que je coche dans les macros complémentaires (ça aurait pu venir de là) mais non, tout fonctionne sans aucune de ces macros.
Je ne te fais pas l'affront de te demander si tu n'aurais pas un espace ou une ' avant le signe de la formule ^^SI(NBCAR(B2)=1;SUBSTITUE(B2;"*";"Low");SI(NBCAR(B2)=2;SUBSTITUE(B2;"**";"Medium");SUBSTITUE(B2;"***";"High")))
Ceci collé dans ma cellule C2.
Et quand je tape directement * dans la cellule B2, ça m'affiche bien en C2 Low, ** Medium et *** High.
La formule est on ne peut plus simple à relire et comprendre, honnêtement, je ne vois pas comment ça ne peut pas fonctionner chez toi (sauf si tu es en Excel 97, je n'ai aucune idée de l'existence de cette formule dans une version antérieure à 2000).
Je compte le nb de caractère dans la cellule B2, idem, s'il y a un espace ou une ' dans la cellule, ça fausse forcément la formule.
mortalino
Messages postés6786Date d'inscriptionvendredi 16 décembre 2005StatutMembreDernière intervention21 décembre 201118 29 août 2006 à 10:39
Re Julien,
je pense que tu peux étendre la formule (par le coin inférieur droit de la cellule) jusqu'à la ligne 600.
Les bonnes valeurs s'incrémenteront automatiquement.
Molenn
Messages postés797Date d'inscriptionmardi 7 juin 2005StatutMembreDernière intervention23 février 20117 29 août 2006 à 10:42
Effectivement, la formule ne contrôle qu'une seule cellule, mais ça dépend des besoins.
Si c'est ponctuel, ça peut être utile : Par exemple, tes données sont toutes dans la colonne B, recopier la formule dans la colonne C sur toutes les lignes prend chrono en main 3 secondes (ce qui prend le plus de temps, c'est de venir avec la souris sélectionner la première cellule ^^).
L'inconvénient, mais ça, c'est typique de toutes utilisations Excel, plus il y a de lignes, plus ton fichier s'alourdit, et c'est toujours un peu lourd quand le nb de lignes varient d'un export à l'autre, mais ça se corrige bien.
Ca dépend toujours du besoin, mais je suis toujours dans une optique au boulot : en règle générale, je fournis des fichiers Excel ou Access a des collègues, je leur prépare des fichiers pour le traitement des données. Je vais toujours au plus simple parce que le jour où ils ont un pb, ils arrivent à se débrouiller tout seul en recopiant les formules, etc ...
Avec du code VB, si un jour il y a un msg de debug, c'est la fin : je suis toujours dérangé ^^
Après, en code, c'est sûrement plus propre dans le sens où tu peux adapter à une taille aléatoire de données, sans être obligé de rajouter des lignes, etc ...
Mais en fait, il y aurait même encore plus simple qu'une boucle, etc ...
Suffit de sélectionner toute la colonne, et de faire un ctrl+H : et de remplacer "***" par "High", puis **, etc ...
Tout est question de besoin ^^
nougitch
Messages postés431Date d'inscriptionmercredi 22 octobre 2003StatutMembreDernière intervention17 novembre 2008 29 août 2006 à 15:33
Bonjour,
Merci pour vos réponses et remarques...
En fait, j'opte plutôt pour l'automatisme, c'est-à-dire que dans la BDD, ce sont des étoiles, mais qu'à l'affichage, il y a le texte.
Cela doit donc se passer entre l'extraction et l'affichage mais quelle formule utiliser ?
Merci.
Voici un bout de mon code :
' Fetch the content of the temporary table
query = "select id ""N° Request"", type ""Type"", business_line ""Origin"", hub ""Hub"", open_date ""Request Date"", summary ""Summary"", task_est_effort ""Estimated Effort"", priority ""Priority"", task_status ""Task status"", wished_date ""Deadline"", comments ""Comments"" "
query = query & "from tmp_change " query query & "where user_id 'windows_login' "
query = query & "order by open_date desc"
cmd.CommandText = query
Set rst = cmd.Execute
' Transfer the result set into the Excel worksheet
For i = 0 To rst.Fields.Count - 1 Step 1
Cells(1, i + 1).Value = rst.Fields(i).Name
Next
rst.MoveFirst
Row = 2
While Not rst.EOF
For i = 0 To rst.Fields.Count - 1 Step 1
Cells(Row, i + 1).Value = rst(i).Value
Next
Row = Row + 1
rst.MoveNext
Wend
nougitch
Messages postés431Date d'inscriptionmercredi 22 octobre 2003StatutMembreDernière intervention17 novembre 2008 29 août 2006 à 15:33
Bonjour,
Merci pour vos réponses et remarques...
En fait, j'opte plutôt pour l'automatisme, c'est-à-dire que dans la BDD, ce sont des étoiles, mais qu'à l'affichage, il y a le texte.
Cela doit donc se passer entre l'extraction et l'affichage mais quelle formule utiliser ?
Merci.
Voici un bout de mon code :
' Fetch the content of the temporary table
query = "select id ""N° Request"", type ""Type"", business_line ""Origin"", hub ""Hub"", open_date ""Request Date"", summary ""Summary"", task_est_effort ""Estimated Effort"", priority ""Priority"", task_status ""Task status"", wished_date ""Deadline"", comments ""Comments"" "
query = query & "from tmp_change " query query & "where user_id 'windows_login' "
query = query & "order by open_date desc"
cmd.CommandText = query
Set rst = cmd.Execute
' Transfer the result set into the Excel worksheet
For i = 0 To rst.Fields.Count - 1 Step 1
Cells(1, i + 1).Value = rst.Fields(i).Name
Next
rst.MoveFirst
Row = 2
While Not rst.EOF
For i = 0 To rst.Fields.Count - 1 Step 1
Cells(Row, i + 1).Value = rst(i).Value
Next
Row = Row + 1
rst.MoveNext
Wend