OVH Cloud OVH Cloud

tableau/variable valeurs multiples/collection

4 réponses
Avatar
Spectre
Bonjour à tous,

Bon, vous allez me dire que je suis pas sur le bon forum mais j'y suis
quand même parce que c'est ici que je trouve les bonnes réponses, le
plus vite (que de pommade passée dans le dos!) :-)

Bon, j'ai développé une petite moulinette pour mettre en forme le n° de
téléphone du carnet de contact outlook (ex : +33 (45) 678978 serait
transformé en + 33 45 67 89 78)
.

J'ai trois questions / problèmes
- caractères inutiles à supprimer dans le n° de tel d'origine
j'utilise une variable "strNoValid" à laquelle je voudrais faire
correspondre différentes valeurs lors de l'utilisation de la fonction
replace. Quelquechose du type
strNoValid = );(;; " ";
Y a t il une syntaxe permettant donc d'associer des valeurs différentes
à une seule variable? Sinon, comment faire?

- dans les contacts figurent de nombreux champs pour saisir des n° de
téléphone.
Dans le code ci-dessous, la fonction ne s'applique qu'au n° de
téléphone "entreprise" (BusinessTelephoneNumber)alors qu'il faudrait
"balayer" tous les autres champs pouvant contenir des n° de téléphone.
Comment faire (collection?)

- un pb basique mais c'est la première fois que j'y suis confronté ("un
enfant de 3 ans pourrait le résoudre" - " qu'on m'amène un enfant de
trois ans " répondit Groucho Marx).

Voulant grouper les chiffres par groupe de deux avec un espace entre
chaque groupe, je dois calculer le nombre d'itération à effectuer sur
le n° de téléphone d'origine ("nettoyé") pour constituer ensuite des
groupes de 2 chiffres + espace. Jusque là, pas de pb.
Cependant, je dois créer un tableau (dynamique ? puisque ne connais pas
le nombre d'itérations...)pour contenir ces groupes de 2 chiffres et
les concaténer en fin de traitement.
J'y ai passé du temps mais sans succès. Comment faire??



Sub numeroPropre()
Dim olItem As ContactItem
Dim objContact As MAPIFolder
Dim oSelection ' dossier sélectionné - contacts
Dim phoneNbr As String 'numero de téléphone du bureau
Dim nbrCharact 'nombre de chiffres dans le numeo après
suppression des espaces
Dim nbrIteration As Integer ' nbre d'itération à réaliser pour
traiter tous les caractères
Dim cstIntervalle As Integer ' intervalle entre 2 séries de 2
chiffres
Dim partPhoneNumber() As String ' partie de phonenumber en cours
de traitement
Dim newPhoneNbr As String
Dim strNoValid As String 'caractères à supprimer si dans n°
tel
Dim I As Integer ' compteur item
Dim Y As Integer ' compteur itérations

' On Error Resume Next
strNoValid = " "

cstIntervalle = 2
Set objNS = Application.GetNamespace("MAPI")
Set objContact = objNS.GetDefaultFolder(olFolderContacts)
Set oSelection = objContact.Items

For I = 1 To oSelection.Count
Set olItem = oSelection.Item(I)
xxx = olItem.FirstName ' pour repérage durant dvpt
phoneNbr = olItem.BusinessTelephoneNumber ' numero de
téléphone "bureau"

If phoneNbr <> "" Then ' si n° de tel présent
phoneNbr = Replace(phoneNbr, " ", "") 'supprime les
espaces
nbrCharact = Len(phoneNbr) 'longueur du n° de tel
nbrIteration = Round(((Len(phoneNbr)) / 2), 0)
'détermine le nombre d'iterations à faire
If nbrCharact <> 0 Then 's il y a un numero de
téléphone
cstIntervalle = 0 'initialiation de la
valeur
For Y = 1 To nbrIteration
cstIntervalle = cstIntervalle + 2
partPhoneNumber(Y) = Mid(phoneNbr,
(nbrCharact + 1 - cstIntervalle), 2)
newPhoneNbr = partPhoneNumber(Y) &
" " & newPhoneNbr
Next Y
' phoneNbr = newPhoneNbr
' save
newPhoneNbr = "" 'pour dvpt
uniquement
' Y = 0
End If
End If '/si n° de tel présent
Next '/I = 1 To oSelection.Count

End Sub



Merci pour vos conttributions éclairées et à bientôt.

4 réponses

Avatar
Bill2
Spectre wrote:
Bonjour à tous,

Bon, vous allez me dire que je suis pas sur le bon forum mais j'y suis
quand même parce que c'est ici que je trouve les bonnes réponses, le
plus vite (que de pommade passée dans le dos!) :-)

Bon, j'ai développé une petite moulinette pour mettre en forme le n°
de téléphone du carnet de contact outlook (ex : +33 (45) 678978 serait
transformé en + 33 45 67 89 78)
.

Merci pour vos conttributions éclairées et à bientôt.


le plus simple pour ça est d'utiliser les expressions régulières ...
Bon, c'est pas évident à prendre en main, mais une fois que tu maitrises,
c'est très puissant.
Tu trouveras infos sur le site de microsoft (cherche RegExp par exemple)

Sinon, je dois avoir un truc "tout fait", mais ça part du principe que les
numéros sont enregistrés sans espaces ...

--
Bill2, http://trombi.host-web.net/Consult/Details.asp?Id
www.chatxp.fr.st

Philosophie : Pire qu'une pierre dans la chaussure est un grain de sable
dans la capote.
(Coluche)

Avatar
Spectre
merci pour la réponse mais...
- je souhaiterai d'abord réaliser le code en vba et en apprendre un peu
plus à l'occasion (notamment sur les tableaux dynamiques)
- j'avais déjà regardé RegExp pour autre chose mais cela est pour le
moment hors de mon champs d'intérêt et m'y investir (ce que je ne
manquerai pas de faire) prendra du temps

Bye


Le 23/02/2006, Bill2 a supposé :
Spectre wrote:
Bonjour à tous,

Bon, vous allez me dire que je suis pas sur le bon forum mais j'y suis
quand même parce que c'est ici que je trouve les bonnes réponses, le
plus vite (que de pommade passée dans le dos!) :-)

Bon, j'ai développé une petite moulinette pour mettre en forme le n°
de téléphone du carnet de contact outlook (ex : +33 (45) 678978 serait
transformé en + 33 45 67 89 78)
.

Merci pour vos conttributions éclairées et à bientôt.


le plus simple pour ça est d'utiliser les expressions régulières ...
Bon, c'est pas évident à prendre en main, mais une fois que tu maitrises,
c'est très puissant.
Tu trouveras infos sur le site de microsoft (cherche RegExp par exemple)

Sinon, je dois avoir un truc "tout fait", mais ça part du principe que les
numéros sont enregistrés sans espaces ...



Avatar
3stone
Salut,

"Spectre"
|
| Bon, j'ai développé une petite moulinette pour mettre en forme le n° de
| téléphone du carnet de contact outlook (ex : +33 (45) 678978 serait
| transformé en + 33 45 67 89 78)
| .
|
| J'ai trois questions / problèmes
| - caractères inutiles à supprimer dans le n° de tel d'origine
| j'utilise une variable "strNoValid" à laquelle je voudrais faire
| correspondre différentes valeurs lors de l'utilisation de la fonction
| replace. Quelquechose du type
| strNoValid = );(;; " ";
| Y a t il une syntaxe permettant donc d'associer des valeurs différentes
| à une seule variable? Sinon, comment faire?



tu peux utiliser ceci :

Function GetPhone(v) As String
Dim i As Integer
Dim s As String, sTemp As String
If IsNull(s) Then Exit Function
For i = 1 To Len(v)
s = Mid(v, i, 1)
If (Asc(s) >= 48 And Asc(s) <= 57) _
Or s = " " Or s = "+" Then
sTemp = sTemp & s
End If
Next i
GetPhone = sTemp
End Function




|
| - dans les contacts figurent de nombreux champs pour saisir des n° de
| téléphone.
| Dans le code ci-dessous, la fonction ne s'applique qu'au n° de
| téléphone "entreprise" (BusinessTelephoneNumber)alors qu'il faudrait
| "balayer" tous les autres champs pouvant contenir des n° de téléphone.
| Comment faire (collection?)


beuh...


|
| Voulant grouper les chiffres par groupe de deux avec un espace entre
| chaque groupe, je dois calculer le nombre d'itération à effectuer sur
| le n° de téléphone d'origine ("nettoyé") pour constituer ensuite des
| groupes de 2 chiffres + espace. Jusque là, pas de pb.
| Cependant, je dois créer un tableau (dynamique ? puisque ne connais pas
| le nombre d'itérations...)pour contenir ces groupes de 2 chiffres et
| les concaténer en fin de traitement.


tu cherche à grouper par 2 en "partant" de début ou de la fin ?


--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/
Conseils MPFA: http://www.mpfa.info/
Avatar
Spectre
Merci, 3Pierre(s).

Bye


3stone a exprimé avec précision :
Salut,

"Spectre"

Bon, j'ai développé une petite moulinette pour mettre en forme le n° de
téléphone du carnet de contact outlook (ex : +33 (45) 678978 serait
transformé en + 33 45 67 89 78)
.

J'ai trois questions / problèmes
- caractères inutiles à supprimer dans le n° de tel d'origine
j'utilise une variable "strNoValid" à laquelle je voudrais faire
correspondre différentes valeurs lors de l'utilisation de la fonction
replace. Quelquechose du type
strNoValid = );(;; " ";
Y a t il une syntaxe permettant donc d'associer des valeurs différentes
à une seule variable? Sinon, comment faire?




tu peux utiliser ceci :

Function GetPhone(v) As String
Dim i As Integer
Dim s As String, sTemp As String
If IsNull(s) Then Exit Function
For i = 1 To Len(v)
s = Mid(v, i, 1)
If (Asc(s) >= 48 And Asc(s) <= 57) _
Or s = " " Or s = "+" Then
sTemp = sTemp & s
End If
Next i
GetPhone = sTemp
End Function





- dans les contacts figurent de nombreux champs pour saisir des n° de
téléphone.
Dans le code ci-dessous, la fonction ne s'applique qu'au n° de
téléphone "entreprise" (BusinessTelephoneNumber)alors qu'il faudrait
"balayer" tous les autres champs pouvant contenir des n° de téléphone.
Comment faire (collection?)



beuh...



Voulant grouper les chiffres par groupe de deux avec un espace entre
chaque groupe, je dois calculer le nombre d'itération à effectuer sur
le n° de téléphone d'origine ("nettoyé") pour constituer ensuite des
groupes de 2 chiffres + espace. Jusque là, pas de pb.
Cependant, je dois créer un tableau (dynamique ? puisque ne connais pas
le nombre d'itérations...)pour contenir ces groupes de 2 chiffres et
les concaténer en fin de traitement.



tu cherche à grouper par 2 en "partant" de début ou de la fin ?