Copier/coller d'une plage de cellule variable en vba [Fermé]

Signaler
-
Messages postés
14934
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
-
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

Messages postés
14934
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
4 186
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

Messages postés
32
Date d'inscription
mardi 9 février 2016
Statut
Membre
Dernière intervention
27 mars 2020

Merci mais ça me copie tout le la Colonne C
Le programme ne s'arrête pas aux bonnes valeurs
Messages postés
14934
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
4 186
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