Macros... Grand besoin d'aide
Résolu
Sousséyé
Messages postés
21
Statut
Membre
-
Sousséyé Messages postés 21 Statut Membre -
Sousséyé Messages postés 21 Statut Membre -
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
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
A voir également:
- Macros... Grand besoin d'aide
- Photo insta en grand - Guide
- Trier du plus petit au plus grand excel - Guide
- Ordinateur portable grand ecran - Guide
- Signe plus grand que clavier - Forum Shell
- Comment inséré les signes > et< avec un clavier qwerty ✓ - Forum Windows 8 / 8.1
5 réponses
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.
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.
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
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
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.
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.
Salut, merci beaucoup. En fait, je suis obligée de faire des macros. Ce n'est pas moi qui utiliserai le fichier après, mais des gens qui auront juste à cliquer le bouton, donc je suis un peu coincée avec ça.
Je vais regarder le code que tu as proposé demain, je n'ai plus accès à mon fichier, mais si tu as la patience, pourras-tu me dire ce qui cloche dans celui que j'ai mis plus haut ?
Et sinon, aurais-tu des pistes pour la 2ème macro ?
Merci beaucoup pour ton aide !
Sandrine
Je vais regarder le code que tu as proposé demain, je n'ai plus accès à mon fichier, mais si tu as la patience, pourras-tu me dire ce qui cloche dans celui que j'ai mis plus haut ?
Et sinon, aurais-tu des pistes pour la 2ème macro ?
Merci beaucoup pour ton aide !
Sandrine
Effectivement, pourquoi faire simple quand on peut faire compliqué.
Concernant la macro proposée par Mike-31, il y a je pense une petite erreur dans le cas ou il n'y a pas d'espace, ou du moins il y a un doute concernant l'interprétation qu'on peut en faire.
En effet, s'il n'y a pas d'espace et qu'on considère que c'est un nom, il n'est donc pas nécessaire de renvoyer la donnée de A vers B. Le code est à modifier comme ceci :
Dans cette configuration, le fait de relancer à nouveau la macro n'influe pas sur le résultat.
Si par contre il ne s'agit que d'un prénom (peu probable mais pourquoi pas), le code est correct, mais il faut alors effacer la cellule A. Le code est à modifier comme ceci :
Mais là, prudence car que ce soit avec le code proposé par Mike-31 ou celui ci-dessus, le fait de relancer une deuxième fois la macro va remplacer les prénoms par les noms, et de plus avec le code ci-dessus, effacer la colonne A. Je vous conseille donc de mettre un flag pour interdire une deuxième exécution de la macro.
Michel
Concernant la macro proposée par Mike-31, il y a je pense une petite erreur dans le cas ou il n'y a pas d'espace, ou du moins il y a un doute concernant l'interprétation qu'on peut en faire.
En effet, s'il n'y a pas d'espace et qu'on considère que c'est un nom, il n'est donc pas nécessaire de renvoyer la donnée de A vers B. Le code est à modifier comme ceci :
I = InStr(Mot1Mot2, " ") ' recherche 1' espace entre les mots If I > 0 Then ' Si un espace est trouvé dans une cellule Cells(L, "B") = Left(Mot1Mot2, I - 1) ' Premier mot isolé en B Cells(L, "A") = Mid(Mot1Mot2, I + 1) ' deuxième mot isolé en A End If Next
Dans cette configuration, le fait de relancer à nouveau la macro n'influe pas sur le résultat.
Si par contre il ne s'agit que d'un prénom (peu probable mais pourquoi pas), le code est correct, mais il faut alors effacer la cellule A. Le code est à modifier comme ceci :
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 Cells(L, "A").Clear ' Efface la cellule en A Else ' Si espace entre mot etc....
Mais là, prudence car que ce soit avec le code proposé par Mike-31 ou celui ci-dessus, le fait de relancer une deuxième fois la macro va remplacer les prénoms par les noms, et de plus avec le code ci-dessus, effacer la colonne A. Je vous conseille donc de mettre un flag pour interdire une deuxième exécution de la macro.
Michel
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
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
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
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
Pourquoi faire 2 opérations ?
Michel
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 Cells(L, "B").Replace " ", "" 'Elimine les espaces (noms composés) restant dans la colonne B (NOM End If
Michel
Pour le traitement de ces bases de données, on est partis sur un principe de macros. Il y'en a déjà un tas, que j'essaye de compléter par les 2 décrites plus haut.
Je suis actuellement sur 2007 mais elles seront utilisées sur 2003.
Sinon, pour la fonction Convertir, je viens d'essayer de l'utiliser pour enregistrer 1 macro, mais le code est trop complexe pour moi à adapter, et surtout pour les noms composés ça ne marche pas (Ex : Nath De la XXX) -> ça splittera en 4, alors que je veux juste splitter au niveau du 1er espace, et ensuite inverser en mettant le nom sur la 1ere colonne et le prénom sur la 2ème....
Merci quand même
Sandrine