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

Fermé
flavinou - Modifié par Chris 94 le 9/02/2016 à 22:03
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 - 9 févr. 2016 à 23:41
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

gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 684
9 févr. 2016 à 22:47
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
flavinou7263 Messages postés 32 Date d'inscription mardi 9 février 2016 Statut Membre Dernière intervention 27 mars 2020
9 févr. 2016 à 23:10
Merci mais ça me copie tout le la Colonne C
Le programme ne s'arrête pas aux bonnes valeurs
0
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 684
9 févr. 2016 à 23:41
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