Copier/Coller une cellule avec une fonction SI

Résolu
Roazak Messages postés 17 Statut Membre -  
NeoTsu Messages postés 62 Statut Membre -
Bonjour
Je ne connais pas du tout le VBA mais j'aimerais avoir un programme qui puisse copier une ligne d'une feuille 'feuil1' et la recopier sur une autre feuille 'feuil2' SI dans la colonne G à partir de la cellule G5 il y a des valeurs entre -10 et 10. Ce programme recopie les lignes en question sur 'feuil2' à partir de la cellule B1.

ps:Est-ce que des cellules fusionnées en A et B peuvent gêner le programme pour recopier?

Merci d'avance

7 réponses

  1. NeoTsu Messages postés 62 Statut Membre 3
     
    Alors, ça marche, voila ce que j'ai fais:

    feuille maintenance préventive :
    H2: j'ai ajoué un "a", et j'ai ensuite changé la couleur du texte en blanc
    H3: même manipulation
    K1: j'ai entré la formule =nbval(H:H)

    ensuite, j'a créé la macro suivante:

    Sub copie()
    Dim nbval As Long
    nbval = Sheets("maintenance préventive").Range("K1").Value
    For i = 5 To nbval
          If -10 < Sheets("maintenance préventive").Cells(i, 7).Value Then
          If Sheets("maintenance préventive").Cells(i, 7).Value < 10 Then
          Sheets("feuil1").Rows(2).Insert
          Sheets("feuil1").Cells(2, 1).Value = Sheets("maintenance préventive").Cells(i, 1).Value
          Sheets("feuil1").Cells(2, 2).Value = Sheets("maintenance préventive").Cells(i, 2).Value
          Sheets("feuil1").Cells(2, 3).Value = Sheets("maintenance préventive").Cells(i, 3).Value
          Sheets("feuil1").Cells(2, 4).Value = Sheets("maintenance préventive").Cells(i, 4).Value
          Sheets("feuil1").Cells(2, 5).Value = Sheets("maintenance préventive").Cells(i, 5).Value
          Sheets("feuil1").Cells(2, 6).Value = Sheets("maintenance préventive").Cells(i, 6).Value
          Sheets("feuil1").Cells(2, 7).Value = Sheets("maintenance préventive").Cells(i, 7).Value
          Sheets("feuil1").Cells(2, 8).Value = Sheets("maintenance préventive").Cells(i, 8).Value
          Sheets("feuil1").Cells(2, 9).Value = Sheets("maintenance préventive").Cells(i, 9).Value
          Else
          End If
          Else
          End If
    Next i
    End Sub


    j'ai testé, ça fonctionne. attention tout de même, il ne faut pas renommer "feuil1", sinon ça ne marchera plus. si tu la renomme, il faut également changer ça dans le code VBA

    De même sur "feuil1", il ne faut pas changer la ligne 2, elle serait sinon décalée vers le bas a chaque exécution de la macro

    voila, dis moi si ça fonctionne, normalement c'est bon ^^
    1
  2. NeoTsu Messages postés 62 Statut Membre 3
     
    Bonjour,

    Voila une solution possible :

    dans un premier temps, pour faire simple, créé une cellules qui compte le nombre de lignes de ta feuille de données. fais attention à qu'il y ait bien des valeur dans les première ligne également (si les cellules sont vide, met y une lettre couleur blanche pour qu'elle ne se voit pas.). la formule de la cellule sera par exemple:

    =nbval(A:A)


    Ici on va dire que tu a mis cette formule en Z99
    ensuite en ce qui concerne le VBA: (je prends ici dans l'exemple le cas ou les valeurs à copier sont à partir de la ligne 5, et que tu a sur la seconde feuille 1 ligne de "titres")

    sub copie()
    dim nbval as long
    nbval = sheets("feuil1").range("Z99").value
    For i = 5 to nbval
          If -10<sheets("feuil1").cells(i,7).value<10 then
          sheets("feuil2").rows(2).insert
          sheets("feuil1").rows(i).copy
          sheets("feuil2").range("A2").paste
          Else
          End if
    Next i
    End Sub
           


    le problème que tu va rencontre, c'est seulement l'ordre des ligne, qui sera enfait l'exacte opposé de ton tableau d'origine. mais ça, tu peux le gerer par un tri ^^
    0
  3. Roazak Messages postés 17 Statut Membre
     
    Bonjour
    Tout d'abord merci d'avoir répondu si vite à ma question.
    Quand j'exécute le programme ça ne marche pas et il me dit "Erreur d'exécution '438':Propriété ou méthode non-gérées par cette objet".
    tout ce que j'ai changé dans le programme c'est l'emplacement de la cellule pour calculer le nombre de lignes (D2).
    Je voulais demander qu'est-ce que ça veut dire cells (i,7) dans la 5ème ligne du programme.

    Quand je fait F5 dans VBA pour tester la macro la première fois il me met le message d'erreur et il ne copie rien malgré quelques valeurs à copier et quand je clique une deuxième sur l'exécution de la macro, elle copie seulement la première ligne de mon tableau alors qu'elle n'est pas comprise dans la condition.
    0
    1. NeoTsu Messages postés 62 Statut Membre 3
       
      Hum, je n'ai jamais eu ce code erreur avant...

      cells te permet d'aller cherche la cellule Gi, i étant une variable qui évolue au fil de la macro

      si il n'est pas confidentiel, serait-il possible de mettre en ligne le fichier au format xlsm ? cela serait plus simple pour résoudre le problème.
      0
  4. Roazak Messages postés 17 Statut Membre
     
    Désolé mais je suis nouveau sur CCM et je ne sais pas comment insérer un document. Pouvez-vous me dire comment faire et je vous donnerait volontier le document en question.
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. NeoTsu Messages postés 62 Statut Membre 3
     
    https://www.cjoint.com/

    il suffit d'utiliser un site comme celui ci, et de copier coller le lien obtenu sur ce topic ^^
    0
  7. Roazak Messages postés 17 Statut Membre
     
    Juste pour t'embêter ;>

    est-il possible de supprimer la feuil1 sauf la 1ère ligne avant le copier/coller pour éviter qu'il y ait deux fois les mêmes valeurs.

    Sinon je pensait faire un bouton pour activer la macro mais ça je sais faire.

    Merci beaucoup pour ton aide et tes réponses si rapides
    0
    1. NeoTsu Messages postés 62 Statut Membre 3
       
      Oui, avec ça, ça devrait aller:
      Sub copie()
      Dim nbval As Long
      nbval = Sheets("maintenance préventive").Range("K1").Value
      Sheets("feuil1").range("A2:I200").clearcontents
      For i = 5 To nbval
            If -10 < Sheets("maintenance préventive").Cells(i, 7).Value Then
            If Sheets("maintenance préventive").Cells(i, 7).Value < 10 Then
            Sheets("feuil1").Rows(2).Insert
            Sheets("feuil1").Cells(2, 1).Value = Sheets("maintenance préventive").Cells(i, 1).Value
            Sheets("feuil1").Cells(2, 2).Value = Sheets("maintenance préventive").Cells(i, 2).Value
            Sheets("feuil1").Cells(2, 3).Value = Sheets("maintenance préventive").Cells(i, 3).Value
            Sheets("feuil1").Cells(2, 4).Value = Sheets("maintenance préventive").Cells(i, 4).Value
            Sheets("feuil1").Cells(2, 5).Value = Sheets("maintenance préventive").Cells(i, 5).Value
            Sheets("feuil1").Cells(2, 6).Value = Sheets("maintenance préventive").Cells(i, 6).Value
            Sheets("feuil1").Cells(2, 7).Value = Sheets("maintenance préventive").Cells(i, 7).Value
            Sheets("feuil1").Cells(2, 8).Value = Sheets("maintenance préventive").Cells(i, 8).Value
            Sheets("feuil1").Cells(2, 9).Value = Sheets("maintenance préventive").Cells(i, 9).Value
            Else
            End If
            Else
            End If
      Next i
      End Sub


      j'ai ajouté la ligne 4
      j'ai prévu large, mais au moins ça te permettra de faire face à la plupart des possibilités. De plus, tu pourra mettre en forme ta feuil1(tableau, largeur etc...), ça ne les effacera pas.

      pas de problème ;)
      0