Macro

manu -  
 Manu -
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
Configuration: Windows XP
Internet Explorer 7.0

15 réponses

  1. Ivan-hoe Messages postés 433 Date d'inscription   Statut Membre Dernière intervention   310
     
    Bonjour Manu,
    utilise la propriété Value de la cellule, qui renvoie son contenu
    Range("A1").Value
    I.
    0
  2. manu
     
    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
  3. 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.
    0
  4. manu
     
    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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. manu
     
    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
  7. 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
    0
  8. 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
    0
  9. 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
    0
  10. 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
    0
  11. Ivan-hoe Messages postés 433 Date d'inscription   Statut Membre Dernière intervention   310
     
    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
  12. Ivan-hoe Messages postés 433 Date d'inscription   Statut Membre Dernière intervention   310
     
    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
  13. Ivan-hoe Messages postés 433 Date d'inscription   Statut Membre Dernière intervention   310
     
    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
  14. cel92 Messages postés 28 Statut Membre 13
     
    Bonjour,

    J'ai recopié ton code : quand je supprime le "Shift:=xlUp" du insérer, cela fonctionne.
    -1
  15. cel92 Messages postés 28 Statut Membre 13
     
    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
  16. cel92 Messages postés 28 Statut Membre 13
     
    Bonjour,

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