Test d'une chaine de caracteres

  • Initiateur de la discussion Delyric
  • Date de début
D

Delyric

Guest
Bonjour tout le monde, je voudrais mettre au point une macro qui puisse trouver dans une colonne une chaine de caractere et ensuite suivant le resultat renvoye une valeur dans une autre colonne .

ex
col1 col2 col3 col4

tester dans les champs de la colonne 2 si la chaine de caractere "socket 478" apparait si oui inscrire dans la col4 "pentium"

d'avance merci

Delyric
 
D

Delyric

Guest
Super !!! Excellent, tu pourrais me donner le code pour que je puisse faire le meme pour amd ou encore en faire une qui renvoie amd ou intel suivant socket 478 ou socket A

Voila, merci d'avance

Delyric
 
C

C@thy

Guest
Bonjour Delyric et Eric

Tu es sûr qu'il te faut une macro pour ça? Pourquoi ne pas utiliser une fonction SI?

pour voir le code que t'a écrit Eric :

Tu fais Alt+F11

ensuite dans l'explorateur de projets (fenêtre de gauche) tu cliques sur ThisWorkbook


BipBip.gif
 
D

Delyric

Guest
Bonjour cathy, je suis debutant en excel et la je ne m'en sers que parce que je n'ai pas le choix.

Le probleme de depart est de convertir une feuille excel en base sql. Ce que j'ai fait, mais pour plus de souplesses je voudrais creer de nouvelles colonnes (qui seront de futurs champs dans la base sql) a partir de macro

Dans ce cas present, cette macro va me donner le fabriquant, mais d'autres macros me donneront la famille du produit... par exemple carte mere, ou processeur.

Donc voila, a partir d'une feuille excel existante je veux pouvoir rechercher des chaines de caracteres differentes qui me renverrons dans d'autres colonnes des infos que je pourrais exploiter dans ma base sql.

J'espere que vous aurez tout compris :)

Delyric, qui remercie toutes les personnes qui l'ont deja aidé
 
D

Delyric

Guest
Salut Eric ta macro marche mais a condition que le champs ne comporte que socket478 mais comment faire pour que cela marche quand les champs contiennent :

CM socket 478 MSI 648 Max-L(MS-6585) SIS 648 P4/533MHz ATA/133 3XDDR333 AGP8X USB 2.0 Son + LAN

ou

CM socket 478 ABIT BG7E Intel845GE P4/533MHz 3XDDR333 USB 2.0 Son+LAN+Vidéo int.

la macro que je voudrais, scannerai ces chaines de caracteres, si elle trouve socket 478 alors la colonne 4 recoit pentium

...

Delyric
 
M

Mytå

Guest
Salut Delyric et le forum

Essaye ceci et donne moi des nouvelles

verifier si la colonne B a socket 478 ecrit pentium dans colonne D

Sub Trouver()
fin = Range("b65535").End(xlUp).Row
For i = 1 To fin
Cells(i, 4).FormulaR1C1 = "=IF(ISNUMBER(FIND(""socket 478"",RC[-2],1)),""Pentium"","""")"
Next i
End Sub

A suivre
smiley_417.gif


P.S. Prière d'accuser réception si cela te convient
ou ne convient pas en répondant sur ce Post ... Merci !
 
M

Mytå

Guest
Re le forum

Delyric j'avais mal lu, ici ta cellule n'aura pas de formule

Sub Trouver()
On Error Resume Next
For i = 1 To Range("b65535").End(xlUp).Row
a = Application.WorksheetFunction.Find("socket 478", Range("B" & i), 1)
If a <> vide Then Cells(i, 4) = "Pentium" Else Cells(i, 4) = ""
a = ""
Next i

Mytå
 
D

Delyric

Guest
Salut Mita, pourrais tu m'expliquer comment utiliser ces lignes de codes, je suis novice dans excel :-( . Sinon peut on utiliser cette macro avec plusieurs recherches ?

exemple : si dans la chaine on trouve "socket 478" la colonne 4 (par ex recoit la valeur pentium), si on trouve "socket A" la colonne 4 recoit "Amd", si on trouve "socket 370" ... P3, etc ...

voici ma macro, mais elle ne marche que la colonne ne comporte que "socket 478" ou "socket 370" ou "socket A", par contre si "socket 478" se trouve dans une chaine de caractere cela ne marche plus ...

Private Sub Typecompo_Click()
Dim cellule As Range
For Each cellule In Range("b1", Range("b65000").End(xlUp))
If cellule = "socket 478" Then cellule.Offset(0, 4) = "P4"
If cellule = "socket 370" Then cellule.Offset(0, 4) = "P3"
If cellule = "socket A" Then cellule.Offset(0, 4) = "Amd"

Next
End Sub
 
M

Mytå

Guest
Re Delyric

Avec ceci tu devrais trouver ton bonheur, j'ai modifier ton code :

Private Sub Typecompo_Click()
'Ecrire en colonne F (P4, P3 ou AMD)
'Si colone B contient (socket 467, socket 370 ou socket A)
Dim cellule As Range, valeur As String
On Error Resume Next
For Each cellule In Range("b1", Range("b65000").End(xlUp))
cellule.Offset(0, 4) = ""
valeur = "": valeur = Application.WorksheetFunction.Find("socket 478", cellule, 1)
If valeur <> "" Then cellule.Offset(0, 4) = "P4"
valeur = "": valeur = Application.WorksheetFunction.Find("socket 370", cellule, 1)
If valeur <> "" Then cellule.Offset(0, 4) = "P3"
valeur = "": valeur = Application.WorksheetFunction.Find("socket A", cellule, 1)
If valeur <> "" Then cellule.Offset(0, 4) = "Amd"
Next cellule
End Sub

smiley_417.gif
 
D

Delyric

Guest
Salut Myta, j'ai un dernier conseil a te demander, apres je ne t'embetes plus, promis ;-)

Est il possible d'exporter ta fonction pour qu'elle soit disponible pour toutes les feuilles excels ? Comme un bouton supplementaire dans la barre des taches ... ainsi, je pourrais lancer cette fonction a partir de n'importe quelles feuilles excels ...

Delyric (le debutant en excel) :)
 
M

Mytå

Guest
Re le forum

Delyric pour toutes les feuilles du meme classeur tu peux lui attribuer un
raccourci clavier.

tu fais ALT+F8 tu selectionnes ta macro
tu vas dans options dans touche de raccourci tu ecris MAJ+T

Ta macro aura alors comme raccourci clavier CTRL+MAJ+T

Si c'est pour plusieurs classeur different faudrait aller du cote des macros
personnels.

A suivre
smiley_417.gif
 

Discussions similaires

Statistiques des forums

Discussions
312 195
Messages
2 086 078
Membres
103 111
dernier inscrit
Eric68350