Bonjour, je vais essayer de décrire mon pb clairement...
J'ai une fonction format_nom_prenom qui formate une chaine en remplaçant les caractères accentués, tirets, espace,... Cette fonction reçoit une string en entrée et retourne une string. Jusque là pas de soucis.
Mon pb est que j'aimerai avoir l'équivalent mais avec un range en entrée et un range en sortie. Une sorte de format_nom_prenom_range(range_entree as range) as range
Dans mon cas de figure, le range est juste une plage d'une seule colonne et donc de plusieurs lignes.
Et donc j'ai essayé d'appeler pour chaque cellule de range_entree ma fonction de formatage de chaîne format_nom_prenom. Voici mon code :
mais j'ai une erreur #VALEUR et la modif de la valeur de la cellule avec Cells(l,c) = val_apres ne se fait pas.
J'ai cru comprendre qu'en effet on ne pouvait pas modifier la valeur d'une cellule directement dans une fonction, mais du coup, comment faire pour modifier les cellules du range d'entrée et récupérer le range avec les valeurs modifiées en sortie...
Merci d'avance
J'ai une fonction format_nom_prenom qui formate une chaine en remplaçant les caractères accentués, tirets, espace,... Cette fonction reçoit une string en entrée et retourne une string. Jusque là pas de soucis.
Mon pb est que j'aimerai avoir l'équivalent mais avec un range en entrée et un range en sortie. Une sorte de format_nom_prenom_range(range_entree as range) as range
Dans mon cas de figure, le range est juste une plage d'une seule colonne et donc de plusieurs lignes.
Et donc j'ai essayé d'appeler pour chaque cellule de range_entree ma fonction de formatage de chaîne format_nom_prenom. Voici mon code :
VB:
Function Format_nom_prenom(chaine As Variant)
'remplacement des caractères accentués
Dim accents, sans_accents, chaine_sortie As String
Dim pos As Long
Dim i As Integer
accents = "ÀÁÂÃÄÅÈÉÊËÌÍÎÏÑÒÓÔÕÖÙÚÛÜÝàáâãäåèéêëìíîïðñòóôõöùúûüýÿçÇ-"
sans_accents = "AAAAAAEEEEIIIINOOOOOUUUUYaaaaaaeeeeiiiionooooouuuuyycC "
chaine_sortie = chaine
For i = 1 To Len(chaine)
pos = InStr(1, accents, Mid(chaine, i, 1), 0)
If pos Then Mid(chaine_sortie, i, 1) = Mid(sans_accents, pos, 1)
Next i
Format_nom_prenom = UCase(Replace(chaine_sortie, " ", vbNullString))
End Function
Function Format_nom_prenom_range(range_entree As Range)
Dim range_sortie As Range
Dim accents, sans_accents As String
Dim pos As Long
Dim i, c, l As Integer
Dim nb_lignes As Integer
Dim cellule As Range
Dim val_avant, val_apres As String
accents = "ÀÁÂÃÄÅÈÉÊËÌÍÎÏÑÒÓÔÕÖÙÚÛÜÝàáâãäåèéêëìíîïðñòóôõöùúûüýÿçÇ-"
sans_accents = "AAAAAAEEEEIIIINOOOOOUUUUYaaaaaaeeeeiiiionooooouuuuyycC "
nb_lignes = range_entree.Rows.Count
For Each cellule In range_entree
l = cellule.Row
c = cellule.Column
val_avant = cellule.Value
val_apres = Format_nom_prenom(val_avant)
Cells(l, c) = val_apres
Next cellule
range_sortie = range_entree
Format_nom_prenom_range = range_sortie
End Function
mais j'ai une erreur #VALEUR et la modif de la valeur de la cellule avec Cells(l,c) = val_apres ne se fait pas.
J'ai cru comprendre qu'en effet on ne pouvait pas modifier la valeur d'une cellule directement dans une fonction, mais du coup, comment faire pour modifier les cellules du range d'entrée et récupérer le range avec les valeurs modifiées en sortie...
Merci d'avance