Copier/Coller une cellule avec une fonction SI [Résolu/Fermé]

Signaler
Messages postés
15
Date d'inscription
mardi 4 juin 2013
Statut
Membre
Dernière intervention
22 novembre 2016
-
Messages postés
58
Date d'inscription
jeudi 6 juin 2013
Statut
Membre
Dernière intervention
19 juin 2013
-
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

Messages postés
58
Date d'inscription
jeudi 6 juin 2013
Statut
Membre
Dernière intervention
19 juin 2013
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
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 60467 internautes nous ont dit merci ce mois-ci

Messages postés
58
Date d'inscription
jeudi 6 juin 2013
Statut
Membre
Dernière intervention
19 juin 2013
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 ^^
Messages postés
15
Date d'inscription
mardi 4 juin 2013
Statut
Membre
Dernière intervention
22 novembre 2016

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.
Messages postés
58
Date d'inscription
jeudi 6 juin 2013
Statut
Membre
Dernière intervention
19 juin 2013
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.
Messages postés
15
Date d'inscription
mardi 4 juin 2013
Statut
Membre
Dernière intervention
22 novembre 2016

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.
Messages postés
58
Date d'inscription
jeudi 6 juin 2013
Statut
Membre
Dernière intervention
19 juin 2013
3
https://www.cjoint.com/

il suffit d'utiliser un site comme celui ci, et de copier coller le lien obtenu sur ce topic ^^
Messages postés
15
Date d'inscription
mardi 4 juin 2013
Statut
Membre
Dernière intervention
22 novembre 2016

https://www.cjoint.com/?CFhnvs7KOd1

d'accord merci ça marche niquel
Messages postés
15
Date d'inscription
mardi 4 juin 2013
Statut
Membre
Dernière intervention
22 novembre 2016

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
Messages postés
58
Date d'inscription
jeudi 6 juin 2013
Statut
Membre
Dernière intervention
19 juin 2013
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 ;)