Macro

Fermé
manu - 2 sept. 2008 à 22:53
 Manu - 17 sept. 2008 à 16:28
Bonjour,

j'aimerai savoir s'il est possible de faire en sorte que la macro prenne en compte les valeurs ou les mots contenues dans les cellules plutot que l'emplacement des cellules.

merci davance pour votre aide
A voir également:

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
Bonjour Manu,
utilise la propriété Value de la cellule, qui renvoie son contenu
Range("A1").Value
I.
0
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
0
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.
0
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
0

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
0
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
0
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
0
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
0
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
0
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
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
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.
-1
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
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.
-1
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
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.
-1
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
Bonjour,

J'ai recopié ton code : quand je supprime le "Shift:=xlUp" du insérer, cela fonctionne.
-1
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
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 :

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
-1
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
Bonjour,

Je ne comprends pas ce que tu appelles "rang 1" dans Excel.
-> "je veux que ces 7 lignes aient le rang 1"
-1