Extraction d'une plage en vba excel

Bonjour,

Je cherche à copier une plage d'un onglet dans une zone dans autre onglet par code vba .
j'essayé de utiliser l SQl mais sans résultat , cette sélectionne et sous un critère le champs client doit être entre 120 et 180. mon but ce de extraire ces ligne dans une nouvelle feuille
mon code:
for i=1 to 1000
If Sheets(1).Range("I" & i).Value >180 And Sheets(1).Range("I" & i).Value <= 120 Then

MsgBox (Sheets(1).Range("I" & i).Value) ' pour chaque valeur trouver le programme l'affiche dans un message
nb = Range("I" & i & "").Value
Sheets(1).Range("I" & i).Select
Range("C" & j & "").Value = nb
End If
next i

4 réponses

  1. bonjour
    1. il y a un pb avec ta condition
    si a>180 et a<=120 alors ...
    qui est toujours fausse
    il te faut écrire pour vérifier que 120 <= a < 180
    If Sheets(1).Range("I" & i).Value <180 And Sheets(1).Range("I" & i).Value >= 120 Then 

    2. pourquoi le & "" dans Range("I" & i & "").Value
    Range("I" & i)
    devrait suffire

    bonne suite
    1. merci ,je suis tellement stressé que j'ai pas fait attention :s mais pour que le résultats soit afficher dans la feuille 2 ????? je veux que la plage de résultat s'affiche a la feuille 2
      merci bien :)
  2. re

    comme tu as fait pour récupérer nb en y ajoutant nle nom/numéro de la feuille

    sheets(2).Range("C" & j).Value = nb 

    et .... reste zen
    1. dzl mais peux tu m'écrire le code complais :p car je suis perdu et merci encore une fois
  3. re

    un exemple de code
    RQ1. ici, comme je ne sais pas ce que représente j
    sheets(2).Range("C" & j).Value = nb
    j'ai supposé que dans la feuille 2 tu voulais récupérer les valeurs dans la colonne C à partir de la ligne li2deb, les unes en dessous des autres
    RQ2. les variables finissant par 1 concernent la feuille 1 et celles contenant 2 ...
    pour les variables utilises des identificaterurs qui "parlent" (li pour ligne , ...)
    RQ3. tu as intérêt a déclarer tes variables (option explicit t'obligera a le faire)
    RQ4. j'ai attaché le code a un bouton, mais tu peux l'affecter à une macro

    Option Explicit 
    
    Private Sub CommandButton1_Click() 
    Const li2deb = 1 
    Dim li1 As Long, li2 As Long 
    Dim nb 
    li2 = li2deb 
    For li1 = 1 To 1000 
      If Sheets(1).Range("I" & li1).Value < 180 And Sheets(1).Range("I" & li1).Value >= 120 Then 
        MsgBox (Sheets(1).Range("I" & li1).Value) 
        nb = Range("I" & li1).Value 
        Sheets(2).Range("C" & li2).Value = nb 
        li2 = li2 + 1 
      End If 
    Next li1 
    End Sub

    bonne suite
    1. Salut! Essais ca:

      for i=1 to 1000 
      If Sheets(1).Range("I" & i).Value >180 And Sheets(1).Range("I" & i).Value <= 120 Then 
      
      MsgBox (Sheets(1).Range("I" & i).Value) ' pour chaque valeur trouver le programme l'affiche dans un message 
      nb = Range("I" & i & "").Value 
      Sheets(1).Range("I" & i).Select 
      selection.copy
      Sheets("2").Activate
      Range("I" & i).Select 
      Selection.paste
      Range("C" & j & "").Value = nb 
      End If 
      next i