Problème copier/coller selon une valeur précise [Résolu]

Signaler
Messages postés
8
Date d'inscription
mercredi 6 juin 2012
Statut
Membre
Dernière intervention
28 février 2013
-
violette16
Messages postés
8
Date d'inscription
mercredi 6 juin 2012
Statut
Membre
Dernière intervention
28 février 2013
-
Bonjour à tous,

J'ai un petit problème avec mon code, je veux effectuer un copier coller de la feuille 1 à la feuille "test" mais uniquement lorsque dans la feuille d'origine la valeur de la cellule ds la colonne E = "X"

mon code ne tient pas compte de cette valeur et copie tout je ne trouve pas l'erreur

Sub transfert()


Const NomFO = "Feuil1"
Const NomFD = "test"

Const CellD = "B5"

Dim lifin As Long

ActiveWorkbook.Save

For i = 1 To 84

lifin = Range("A1").SpecialCells(xlCellTypeLastCell).Row


If Sheets(NomFO).Range("E" & i, "E" & i) = "X" Then

Sheets(NomFO).Range("B4:E" & lifin).Copy Sheets(NomFD).Range(CellD)

ElseIf Sheets(NomFO).Range("E" & i) <> "X" Then

End If

Next i

End Sub


merci d'avance

10 réponses

Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
217
Si toutefois, tu es maintenant "en meilleure condition" pour t'éveiller à VBA :
Regarde ce que ferait ceci :
Dim plage As Range, lifin As Long
With Sheets("Feuil1")
  lifin = .Cells.SpecialCells(xlCellTypeLastCell).Row
  For i = 1 To lifin
    If UCase(.Range("E" & i)) = "X" Then
      If plage Is Nothing Then Set plage .Range("E" & i) Else Set plage Union(plage, .Range("E" & i))
    End If
  Next
  If Not plage Is Nothing Then plage.Copy Destination:=Sheets("Test").Range("B5")
End With

(juste pour le cas où)





________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
217
Bonjour,
et si tu te concentrais un peu et t'appliquais à savoir le sens de tes instructions ?
1)
Range("E" & i, "E" & i) est .... tout simplement ... Range("E" & i) !
et donc :
ElseIf Sheets(NomFO).Range("E" & i) <> "X" Then
ne répond à aucune logique ni nécessité !
2)
Sheets(NomFO).Range("B4:E" & lifin).Copy
va copier quoi, d'après toi, sinon toute la plage Range("B4:E" & lifin) à partir de la cellule B5 de ton autre feuille !
Réveille-toi un peu, s'il te plait.
Messages postés
8
Date d'inscription
mercredi 6 juin 2012
Statut
Membre
Dernière intervention
28 février 2013

j'ai corrigé le reste mais concernant la condition ="X" je ne sais pas comment faire

désolé mais je suis débutante ...
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
217
désolé mais je suis débutante

Mais ...
1) c'est du niveau débutant ! Et je t'ai dit quel était le seul critère de cette expression conditionnelle
2) j'ai également appelé ton attention sur ce que tu copiais. Ouvre donc s'il te plait (surtout si tu es débutante) ton aide VBA sur la méthode Copy (rubrique Range.Copy) et lis.
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
217
Et ouvre également ton aide VBA sur le mot Range, hein,
Car je vois deux raisons pour ne pas écrire ce que tu as écrit :
Range("E" & i, "E" & i)
!!!
qui ne correspond à aucune notation possible pour l'objet Range.
Or, vouloir travailler avec VBA/Excel sans même s'intéresser à cette notation, cela équivaut à vouloir traverser la manche à la nage sans avoir appris lkes rudiments de la nage !

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Messages postés
8
Date d'inscription
mercredi 6 juin 2012
Statut
Membre
Dernière intervention
28 février 2013

en effet c'est une grosse erreur de ma part mais vous n'êtes pas obligé d'être désagréable désolé mais si je vais sur les forums c'est aussi pour apprendre !
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
217
Si te montrer tes erreurs (ce que j'ai fait) est pour toi : "être désagréable", tu "feras" dorénavant sans moi. Désolé et bonne chance.


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Messages postés
8
Date d'inscription
mercredi 6 juin 2012
Statut
Membre
Dernière intervention
28 février 2013

me montrer les erreurs m'a permis d'améliorer le code sur ce point je suis ok

c'est dans la façon de le dire "réveille toi"

ce n'est pas grave

bonne journée à vous aussi
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
217
Je t'ai demandé de "te réveiller" car tu ne l'étais pas suffisamment et que certaines choses "sautaient" aux yeux, pour peu qu'on en analysât et comprît le sens et la portée (de ce que tu écrivais).
Si probl-ème résolu ===>> clique sur tag "réponse acceptée" pour libérer ce sujet (sans vouloir te "vexer" d'avoir à te demander de déclencher ce réflexe !)


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Messages postés
8
Date d'inscription
mercredi 6 juin 2012
Statut
Membre
Dernière intervention
28 février 2013

ça marche en faisant cela :
Sub transfert()
Dim lifin As Long, i As Long, j As Long

j = 4 ActiveWorkbook.Save
lifin = Sheets("feuil1").Range("A1").SpecialCells(xlCellTypeLastCell).Row
For i = 1 To lifin
    If Sheets("feuil1").Range("E" & i).Value = "Input" Then
       
        Sheets("feuil1").Range("B" & i).Copy Sheets("test").Range("B" & j)
        Sheets("feuil1").Range("D" & i).Copy Sheets("test").Range("C" & j)
        
       j = j + 1
       
    End If
Next i

end sub


merci de votre aide