Plage de cellule

plage de cellules

Bonjour à tous

j'ai le code suivant

Option Explicit
Sub test()
Dim x As Range, y As Range
With Workbooks("classeur1.xls").Sheets("NomFeuille1")
    Set x = .Range("J:J").Find("blabla", , xlValues, xlWhole, , , False)
    If Not x Is Nothing Then
        With Workbooks("classeur2.xls").Sheets("NomFeuille2")
            Set y = .Range("J:J").Find("blabla", , xlValues, xlWhole, , , False)
            If Not x Is Nothing Then
                x.EntireRow.Copy Destination:=y.EntireRow
            End If
        End With
    End If
End With
End Sub

Grace a cette ligne

"x.EntireRow.Copy Destination:=y.EntireRow" on voit qu on copie entièrement la ligne qui correspond a "x" a la place de la ligne qui correspond a "y"

comment ne sélectionner que des plage de cellule et non la ligne entière je n'arrive pas à obtenir la bonne synthaxe

La solution la plus adapter a mon sens etait

"x.range(A:C) destination:=y.range(AA:AC)"

Suis-je proche de la bonne réponse ??

Merci

Cordialement

Bonjour...

Peut-être de faire une bidouille du genre :

Selectionner votre cellule x

de cette selection appliquez une méthode Range pour selectionner l'ensemble des cellules devant être copiées

Puis avec une méthode .Copy coller les valeurs là où vous voulez les copier

?

je n'ai pas tres bien compris ta solution, mais merci de m'avoir repondu

Option Explicit
Sub test()
Dim x As Range, y As Range
With Workbooks("classeur1.xls").Sheets("NomFeuille1")
    Set x = .Range("J:J").Find("blabla", , xlValues, xlWhole, , , False)
    If Not x Is Nothing Then
        With Workbooks("classeur2.xls").Sheets("NomFeuille2")
            Set y = .Range("J:J").Find("blabla", , xlValues, xlWhole, , , False)
            If Not x Is Nothing Then
              x.range("A:C") destination:=y.range("AA:AC")
            End If
        End With
    End If
End With
End Sub

Normalement ça sa devrait marcher ? au lieu de copier toute la ligne x vers la ligne y , il copie seulement x de (a:c) vers y de (aa:ac)

mais j'ai une erreur de synthaxe,

normalement j'ai que la ligne suivante a modifier ?

x.range("A:C") destination:=y.range("AA:AC")

mais j'ai pas la bonne synthaxe

Bonjour,

Tu peux utiliser la propriété Range.Offset pour décaler ta plage y puis la propriété Range.Resize pour redimensionner cette plage.

Option Explicit
Sub test()
Dim x As Range, y As Range
With Workbooks("classeur1.xlsm").Sheets("NomFeuille1")
    Set x = .Range("J:J").Find("blabla", , xlValues, xlWhole, , , False)
    If Not x Is Nothing Then
        With Workbooks("classeur2.xlsm").Sheets("NomFeuille2")
            Set y = .Range("J:J").Find("blabla", , xlValues, xlWhole, , , False)
            If Not x Is Nothing Then
                x.Offset(0, -9).Resize(, 3).Copy Destination:=y.Offset(0, 17)
            End If
        End With
    End If
End With
End Sub

A+

Normal pour l'erreur de syntaxe (je pense)

x.range("A:C") destination:=y.range("AA:AC")

Dans votre code, supprimez x. et y. qui représentent une cellule " trouvée "

Ainsi, la méthode Range doit vous permettre de pouvoir selectionner votre plage A:C

et de la copier

Option Explicit
Sub test()
Dim x As Range, y As Range
With Workbooks("classeur1.xls").Sheets("NomFeuille1")
Set x = .Range("J:J").Find("blabla", , xlValues, xlWhole, , , False)
If Not x Is Nothing Then
With Workbooks("classeur2.xls").Sheets("NomFeuille2")
Set y = .Range("J:J").Find("blabla", , xlValues, xlWhole, , , False)
If Not x Is Nothing Then
Workbooks("classeur1.xls").Sheets("oui").Cells(x.row,1).Resize(,3).copy destination:=.Cells(y.row,27).Resize(,3)

End If
End With
End If
End With
End Sub 

C'est bon ce code marche niquel

lorsqu'il trouve pas la feuille ( par exemple ici la feuille1) alors il me met un message d'erreur, comment enlever cela , c'est a dire que lorsque qu il trouve pas la feuille bah rien se passe et il continue d'executer le code

et j'ai egalement "Offset(1)" a placer à propos de ma ligne x ( je veux pas prendre x mais la ligne juste en dessous) ou dois-je le placer? dans cette ligne je suppose ? mais comment ?

Workbooks("classeur1.xls").Sheets("oui").Cells(x.row,1).Resize(,3).copy destination:=.Cells(y.row,27).Resize(,3)

excusez moi de ma médiocrité mais je debute sur Visual basic

Merci

Essayez en l'inserant avant le .copy

(Je suis débutant en vba également et nous ne sommes pas les seuls donc pas de honte à avoir)

...Resize(,3).offset(1,0).copy

Merci , ça marche niquel

comment tester l'existance d'une feuille, c'est a dire dans mon exemple si la feuille 'oui' n'exite pas j'ai un message bug qui arrete mon code , comment faire pour lorsqu'il ne trouve pas ma feuille, il se passe rien et que le code continue de s'executer ?

Merci encore

Essayez ceci :

On error Resume Next

(à placer en début de macro)

merci ! genial

De rien...

Rechercher des sujets similaires à "plage"