Macros... Grand besoin d'aide

Résolu
Bonjour,

Je suis extrêmement novice en macros, je sais à peu près lire les codes, et plus ou moins les modifier quand j'en comprends l'objectif, mais j'en au deux à rédiger qui me semblent très difficiles.. Alors... Bouteille à la mer..

La 1/
J'ai une bdd avec entre autres 2 colonnes : "Nom" et "prénoms" (dans cet ordre)
En réalisé, la seule colonne renseignée est "Nom" où figurent le prénom suivi d'un espace puis du nom, et donc rien dans la colonne "prénoms"
J'aimerais les splitter, et j'ai plus ou moins récupéré des codes sur des forums, mais ça ne marche toujours pas.
Dans le doute que la macro ne reconnaisse pas le 1er espace avec lequel je veux splitter, j'ai réussi à le transformer en "3" pour ensuite pouvoir couper mais ça ne marche pas.
ça donne quelque chose comme :
"Sub Bouton2_Clic()
Dim i, derlig As Integer
derlig = Range("B65536").End(xlUp).Row
Sheets("Feuil1").Columns("B:B").Replace " ", "3"
For i = 1 To derlig
Cells(i) = Right(Cells(i), Len(Cells(i)) - InStr(Cells(i), "3"))
Next
End Sub"

Pour info, une bonne partie des lignes est vide, et il faut qu'elles le restent, alors il ne faut pas que cela s'applique sur des lignes vides.

la 2/ J'ai une ligne par fournisseur, et plusieurs colonnes censées comprendre des montants.
Certains de ses montants sont négatifs.
J'ai besoin que ma macro remplace les montants négatifs par des 0.
Ensuite, si pour cette même ligne, il n'y a aucun autre montant, il faut que je supprime la ligne.. Alors là autant dire que je suis complètement paumée...

Quelqu'un peut aider ?
Sandrine

5 réponses

Mike-31 Messages postés 18407 Date d'inscription   Statut Contributeur Dernière intervention   5 135
 
Salut,

Pourquoi ne pas utiliser simplement la fonction convertir pour séparer le nom du prénom (Données/Convertir).

Au passage qu'elle est ta version excel
A+
Mike-31

Une période d'échec est un moment rêvé pour semer les graines du savoir.
0
mic13710 Messages postés 1087 Date d'inscription   Statut Membre Dernière intervention   358
 
Pas besoin de macro.

Soit en A2 "Nom Prénom"
Vous insérez 2 colonnes après la A (soit B et C).
Pour avoir le nom en B2, copier/coller cette formule :
=GAUCHE(A2;CHERCHE(" ";A2)-1)
Pour avoir le Prénom en C2, copier/coller cette formule :
=DROITE(A2;NBCAR(A2)-CHERCHE(" ";A2))

Michel
0
mic13710 Messages postés 1087 Date d'inscription   Statut Membre Dernière intervention   358
 
Et pour les lignes vides il faut alors vérifier la condition avant d'écrire le résultat.
Les formules deviennent :
=SI(ESTTEXTE(A2;)GAUCHE(A2;CHERCHE(" ";A2)-1);"")
=SI(ESTTEXTE(A2);DROITE(A2;NBCAR(A2)-CHERCHE(" ";A2));"")

Formules à recopier ensuite dans les cellules suivantes.

Michel
0
Mike-31 Messages postés 18407 Date d'inscription   Statut Contributeur Dernière intervention   5 135
 
Re,

Dans le domaine du VBA, suivant tes explications, en colonne A tu as le Prénom suivi d'un espace et le Nom, tu souhaites laisser en A le Nom et le prénom en B

regarde ce code

Sub séparateur_De_Mots()
For L = 2 To [A65536].End(xlUp).Row ' Application de la ligne 2 à la dernière ligne non vide
Mot1Mot2 = Cells(L, "A") ' Colonne de référence, ici A
I = InStr(Mot1Mot2, " ") ' recherche 1' espace entre les mots
If I = 0 Then ' Si aucun espace trouvé dans une cellule
Cells(L, "B") = Cells(L, "A") ' Reporte le mot en B
Else ' Si espace entre mot
Cells(L, "B") = Left(Mot1Mot2, I - 1) ' Premier mot isolé en B
Cells(L, "A") = Mid(Mot1Mot2, I + 1) ' deuxième mot mot isolé en C
End If
Next
End Sub

A+
Mike-31

Une période d'échec est un moment rêvé pour semer les graines du savoir.
0
Mike-31 Messages postés 18407 Date d'inscription   Statut Contributeur Dernière intervention   5 135
 
Salut Mic,

effectivement s'il n'y a pas d'espace le code ne marche pas, il est possible que le nom et prénom soit séparé par un tiret ou chaque mot commence par une majuscule et on peut compléter le code suivant le cas.
En ce qui concerne la répétition accidentelle du code on peut ajouter un détrompeur qui arrêtera le code
enfin à suivre ...

Cordialement
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question

 
Salut,

Merci beaucoup à tous les 2.
En gros, je n'ai pas réussi à flagger, mais du coup j'ai fait 2 macros différentes :
La 1ère c'est la macro de Mike-31 avec la 1ère correction de Mic.

ça donne ça :
Sub Bouton3_Clic()
For L = 4 To [B65536].End(xlUp).Row ' Application de la ligne 4 à la dernière ligne non vide
Mot1Mot2 = Cells(L, "B") ' Colonne de référence, ici la colonne B
I = InStr(Mot1Mot2, " ") ' recherche 1' espace entre les mots
If I > 0 Then ' Si un espace est trouvé dans une cellule
Cells(L, "C") = Left(Mot1Mot2, I - 1) ' Premier mot isolé en colonne C
Cells(L, "B") = Mid(Mot1Mot2, I + 1) ' deuxième mot isolé en colonne B
End If
Next
End Sub

Comme je n'ai pas réussi à flagger, et qu'effectivement un nom composé déplacé par une 1ère exécution en colonne B, effacer le prénom de la colonne C, j'ai fait raccourci qui élimine les espaces restants dans la colonne B :

Sub Bouton4_Clic()
For L = 4 To [B65536].End(xlUp).Row
Cells(L, "B").Replace " ", "" 'Elimine les espaces (noms composés) restant dans la colonne B (NOM
Next
End Sub

ça semble bien marcher, alors encore un grand merci pour votre aide. Je ne m'en serais pas sortie autrement.
Sandrine
0