Macros... Grand besoin d'aide
Résolu/Fermé
Sousséyé
Messages postés
20
Date d'inscription
jeudi 27 mai 2010
Statut
Membre
Dernière intervention
21 mars 2011
-
17 mars 2011 à 17:32
Sousséyé Messages postés 20 Date d'inscription jeudi 27 mai 2010 Statut Membre Dernière intervention 21 mars 2011 - 21 mars 2011 à 18:03
Sousséyé Messages postés 20 Date d'inscription jeudi 27 mai 2010 Statut Membre Dernière intervention 21 mars 2011 - 21 mars 2011 à 18:03
A voir également:
- Macros... Grand besoin d'aide
- Photo insta en grand - Guide
- Excel trier du plus grand au plus petit - Guide
- Ordinateur portable grand ecran - Guide
- Macros word - Guide
- Ce document fait l'objet d'un trop grand nombre de modifications ✓ - Forum Word
5 réponses
Mike-31
Messages postés
18354
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
1 janvier 2025
5 110
Modifié par Mike-31 le 17/03/2011 à 18:42
Modifié par Mike-31 le 17/03/2011 à 18:42
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.
mic13710
Messages postés
1087
Date d'inscription
samedi 26 novembre 2005
Statut
Membre
Dernière intervention
13 mai 2021
355
17 mars 2011 à 18:17
17 mars 2011 à 18:17
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
mic13710
Messages postés
1087
Date d'inscription
samedi 26 novembre 2005
Statut
Membre
Dernière intervention
13 mai 2021
355
17 mars 2011 à 18:23
17 mars 2011 à 18:23
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
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
Mike-31
Messages postés
18354
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
1 janvier 2025
5 110
Modifié par Mike-31 le 17/03/2011 à 21:42
Modifié par Mike-31 le 17/03/2011 à 21:42
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.
Sousséyé
Messages postés
20
Date d'inscription
jeudi 27 mai 2010
Statut
Membre
Dernière intervention
21 mars 2011
17 mars 2011 à 22:45
17 mars 2011 à 22:45
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
mic13710
Messages postés
1087
Date d'inscription
samedi 26 novembre 2005
Statut
Membre
Dernière intervention
13 mai 2021
355
18 mars 2011 à 08:24
18 mars 2011 à 08:24
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
Mike-31
Messages postés
18354
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
1 janvier 2025
5 110
18 mars 2011 à 08:48
18 mars 2011 à 08:48
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
Sousséyé
Messages postés
20
Date d'inscription
jeudi 27 mai 2010
Statut
Membre
Dernière intervention
21 mars 2011
18 mars 2011 à 11:10
18 mars 2011 à 11:10
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
mic13710
Messages postés
1087
Date d'inscription
samedi 26 novembre 2005
Statut
Membre
Dernière intervention
13 mai 2021
355
18 mars 2011 à 11:33
18 mars 2011 à 11:33
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
Sousséyé
Messages postés
20
Date d'inscription
jeudi 27 mai 2010
Statut
Membre
Dernière intervention
21 mars 2011
21 mars 2011 à 18:03
21 mars 2011 à 18:03
ça marche ! Super :)
Merci beaucoup
Merci beaucoup
17 mars 2011 à 18:14
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