A voir également:
- Rows("2:2").select
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Macro word - Guide
- Jitbit macro recorder - Télécharger - Confidentialité
- Macro logiciel - Télécharger - Organisation
- Télécharger macro convertir chiffre en lettre excel - Télécharger - Tableur
15 réponses
Ivan-hoe
Messages postés
433
Date d'inscription
dimanche 17 février 2008
Statut
Membre
Dernière intervention
17 octobre 2008
309
3 sept. 2008 à 11:53
3 sept. 2008 à 11:53
Bonjour Manu,
utilise la propriété Value de la cellule, qui renvoie son contenu
Range("A1").Value
I.
utilise la propriété Value de la cellule, qui renvoie son contenu
Range("A1").Value
I.
Tout d'abord merci pour ta reponse.
voici mes lignes de vba:
Rows("9:9").Select
Selection.Cut
Rows("2:2").Select
Selection.Insert Shift:=xlDown
Rows("10:10").Select
Selection.Cut
Rows("3:3").Select
Selection.Insert Shift:=xlDown
Rows("15:15").Select
Selection.Cut
Rows("4:4").Select
Selection.Insert Shift:=xlDown
Rows("38:38").Select
Selection.Cut
ActiveWindow.SmallScroll Down:=-30
Rows("5:5").Select
Selection.Insert Shift:=xlDown
Rows("44:44").Select
Selection.Cut
ActiveWindow.SmallScroll Down:=-30
Rows("6:6").Select
Selection.Insert Shift:=xlDown
Rows("81:81").Select
Selection.Cut
ActiveWindow.SmallScroll Down:=-48
Rows("7:7").Select
Selection.Insert Shift:=xlDown
Rows("82:82").Select
Selection.Cut
ActiveWindow.SmallScroll Down:=-48
Rows("8:8").Select
Selection.Insert Shift:=xlDown
Rows("15:15").Select
Selection.Copy
Rows("9:9").Select
Selection.Insert Shift:=xlDown
ActiveWindow.SmallScroll Down:=11
Rows("40:40").Select
Application.CutCopyMode = False
Selection.Cut
ActiveWindow.SmallScroll Down:=-9
Rows("10:10").Select
Selection.Insert Shift:=xlDown
ActiveWindow.SmallScroll Down:=27
End Sub
j'aimerai qu'au lieu d'aller chercher la ligne 9 (premiere ligne) par exemple, il aille chercher le nom ecrit dans la ligne, qui dans un autre fichier avec lequel je voudrai utiliser cette macro, pourrait etre dans la ligne 23 par exemple. est ce que c'est possible?
merci encore
Manu
voici mes lignes de vba:
Rows("9:9").Select
Selection.Cut
Rows("2:2").Select
Selection.Insert Shift:=xlDown
Rows("10:10").Select
Selection.Cut
Rows("3:3").Select
Selection.Insert Shift:=xlDown
Rows("15:15").Select
Selection.Cut
Rows("4:4").Select
Selection.Insert Shift:=xlDown
Rows("38:38").Select
Selection.Cut
ActiveWindow.SmallScroll Down:=-30
Rows("5:5").Select
Selection.Insert Shift:=xlDown
Rows("44:44").Select
Selection.Cut
ActiveWindow.SmallScroll Down:=-30
Rows("6:6").Select
Selection.Insert Shift:=xlDown
Rows("81:81").Select
Selection.Cut
ActiveWindow.SmallScroll Down:=-48
Rows("7:7").Select
Selection.Insert Shift:=xlDown
Rows("82:82").Select
Selection.Cut
ActiveWindow.SmallScroll Down:=-48
Rows("8:8").Select
Selection.Insert Shift:=xlDown
Rows("15:15").Select
Selection.Copy
Rows("9:9").Select
Selection.Insert Shift:=xlDown
ActiveWindow.SmallScroll Down:=11
Rows("40:40").Select
Application.CutCopyMode = False
Selection.Cut
ActiveWindow.SmallScroll Down:=-9
Rows("10:10").Select
Selection.Insert Shift:=xlDown
ActiveWindow.SmallScroll Down:=27
End Sub
j'aimerai qu'au lieu d'aller chercher la ligne 9 (premiere ligne) par exemple, il aille chercher le nom ecrit dans la ligne, qui dans un autre fichier avec lequel je voudrai utiliser cette macro, pourrait etre dans la ligne 23 par exemple. est ce que c'est possible?
merci encore
Manu
ah oui j'oublai...je n'y connai vraiment rien en programmation et la ligne que tu m'as donne, je ne sais pas du tout comment l'utiliser, ou la placer.
Tu as tout a fait compris ce que je voulais faire.
Cependant, lorsque je mets ta formule dans vba et que j'applique la macro, un message d'erreur apparait en me disant ceci (c'est une traduction de l'espagnol donc il se peut qu'en francais ca ne soit pas exactement ca):
l'erreur '91' s'est produite lors du temps d'execution:
variable d'objet ou bloque With non etabli
merci encore
Manu
Cependant, lorsque je mets ta formule dans vba et que j'applique la macro, un message d'erreur apparait en me disant ceci (c'est une traduction de l'espagnol donc il se peut qu'en francais ca ne soit pas exactement ca):
l'erreur '91' s'est produite lors du temps d'execution:
variable d'objet ou bloque With non etabli
merci encore
Manu
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
La recherche marche manuellement c'est juste que je recherchais une partie du nom donc jai change whole par part.
maintenant, quand je lance la macro, il m'affiche ce message d'erreur:
l'erreur 1004 s'est produite lors du temps d'execution:
la selection n'est pas valide
il peut y avoir plusieurs raisons:
..les zones de copie colle doivent avoir la meme taille et forme pour pouvoir se superposer
..en utilisant la commande creer dans le menu inserer, sous menu nom, la file et colonne qui incluent les noms proposes ne s'incluent pas dans (manque la fin de la phrase)
Sur mon fichier excel, juste avant d'afficher le message d'erreur, la macro me selectionne bien la premiere case ou il y a le nom que je cherche mais ca s'arrete la.
merci encore pour ton aide
Manu
maintenant, quand je lance la macro, il m'affiche ce message d'erreur:
l'erreur 1004 s'est produite lors du temps d'execution:
la selection n'est pas valide
il peut y avoir plusieurs raisons:
..les zones de copie colle doivent avoir la meme taille et forme pour pouvoir se superposer
..en utilisant la commande creer dans le menu inserer, sous menu nom, la file et colonne qui incluent les noms proposes ne s'incluent pas dans (manque la fin de la phrase)
Sur mon fichier excel, juste avant d'afficher le message d'erreur, la macro me selectionne bien la premiere case ou il y a le nom que je cherche mais ca s'arrete la.
merci encore pour ton aide
Manu
Columns("D:D").Find(What:="Popaul", LookAt:=xlPart, SearchOrder:=xlByRows).Activate
ActiveCell.EntireRow.Cut
Rows("2:2").Insert Shift:=xlUp
C'est a partir de la ligne en gras que ca plante. J'ai verifie je n'ai pas de cellule fusionne.
De plus, ceci est une ecriture pour faire remonter une des lignes 'Popaul' et jaimerais les faire toutes remonter, comment puis je faire pour faire une boucle comme tu me le dis plus haut?
Merci
Manu
ActiveCell.EntireRow.Cut
Rows("2:2").Insert Shift:=xlUp
C'est a partir de la ligne en gras que ca plante. J'ai verifie je n'ai pas de cellule fusionne.
De plus, ceci est une ecriture pour faire remonter une des lignes 'Popaul' et jaimerais les faire toutes remonter, comment puis je faire pour faire une boucle comme tu me le dis plus haut?
Merci
Manu
Quand je supprime le "Shift:=xlUp" du inserer, il me reqffiche ce messqge d'erreur:
l'erreur 1004 s'est produite lors du temps d'execution:
la selection n'est pas valide
il peut y avoir plusieurs raisons:
..les zones de copie colle doivent avoir la meme taille et forme pour pouvoir se superposer
..en utilisant la commande creer dans le menu inserer, sous menu nom, la file et colonne qui incluent les noms proposes ne s'incluent pas dans (manque la fin de la phrase)
Merci
Manu
l'erreur 1004 s'est produite lors du temps d'execution:
la selection n'est pas valide
il peut y avoir plusieurs raisons:
..les zones de copie colle doivent avoir la meme taille et forme pour pouvoir se superposer
..en utilisant la commande creer dans le menu inserer, sous menu nom, la file et colonne qui incluent les noms proposes ne s'incluent pas dans (manque la fin de la phrase)
Merci
Manu
Merci pour ta reponse, j'arrive maintenant a faire remonter les lignes que je voulais en haut de mon tableau.
A present, je souhaite faire un classement des 50 premiers noms. Les lignes que j'ai fait remonter correspondent a un seul et unique nom. Selon le fichier sur lequel je souhaite appliquer ma macro, le nombre de lignes correspondant a ce nom varie. Comment puis je faire pour qu'a chaque fois que j'applique ma macro, cette derniere applique le rang 1 a l'ensemble des lignes de ce meme nom, quelque soit le nombre de lignes du meme nom?
Par exemple, j'ai 4 lignes avec le nom 'marita' et ces 4 lignes doivent avoir le rang 1, et si j'en ai 7, je veux que ces 7 lignes aient le rang 1.
Merci
Manu
A present, je souhaite faire un classement des 50 premiers noms. Les lignes que j'ai fait remonter correspondent a un seul et unique nom. Selon le fichier sur lequel je souhaite appliquer ma macro, le nombre de lignes correspondant a ce nom varie. Comment puis je faire pour qu'a chaque fois que j'applique ma macro, cette derniere applique le rang 1 a l'ensemble des lignes de ce meme nom, quelque soit le nombre de lignes du meme nom?
Par exemple, j'ai 4 lignes avec le nom 'marita' et ces 4 lignes doivent avoir le rang 1, et si j'en ai 7, je veux que ces 7 lignes aient le rang 1.
Merci
Manu
En fait il y a une des colonnes de mon tableau excel qui est consacree a un classement des noms (de 1 a 50, du rang 1 au rang 50)
Cependant, cela ne signifie pas forcement que je ne souhaite classer que 50 noms car pour le rang 1 de ce classement, je souhaite quil y ait, par exemple, 5 noms. En realite ce ne sont pas des noms completement differents, ils correspondent a la meme societe mais a des services differents dans cette societe, cest pourquoi ils doivent avoir le meme rang.
Cest plus clair ?
Merci
Manu
Cependant, cela ne signifie pas forcement que je ne souhaite classer que 50 noms car pour le rang 1 de ce classement, je souhaite quil y ait, par exemple, 5 noms. En realite ce ne sont pas des noms completement differents, ils correspondent a la meme societe mais a des services differents dans cette societe, cest pourquoi ils doivent avoir le meme rang.
Cest plus clair ?
Merci
Manu
Ivan-hoe
Messages postés
433
Date d'inscription
dimanche 17 février 2008
Statut
Membre
Dernière intervention
17 octobre 2008
309
4 sept. 2008 à 22:26
4 sept. 2008 à 22:26
Ah d'accord ! je me disais bien, aussi , que ce que j'avais compris de ta question initiale semblait beaucoup trop simple pour être vrai ! Oublie donc ma réponse.
En fait, tu voudrais non pas couper/coller la ligne 9, mais bien la ligne à laquelle se trouve le nom "Popaul" (par exemple), lequel change de place d'un fichier à l'autre... ?
Bien que prétendant ne rien y connaître, comme tu sembles au moins avoir bien compris l'enregistrement automatique de macros, tu peux la refaire en commençant par une recherche du nom (ctrl+F ou Edition/Rechercher). Ainsi, ça sélectionne la cellule qui contient le nom, où qu'il se trouve. Après, tu n'as plus qu'à faire "couper la ligne entière à partir de la cellule active" (ActiveCell.EntireRow.Cut)
Exemple :
au lieu d'écrire
ton code devient
Bien sûr, tu modifies "Popaul" par le nom recherché ; aussi, tu modifies Columns("A:A") par les coordonnées de la plage dans laquelle tu recherches le nom.
Au lieu de répéter l'opération autant de fois que nécessaire, sache que, comme tu sembles avoir une liste de dix noms à remettre dans l'ordre, il est possible de faire une boucle à partir de ta liste.
A suivre...
I.
En fait, tu voudrais non pas couper/coller la ligne 9, mais bien la ligne à laquelle se trouve le nom "Popaul" (par exemple), lequel change de place d'un fichier à l'autre... ?
Bien que prétendant ne rien y connaître, comme tu sembles au moins avoir bien compris l'enregistrement automatique de macros, tu peux la refaire en commençant par une recherche du nom (ctrl+F ou Edition/Rechercher). Ainsi, ça sélectionne la cellule qui contient le nom, où qu'il se trouve. Après, tu n'as plus qu'à faire "couper la ligne entière à partir de la cellule active" (ActiveCell.EntireRow.Cut)
Exemple :
au lieu d'écrire
Rows("9:9").Select Selection.Cut Rows("2:2").Select Selection.Insert Shift:=xlDown
ton code devient
Columns("A:A").Find(What:="Popaul", LookAt:=xlWhole, SearchOrder:=xlByRows).Activate ActiveCell.EntireRow.Cut Rows("2:2").Insert Shift:=xlDown
Bien sûr, tu modifies "Popaul" par le nom recherché ; aussi, tu modifies Columns("A:A") par les coordonnées de la plage dans laquelle tu recherches le nom.
Au lieu de répéter l'opération autant de fois que nécessaire, sache que, comme tu sembles avoir une liste de dix noms à remettre dans l'ordre, il est possible de faire une boucle à partir de ta liste.
A suivre...
I.
Ivan-hoe
Messages postés
433
Date d'inscription
dimanche 17 février 2008
Statut
Membre
Dernière intervention
17 octobre 2008
309
5 sept. 2008 à 09:46
5 sept. 2008 à 09:46
c'est parce que la recherche n'a rien donné.
- est-ce que ça marche au moins quand tu le fais manuellement ?
- est-ce que le nom que tu recherches est bien présent sur la feuille sélectionnée ?
- est-ce que tu cherches dans la bonne plage ? Columns("A:A").Find recherche dans la colonne A. Si tu veux rechercher dans toute la feuille, corrige en Cells.Find
- est-ce que tu recherches le nom entier ou une partie du nom ? LookAt:=xlWhole pour chercher le nom entier ou bien LookAt:=xlPart pour une recherche sur une partie du nom.
A suivre...
I.
- est-ce que ça marche au moins quand tu le fais manuellement ?
- est-ce que le nom que tu recherches est bien présent sur la feuille sélectionnée ?
- est-ce que tu cherches dans la bonne plage ? Columns("A:A").Find recherche dans la colonne A. Si tu veux rechercher dans toute la feuille, corrige en Cells.Find
- est-ce que tu recherches le nom entier ou une partie du nom ? LookAt:=xlWhole pour chercher le nom entier ou bien LookAt:=xlPart pour une recherche sur une partie du nom.
A suivre...
I.
Ivan-hoe
Messages postés
433
Date d'inscription
dimanche 17 février 2008
Statut
Membre
Dernière intervention
17 octobre 2008
309
6 sept. 2008 à 08:46
6 sept. 2008 à 08:46
A priori c'est un problème au niveau d'un Couper/Coller ou Insérer. As-tu des cellules fusionnées ?
Pour mieux comprendre, peux-tu copier ici ta macro telle qu'elle est maintenant et indiquer à quelle ligne de code ça bugge ? (c'est la ligne qui est surlignée en jaune quand ça plante et que tu cliques sur Débogage)
Merci.
Pour mieux comprendre, peux-tu copier ici ta macro telle qu'elle est maintenant et indiquer à quelle ligne de code ça bugge ? (c'est la ligne qui est surlignée en jaune quand ça plante et que tu cliques sur Débogage)
Merci.
cel92
Messages postés
28
Date d'inscription
mercredi 13 février 2008
Statut
Membre
Dernière intervention
16 décembre 2008
13
9 sept. 2008 à 18:00
9 sept. 2008 à 18:00
Bonjour,
J'ai recopié ton code : quand je supprime le "Shift:=xlUp" du insérer, cela fonctionne.
J'ai recopié ton code : quand je supprime le "Shift:=xlUp" du insérer, cela fonctionne.
cel92
Messages postés
28
Date d'inscription
mercredi 13 février 2008
Statut
Membre
Dernière intervention
16 décembre 2008
13
10 sept. 2008 à 18:08
10 sept. 2008 à 18:08
OK, c'est le 1er point du message d'erreur qui explique la raison du bug :
Lorsque la macro a tourné une première fois, la ligne a été insérée à la ligne 2, puis a émis le message d'erreur.
Quand on refait tourner la macro, elle trouve à présent la ligne cherchée à la ligne 2, la sélectionne, puis essaye de resélectionner la ligne 2 pour l'insérer : erreur.
Je n'avais pas cette erreur quand je l'ai testé car j'avais replacé la ligne insérée à sa place initiale avant de refaire tourner la macro.
Cela signifie que tu ne dois faire ta recherche qu'à partir de la ligne 3 : afin d'éviter que la ligne 2 soit insérée sur elle-même ce qui cause une erreur.
On remplace Colums("D:D").Find par Range("D3:D5000").Find par exemple (si tu es sûr de ne pas utiliser plus de 5000 lignes dans ton fichier).
Dans l'aide sur "Insert" de VBA est indiqué que Shift:= ne peut être suivi que des variables 'xlShiftToRight' ou 'xlShiftDown' : xlUp n'est pas autorisé ici je crois.
Comme tu veux insérer une ligne, utilise 'xlShiftDown'.
Pour la boucle sur les personnes, un algorithme/VBA est :
où listePersonnes peut se présenter de pleins de manières différentes : une liste dans un autre onglet de ton fichier excel, un vecteur rempli en dur au début de ton code, ...
Cél
Lorsque la macro a tourné une première fois, la ligne a été insérée à la ligne 2, puis a émis le message d'erreur.
Quand on refait tourner la macro, elle trouve à présent la ligne cherchée à la ligne 2, la sélectionne, puis essaye de resélectionner la ligne 2 pour l'insérer : erreur.
Je n'avais pas cette erreur quand je l'ai testé car j'avais replacé la ligne insérée à sa place initiale avant de refaire tourner la macro.
Cela signifie que tu ne dois faire ta recherche qu'à partir de la ligne 3 : afin d'éviter que la ligne 2 soit insérée sur elle-même ce qui cause une erreur.
On remplace Colums("D:D").Find par Range("D3:D5000").Find par exemple (si tu es sûr de ne pas utiliser plus de 5000 lignes dans ton fichier).
Dans l'aide sur "Insert" de VBA est indiqué que Shift:= ne peut être suivi que des variables 'xlShiftToRight' ou 'xlShiftDown' : xlUp n'est pas autorisé ici je crois.
Comme tu veux insérer une ligne, utilise 'xlShiftDown'.
Pour la boucle sur les personnes, un algorithme/VBA est :
dim nombreTotal as integer nombreTotal = 15 dim numero as integer dim nomPersonne as string dim listePersonnes as ???????? For numero = 1 to nombreTotal nomPersonne = listePersonnes(numero) Range("D3:D5000").Find(What:=nomPersonne, LookAt:=xlPart, SearchOrder:=xlByRows).Activate ActiveCell.EntireRow.Cut Rows("2:2").Insert Shift:=xlShiftDown Next numero
où listePersonnes peut se présenter de pleins de manières différentes : une liste dans un autre onglet de ton fichier excel, un vecteur rempli en dur au début de ton code, ...
Cél
cel92
Messages postés
28
Date d'inscription
mercredi 13 février 2008
Statut
Membre
Dernière intervention
16 décembre 2008
13
16 sept. 2008 à 11:38
16 sept. 2008 à 11:38
Bonjour,
Je ne comprends pas ce que tu appelles "rang 1" dans Excel.
-> "je veux que ces 7 lignes aient le rang 1"
Je ne comprends pas ce que tu appelles "rang 1" dans Excel.
-> "je veux que ces 7 lignes aient le rang 1"