Pb : Range("e" & Range("d200").End(xlUp).Row + 4)

  • Initiateur de la discussion carlos
  • Date de début
C

carlos

Guest
bonsoir

je cherche à coller sous la derniere cellule nonvide la cell validée.

Public Sub Noms_eleves()
Dim cell As Variant
For Each cell In Sheets('f_ele').Range('d4:d500')
If cell = Sheets('classe').Range('a1') _
Then Range('e' & Range('d200').End(xlUp).Row + 4) = cell.Offset(0, -2)
Next
End Sub

pourquoi le 'Range('e' & Range('d200').End(xlUp).Row + 4)' ne colle pas le cell accepté sous la derniere cellule nonvide

merci
 
C

carlos

Guest
bonsoir

g trouvé

Then Cells(Range('e200').End(xlUp).Row + 1, 5) = cell.Offset(0, -2)


mais comment faire pour que le premier cell validé soit coller en cellule e4 puis les autres les uns à la suite des autres


merci
 

Hervé

XLDnaute Barbatruc
Bonsoir le forum, carlos

Je pense que le mieux, c'est de tester le numéro de ligne renvoyé, et le plus simple pour tester c'est d'abord de la passer d'abord en variable :

Public Sub vev()
Dim derligne As Integer

'derligne=numéro de la dernière ligne vide de la colonne e
derligne = Range('e200').End(xlUp).Row + 1
'si derligne est inférieur à 5
If derligne < 5 Then
'alors derligne=4
derligne = 4
End If

Cells(derligne, 5) = cell.Offset(0, -2)

End Sub

En espérant t'avoir aidé.

Salut
 
C

carlos

Guest
Salut Hervé, bonjour le forum

A priori ca ne passe pas , je joins le fichier ....

Merci [file name=AppelUSFclasse.zip size=28437]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/AppelUSFclasse.zip[/file]
 

Pièces jointes

  • AppelUSFclasse.zip
    27.8 KB · Affichages: 30

PascalXLD

XLDnaute Barbatruc
Modérateur
Re:pb : Range("e" & Range("d200").End(xlUp).Row +

Bonjour

Sans trop regarder ta macro il y avait un truc qui me chiffonait depuis le début c'est le

Range('e200').End(xlUp).Row

et mes craintes se sont concrétisées car tu as plus de 200 lignes dans ton fichier

Donc il vaut mieux ecrire

Range('e65536').End(xlUp).Row

pour être s&ucirc;r de tomber sur la dernière

Bon courage
 
C

carlos

Guest
Re:pb : Range("e" & Range("d200").End(xlUp).Row +

salut pascal

au maxi , j'utiliserais que 40 lignes...
Es ce que ca change qq chose si je limite à 200 sachant que je ne les utiliserais pas ;

merci
 

PascalXLD

XLDnaute Barbatruc
Modérateur
Re:pb : Range("e" & Range("d200").End(xlUp).Row +

Re

Légèrement modifié

Bonne journée [file name=AppelUSFclasse_20050418110657.zip size=27797]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/AppelUSFclasse_20050418110657.zip[/file]
 

Pièces jointes

  • AppelUSFclasse_20050418110657.zip
    27.1 KB · Affichages: 37

Hervé

XLDnaute Barbatruc
Re:pb : Range("e" & Range("d200").End(xlUp).Row +

Bonjour le forum, carlos, pascal

carlos, ton souci venait du fait que tu n'incrémentait pas la variable derligne dans la boucle for each.

Voici tes macros modifié :


Code:
Public Sub Noms_eleves()
Dim cell As Range
Dim derligne As Integer

Range('e4:e44').Clear

'derligne=numéro de la dernière ligne vide de la colonne e
derligne = Range('e65536').End(xlUp).Row + 1
For Each cell In Sheets('f_ele').Range('d4:d500')
    If cell = Sheets('classe').Range('a1') Then
        If derligne < 5 Then derligne = 4
        Cells(derligne, 5) = cell.Offset(0, -2)
        derligne = derligne + 1
    End If
Next cell

trieleve
End Sub
Sub trieleve()
    Range('E4:P44').Sort Key1:=Range('E4'), Order1:=xlAscending, Header:=xlGuess, _
        OrderCustom:=1
End Sub


Tes déclarations de plage (e200 et p44) figée, ne donne pas de souplesse pour l'évolution de tes données, si un jour tu as plus d'élèves et que tu ne modifies pas tes macros, tu va au devant de souci.

Donc comme pascal le dit, je pense qu'il serait souhaitable de rendre dynamique tes plages.

Salut
 

PascalXLD

XLDnaute Barbatruc
Modérateur
Re:pb : Range("e" & Range("d200").End(xlUp).Row +

Pas de mal Hervé

Comme je ne t'avais pas encore vu sur le forum aujourd'hui je me suis permis

Par contre Carlos je suis tout à fait d'accord avec Hervé sur ton code un peu figé et limité mais bon chacun voit midi à sa porte

Bonne journée à tous
 
C

carlos

Guest
Re:pb : Range("e" & Range("d200").End(xlUp).Row +

bonjour

merci Pascal et Hervé pour vos proposotions respectives.

Vous dites 'Tes déclarations de plage (e200 et p44) figée, ne donne pas de souplesse pour l'évolution de tes données', comment faire pour le rendre plus dynamique justement et evolutif ?


Merci
 

Hervé

XLDnaute Barbatruc
Re:pb : Range("e" & Range("d200").End(xlUp).Row +

re

8ème ou 9ème merveille ? :)

Surtout que pascal avait la solution bien avant moi.

voici tes macros 'optimisé', avec ca tu peux rouler jusqu'a 65536 élèves.

Code:
Public Sub Noms_eleves()
Dim cell As Range
Dim derligne As Integer

Range('e4:e' & Range('e65536').End(xlUp).Row).Clear

'derligne=numéro de la dernière ligne vide de la colonne e
derligne = Range('e65536').End(xlUp).Row + 1

For Each cell In Sheets('f_ele').Range('d4:d' & Sheets('f_ele').Range('d65536').End(xlUp).Row)
    If cell = Sheets('classe').Range('a1') Then
        If derligne < 5 Then derligne = 4
        Cells(derligne, 5) = cell.Offset(0, -2)
        derligne = derligne + 1
    End If
Next cell

trieleve
End Sub
Sub trieleve()
Application.ScreenUpdating = True
    Range('E4:P' & Range('e65536').End(xlUp).Row).Sort Key1:=Range('E4'), Order1:=xlAscending, Header:=xlGuess, _
        OrderCustom:=1
Application.ScreenUpdating = False
End Sub

Salut
 
C

carlos

Guest
Re:pb : Range("e" & Range("d200").End(xlUp).Row +

Salut Hervé


65536 élèves par classe / Sait on jamais avec raffarin , tout est possible.

En tout cas avec toi aussi

Un grand merci et peut etre à bientot

Carlos
 

Statistiques des forums

Discussions
312 310
Messages
2 087 128
Membres
103 479
dernier inscrit
Compta