Re Bonjour à tous, et à Jean-Marie en particulier
Donc pour la question d'écrire
With Sheets('TheSheet')
.Range('A'&Derlgn)
End With
Ou :
With Sheets('TheSheet')
.Cells(Derlgn, 2)
End With
Fondamentalement il n'y a pas de Différence, les deux Syntax font références pour retourner un Object Range.
En pratique 'Théorique', surtout dans le cas présent, je préfère pour les dédbutants, employer le Range('A' & L), celui ci étant plus facilement assimilable à ce que l'on voit lorsque l'on enregistre une macro.
En pratique 'Pratique', en fait la rapidité d'exécution est identique, surtout pour ce que l'on ne fait dans ce genre d'action, reporter quelques dizaines d'octets vers quelques cellules de la dernière ligne trouvée dans la Feuille 'Cible'.
En pratique 'Avancée', là tout dépend de ce que l'on veut obtenir, mais il n'est pas rare de faire une double boucle pour se déplacer 'latitudinalement' (Vertical) et 'longitudinalement' (Horizontal)... Et dans ce cas on fera référence obligatoirement à Cells pour retourner l'objet range sacnné lors du déplacement...
Exemple avec l'exemple de ce Fil... En adaptant pour que ce soit simple et cohérent avec des données à traiter comme suit:
Alain doit reporter systématiquement la Ligne 15 de sa Feuille 'Facture' qui contient des donnée de B15 à M15, soit 12 colonnes...et donc vers la Feuille 'Recapitulation' sur la première ligne dispo des Collones A à L, soit 12 colonnes aussi
Voici la méthode 'Basic' avec Range telle que je l'ai écrite :
Sub ReportDataBasic()
Dim DerniereLigne As Long
With Sheets('Recapitulation')
DerniereLigne = .Range('A65536').End(xlUp).Row + 1
.Range('A' & DerniereLigne).Value = Sheets('Facture').Range('B15').Value
.Range('B' & DerniereLigne).Value = Sheets('Facture').Range('C15').Value
.Range('C' & DerniereLigne).Value = Sheets('Facture').Range('D15').Value
.Range('D' & DerniereLigne).Value = Sheets('Facture').Range('E15').Value
.Range('E' & DerniereLigne).Value = Sheets('Facture').Range('F15').Value
.Range('F' & DerniereLigne).Value = Sheets('Facture').Range('G15').Value
.Range('G' & DerniereLigne).Value = Sheets('Facture').Range('H15').Value
.Range('H' & DerniereLigne).Value = Sheets('Facture').Range('I15').Value
.Range('I' & DerniereLigne).Value = Sheets('Facture').Range('J15').Value
.Range('J' & DerniereLigne).Value = Sheets('Facture').Range('K15').Value
.Range('K' & DerniereLigne).Value = Sheets('Facture').Range('L15').Value
.Range('L' & DerniereLigne).Value = Sheets('Facture').Range('M15').Value
End With
End Sub
Voici la Méthode Cells, Juxtaposée avec une Double Boucles :
Sub ReportDataDoubleBoucle()
Dim L As Long
Dim C As Byte
With Sheets('Recapitulation')
L = .Range('A65536').End(xlUp).Row + 1
For C = 1 To 12
.Cells(L, C) = Sheets('Facture').Cells(15, C + 1)
Next
End With
End Sub
A Noter : certaines propriétés sont automatiquement comprise par VBA comme étant par Défaut, comme ici 'Value'... qui est donc sous-entendu.
Voilà grosso modo une grosse différence car il va s'en dire que la seconde méthode est plus lisible, et sur des grosses quantités de cellules par ligne, le temps d'exécution peut aussi être amélioré.
Sinon on a aussi ce genre de chose avec Cells :
Sub HelpSample()
Dim rwIndex As Byte, colIndex As Byte
For rwIndex = 1 To 4
For colIndex = 1 To 10
With Worksheets('Sheet1').Cells(rwIndex, colIndex)
If .Value < 0.001 Then .Value = 0
End With
Next colIndex
Next rwIndex
End Sub
Ou encore, et celle là je vous la sort de derrière les Fagots !!!
Sub BarbaCellTruc()
Dim NumeroCell As Integer
For NumeroCell = 1 To 512
Cells(NumeroCell).Value = 'LOL'
Next
End Sub
Et oui vous n'avez pas la berlue (lol) on peut très bien se référer au numéro d'index (qui se déplace donc 'longitudinalement' !!!
Voilà pour ta question...
Pour Chip Pearson (sorry pas Cheap finalement) voir
cpearson.com
Bon Après Midi
@+Thierry