Copier/coller d'une plage de cellule variable en vba

flavinou -  
gbinforme Messages postés 14930 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour
j'ai besoin de votre aide en vba Mon niveau est peu évolué
Il faut :
Sélectionner la colonne C entre les lignes g et h (cf macro)
Normalement les valeurs sont dans l'ordre croissant
Copier la sélection et la coller (cf macro)
Le critère de sélection se trouve dans la colonne E et doit être compris entre 2 valeurs d'une autre feuille (cf macro)

Sub Nom()
    Dim a As Range
    Dim b As Range
    Dim c As Range
    Dim d As Range
    Dim e As Range
    Dim f As Range
    Dim g As Integer
    Dim h As Integer

    Sheets("Paramètres").Select
    a = Range("S3").Select
    b = Range("T3").Select
    
    Sheets("Name").Select
    For i = 2 To 500
        c = Range("E" & i).Select

        If c >= a Then
            g = i
            d = Range("C" & g).Select
            Exit For
        End If
    Next i
    
    For j = g To 500
        e = Range("E" & j).Select

        If e >= Range("E" & g).Select Then
            If e <= b Then
                If (Range("E" & j + 1).Select > e) Then
            
                Else
                    h = j
                    f = Range("C" & h).Select
                    Exit For
                End If
            End If
        End If
    Next j
    
    Range("C" & g & ":C" & h).Select

    Application.CutCopyMode = False
    Selection.Copy
    Range("I2").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False

End Sub


Pouvez vous m'aider à corriger mes fautes et à optimiser ce programme

1 réponse

  1. gbinforme Messages postés 14930 Date d'inscription   Statut Contributeur Dernière intervention   4 744
     
    Bonjour,

    Évites les select mis par l'enregistreur mais inutiles.
    Voilà comment je corrigerais :
    Sub Nom()
        Dim a As Range
        Dim b As Range
        Dim i As Integer
        Dim j As Integer
    
        With Sheets("Paramètres")
            Set a = .Range("S3")
            Set b = .Range("T3")
        End With
        With Sheets("Name")
            For i = 2 To 500
                If Range("E" & i) >= a Then
                    Exit For
                End If
            Next i
        
            For j = i To 500
        
                If Range("E" & j).Value >= Range("E" & i).Value Then
                    If Range("E" & j).Value <= b Then
                        If Range("E" & j + 1).Value <= Range("E" & j).Value Then
                            Exit For
                        End If
                    End If
                End If
            Next j
        End With
        
        Range("C" & i & ":C" & j).Copy
        Range("I2").PasteSpecial Paste:=xlPasteValues
    
        Application.CutCopyMode = False
    End Sub

    0
    1. flavinou7263 Messages postés 32 Date d'inscription   Statut Membre Dernière intervention  
       
      Merci mais ça me copie tout le la Colonne C
      Le programme ne s'arrête pas aux bonnes valeurs
      0
    2. gbinforme Messages postés 14930 Date d'inscription   Statut Contributeur Dernière intervention   4 744
       
      J'avais gardé tes tests mais sans doute qu'il suffit de laisser ainsi :
              For j = i To 500
          
                      If Range("E" & j).Value <= b Then
                              Exit For
                       End If
              Next j
      0