Fonction VBA, retraitement de données

pmosna76

Nouveau membre
Bonjour à tous,

Débutant mon utilisation du VBA Excel, je me suis retrouvé à créer une fonction permettant de retraiter des données.
Je m'explique :
- J'ai un fichier de personnel "RH"
- Un fichier de personnel "C"
- Un troisième fichier réunissant les BDD des deux autres "B"


Avec ces deux fichiers un problème est survenu, les noms des utilisateurs ne sont pas toujours les même (un accent, un tiret, un deuxième prénom en plus ...). J'ai donc récupérer une fonction permettant de retirer les accents etc.
Pour cette partie pas de soucis.

Dans mon fichier "B", j'ai appliqué la première fonction pour enlever les accents etc, j'ai ensuite créer une fonction SI (peut-être existe-t-il une meilleure solution?), permettant de retraiter les utilisateurs en double "différent".
Via ma fonction, pas de soucis pour retraiter les noms des utilisateurs doublons.7

Mon soucis survient à ce moment, je ne parviens pas à récupérer les utilisateurs qui n'avait pas de soucis de doublons.

Voici mon code (réduis à cause de certaine données confidentielles mais le principe reste le même)

Function MajNomPrenom(Nom_Prenom As String) As String
Dim i As Long
If Nom_Prenom = "AA" Then 'Les utilisateurs sont bien retraités et renommés correctement
MajNomPrenom = "AAA"

ElseIf Nom_Prenom = "BB" Then
MajNomPrenom = "BBB"

ElseIf Nom_Prenom = "YY" Then
MajNomPrenom = "YYY"

ElseIf Nom_Prenom = "XX" Then
MajNomPrenom = "XXX"

ElseIf Nom_Prenom = "VV" Then
MajNomPrenom = "VVV"

Else

For i = 0 To 20
MajNomPrenom = Workbooks("TESTTTTGTTTTETTETETEETT.xlsm").Worksheets("Feuil1").Columns("B").Rows(i).Value
i = i + 1
Next i

End If

End Function


Mon compteur n'est probablement pas bon, c'est l'une des dernières chose que j'ai tenté et qui n'a pas marché.
Le soucis étant que je n'arrive pas récupérer le nom des utilisateurs qui n'ont pas changé dans ma nouvelle colonne d'utilisateurs retraités.
Je n'arrive pas à comprendre pourquoi mon compteur "i" ne permet pas de récupérer les données à chaque ligne et à chaque itération.
Si je remplace "Rows(i)" par Rows(3) par exemple, plus de soucis il me copie les données de B3 dans chaque cellule vide de ma nouvelle colonne.

En espérant que certains d'entre vous réussiront à comprendre mon soucis et m'expliquer comment le corriger,

Cordialement,
 

drul

Obscur pro du hardware
Staff
Salut,
Bon qqs erreurs sut ton for déjà:
for i=0 et rows(i) ne peuvent fonctionner (la ligne 0 n'existe pas)
Ensuite ne fait pas i=i+1, c'est automatique lorsque tu fais "next"
Et finalement la sorite de ta fonction sera toujours rows(20), vu que tu réecris toujours dans la même variable ...

Pour le problème, je crains que cela ne soit pas vraiment très clair pour moi ....
Mais disons que j'imagine que cela serait bien mieux ...
Code:
' ...
ElseIf Nom_Prenom = "VV" Then
MajNomPrenom = "VVV"

Else
MajNomPrenom = Nom_Prenom 


End If

End Function
 

pmosna76

Nouveau membre
Bonjour à tous,

Désolé pour le retard, beaucoup de chose à suivre mais peu de temps.

En effet Drul, après avoir testé sans la boucle et en laissant le
Code:
Else MaJNomPrenom = Nom_Prenom
, j'arrive au même résultat. Je ne suis pas sûr d'avoir correctement compris pourquoi mais je vais faire mes petits tests pour en saisir le sens.

Merci à vous pour votre aide, bonne journée et probablement à bientôt :)

Cdlt,
 

drul

Obscur pro du hardware
Staff
Au même résultat tu entends quoi ? le résultat désiré ?
 

pmosna76

Nouveau membre
Oui oui désolé je voulais dire au "bon" résultat, ma formulation n'était pas bonne.
 

drul

Obscur pro du hardware
Staff
rien de très compliqué: en gros si tu dois rien modifié, ben tu renvoie la source. Ca me semblait assez logique.
 
Vous devez vous inscrire ou vous connecter pour répondre ici.
Derniers messages publiés
Statistiques globales
Discussions
730 125
Messages
6 717 740
Membres
1 586 357
Dernier membre
Peg7
Partager cette page
Haut