OVH Cloud OVH Cloud

Formule conditionnelle en vba

7 réponses
Avatar
ericy9
Bonjour,

A l'aide d'une macro vba, j'aimerais extraire la chaine entre < et >
de chaque cellule de la colonne A quand il y en a et garder le contenu
tel quel sinon et le recopier dans la colonne B.
Dans votre excellent site excelabo, l'astuce signée par
Laurent Mortézai, ChrisV, Alain Vallon et Isabelle (N°139)
contenant
=SUBSTITUE(STXT(A1;TROUVE(">";A1)+1;999);"<123";)
résout mon problème sous la forme
=SUBSTITUE(STXT(Z;TROUVE("<";Z)+1;200);">";)
mais je n'arrive pas à faire tourner en vba d'autant plus que
l'absence de '<' retourne une erreur.

Serait-il déplacé de vous demander aussi une référence de livre sur
vba ?

Merci d'avance de votre aide.

Eric

7 réponses

Avatar
Philippe.R
Bonsoir Eric,
Pour la référence de livre, regarde sur la page d'accueil de la FAQ, tout en bas, il y a une
bibliographie assez fournie.
http://dj.joss.free.fr/faq.htm
--
Amicales Salutations
XL 97 / 2000 / 2002
Retirer A_S_ pour répondre en privé.

"Eric" a écrit dans le message de
news:
Bonjour,

A l'aide d'une macro vba, j'aimerais extraire la chaine entre < et >
de chaque cellule de la colonne A quand il y en a et garder le contenu
tel quel sinon et le recopier dans la colonne B.
Dans votre excellent site excelabo, l'astuce signée par
Laurent Mortézai, ChrisV, Alain Vallon et Isabelle (N°139)
contenant
=SUBSTITUE(STXT(A1;TROUVE(">";A1)+1;999);"<123";)
résout mon problème sous la forme
=SUBSTITUE(STXT(Z;TROUVE("<";Z)+1;200);">";)
mais je n'arrive pas à faire tourner en vba d'autant plus que
l'absence de '<' retourne une erreur.

Serait-il déplacé de vous demander aussi une référence de livre sur
vba ?

Merci d'avance de votre aide.

Eric


Avatar
isabelle
bonjour Eric,

il y a cette macro coplémentaire que tu pourrais utilisé,

=MotCentre(Z;"<";">")

Function MotCentre(ByVal Chaine$, _
Optional SeparateurX$ = " ", Optional SeparateurY$ = " ")
Dim posX, posY, nbcarT, nbcarX, MotIntérieurDélimité_X
nbcarT = Len(Chaine)
nbcarX = Len(SeparateurX)
posX = Application.Search(SeparateurX, Chaine)
posY = Application.Search(SeparateurY, Chaine, posX)
MotIntérieurDélimité_X = Right(Chaine, nbcarT - posX - nbcarX + 1)
On Error GoTo fin
MotCentre = Left(MotIntérieurDélimité_X, posY - posX - nbcarX)
Exit Function
fin:
MotCentre = MotIntérieurDélimité_X
End Function

isabelle


Bonjour,

A l'aide d'une macro vba, j'aimerais extraire la chaine entre < et >
de chaque cellule de la colonne A quand il y en a et garder le contenu
tel quel sinon et le recopier dans la colonne B.
Dans votre excellent site excelabo, l'astuce signée par
Laurent Mortézai, ChrisV, Alain Vallon et Isabelle (N°139)
contenant
=SUBSTITUE(STXT(A1;TROUVE(">";A1)+1;999);"<123";)
résout mon problème sous la forme
=SUBSTITUE(STXT(Z;TROUVE("<";Z)+1;200);">";)
mais je n'arrive pas à faire tourner en vba d'autant plus que
l'absence de '<' retourne une erreur.

Serait-il déplacé de vous demander aussi une référence de livre sur
vba ?

Merci d'avance de votre aide.

Eric


Avatar
Clément Marcotte
Bonjour,

A l'aide d'une macro vba, j'aimerais extraire la chaine entre < et >
de chaque cellule de la colonne A quand il y en a et garder le
contenu

tel quel sinon et le recopier dans la colonne B.



Sous réserve d'avoir bien compris:

Sub LeMénageDeLaColonneA()
Dim derniereligne As Long, i As Long
Dim lagauche As Integer, ladroite As Integer
Dim letexte As String
'recherche du numéro de la dernière ligne occupée
derniereligne = [a65536].End(xlUp).Row
For i = 1 To derniereligne
letexte = Cells(i, 1).Text
'Recherche la position de >
lagauche = InStr(letexte, "<")
'Recherche la position de >
ladroite = InStrRev(letexte, ">")
If lagauche > 0 And ladroite > 0 And Not (lagauche > ladroite) Then
'Les deux signes sont présents
'Extrait le texte cherché et le copie
'dans la colonne adjacente
Cells(i, 2).Value = Mid(letexte, lagauche + 1, ladroite - lagauche -
1)
ElseIf lagauche > 0 And ladroite = 0 Then
'il y a un < mais pas de >
'Copie tout ce qu'il y a à la droite
Cells(i, 2).Value = Right(letexte, lagauche + 1)
ElseIf lagauche = 0 And ladroite > 0 Then
'il y a un > mais pas de <
'Copie tout ce qu'il y a à la gauche
Cells(i, 2).Value = Left(letexte, ladroite - 1)
ElseIf ladroite < lagauche Then
Cells(i, 2).Value = "Les balises ne sont pas dans le bon ordre"
Else
'Il n 'y a pas de > ni de <
End If
Next
End Sub

Serait-il déplacé de vous demander aussi une référence de livre sur
vba ?



Il y a une bibliographie chez Daniel:

http://dj.joss.free.fr/faq.htm#lecteur

Avatar
ericy9
Bonjour,

Ca marche parfaitement.
Merci beaucoup et merci pour la bibliographie.

Eric

"Clément Marcotte" wrote in message news:<#...
Bonjour,

A l'aide d'une macro vba, j'aimerais extraire la chaine entre < et >
de chaque cellule de la colonne A quand il y en a et garder le
contenu

tel quel sinon et le recopier dans la colonne B.



Sous réserve d'avoir bien compris:

Sub LeMénageDeLaColonneA()
Dim derniereligne As Long, i As Long
Dim lagauche As Integer, ladroite As Integer
Dim letexte As String
'recherche du numéro de la dernière ligne occupée
derniereligne = [a65536].End(xlUp).Row
For i = 1 To derniereligne
letexte = Cells(i, 1).Text
'Recherche la position de >
lagauche = InStr(letexte, "<")
'Recherche la position de >
ladroite = InStrRev(letexte, ">")
If lagauche > 0 And ladroite > 0 And Not (lagauche > ladroite) Then
'Les deux signes sont présents
'Extrait le texte cherché et le copie
'dans la colonne adjacente
Cells(i, 2).Value = Mid(letexte, lagauche + 1, ladroite - lagauche -
1)
ElseIf lagauche > 0 And ladroite = 0 Then
'il y a un < mais pas de >
'Copie tout ce qu'il y a à la droite
Cells(i, 2).Value = Right(letexte, lagauche + 1)
ElseIf lagauche = 0 And ladroite > 0 Then
'il y a un > mais pas de <
'Copie tout ce qu'il y a à la gauche
Cells(i, 2).Value = Left(letexte, ladroite - 1)
ElseIf ladroite < lagauche Then
Cells(i, 2).Value = "Les balises ne sont pas dans le bon ordre"
Else
'Il n 'y a pas de > ni de <
End If
Next
End Sub

Serait-il déplacé de vous demander aussi une référence de livre sur
vba ?



Il y a une bibliographie chez Daniel:

http://dj.joss.free.fr/faq.htm#lecteur



Avatar
ericy9
Bonjour,

Merci pour ta solution.
:-)

Eric

isabelle wrote in message news:...
bonjour Eric,

il y a cette macro coplémentaire que tu pourrais utilisé,

=MotCentre(Z;"<";">")

Function MotCentre(ByVal Chaine$, _
Optional SeparateurX$ = " ", Optional SeparateurY$ = " ")
Dim posX, posY, nbcarT, nbcarX, MotIntérieurDélimité_X
nbcarT = Len(Chaine)
nbcarX = Len(SeparateurX)
posX = Application.Search(SeparateurX, Chaine)
posY = Application.Search(SeparateurY, Chaine, posX)
MotIntérieurDélimité_X = Right(Chaine, nbcarT - posX - nbcarX + 1)
On Error GoTo fin
MotCentre = Left(MotIntérieurDélimité_X, posY - posX - nbcarX)
Exit Function
fin:
MotCentre = MotIntérieurDélimité_X
End Function

isabelle


Bonjour,

A l'aide d'une macro vba, j'aimerais extraire la chaine entre < et >
de chaque cellule de la colonne A quand il y en a et garder le contenu
tel quel sinon et le recopier dans la colonne B.
Dans votre excellent site excelabo, l'astuce signée par
Laurent Mortézai, ChrisV, Alain Vallon et Isabelle (N°139)
contenant
=SUBSTITUE(STXT(A1;TROUVE(">";A1)+1;999);"<123";)
résout mon problème sous la forme
=SUBSTITUE(STXT(Z;TROUVE("<";Z)+1;200);">";)
mais je n'arrive pas à faire tourner en vba d'autant plus que
l'absence de '<' retourne une erreur.

Serait-il déplacé de vous demander aussi une référence de livre sur
vba ?

Merci d'avance de votre aide.

Eric




Avatar
ericy9
Bonjour,

Merci pour les références.
:-)

Eric

"Philippe.R" wrote in message news:...
Bonsoir Eric,
Pour la référence de livre, regarde sur la page d'accueil de la FAQ, tout en bas, il y a une
bibliographie assez fournie.
http://dj.joss.free.fr/faq.htm
--
Amicales Salutations
XL 97 / 2000 / 2002
Retirer A_S_ pour répondre en privé.

"Eric" a écrit dans le message de
news:
Bonjour,

A l'aide d'une macro vba, j'aimerais extraire la chaine entre < et >
de chaque cellule de la colonne A quand il y en a et garder le contenu
tel quel sinon et le recopier dans la colonne B.
Dans votre excellent site excelabo, l'astuce signée par
Laurent Mortézai, ChrisV, Alain Vallon et Isabelle (N°139)
contenant
=SUBSTITUE(STXT(A1;TROUVE(">";A1)+1;999);"<123";)
résout mon problème sous la forme
=SUBSTITUE(STXT(Z;TROUVE("<";Z)+1;200);">";)
mais je n'arrive pas à faire tourner en vba d'autant plus que
l'absence de '<' retourne une erreur.

Serait-il déplacé de vous demander aussi une référence de livre sur
vba ?

Merci d'avance de votre aide.

Eric




Avatar
Philippe.R
Bonjour Eric,
La réponse de Clément était plus complète, mais c'était avec plaisir.
--
Amicales Salutations

"Eric" a écrit dans le message de
news:
Bonjour,

Merci pour les références.
:-)

Eric

"Philippe.R" wrote in message news:...
Bonsoir Eric,
Pour la référence de livre, regarde sur la page d'accueil de la FAQ, tout en bas, il y a une
bibliographie assez fournie.
http://dj.joss.free.fr/faq.htm
--
Amicales Salutations
XL 97 / 2000 / 2002
Retirer A_S_ pour répondre en privé.

"Eric" a écrit dans le message de
news:
Bonjour,

A l'aide d'une macro vba, j'aimerais extraire la chaine entre < et >
de chaque cellule de la colonne A quand il y en a et garder le contenu
tel quel sinon et le recopier dans la colonne B.
Dans votre excellent site excelabo, l'astuce signée par
Laurent Mortézai, ChrisV, Alain Vallon et Isabelle (N°139)
contenant
=SUBSTITUE(STXT(A1;TROUVE(">";A1)+1;999);"<123";)
résout mon problème sous la forme
=SUBSTITUE(STXT(Z;TROUVE("<";Z)+1;200);">";)
mais je n'arrive pas à faire tourner en vba d'autant plus que
l'absence de '<' retourne une erreur.

Serait-il déplacé de vous demander aussi une référence de livre sur
vba ?

Merci d'avance de votre aide.

Eric