Un End(xlup) capricieux

Bonsoir à tous,

D'une manière assez inexplicable (du moins avec mes compétences limitées en VBA) mon end xlup a décrété qui'il ne remonterait pas plus haut que la ligne 131 (qui est pourtant vide de chez vide).

Pas pratique puisqu'il est sensé indiquer le bas de la zone à copier. Je me retrouve donc quand je colle avec plein de lignes vides.

J'ai tout essayé pour le convaincre mais rien n'y fait.

Vous trouverez mon code ci-dessous et un fichier exemple en PJ!

Merci d'avance pour votre exceltise

Sub test()

    Dim Ws As Worksheet
    Dim LL As Integer

For Each Ws In ThisWorkbook.Worksheets

    If Ws.Name = ("Remote") Then
    If Ws.Name = ("Database") Then

    Else

    LL = Sheets("New attendance sheet").Range("B:G").End(xlUp).Row
    Sheets("New attendance sheet").Range("B13:G13" & LL).Copy
    Sheets("Database").Range("H60000").End(xlUp).Offset(1, 0).PasteSpecial xlValues

    End If
End If

Next Ws

End Sub

Bonsoir,

Peut-être comme ceci

Sub test()

    Dim Ws As Worksheet
    Dim LL As Integer

For Each Ws In ThisWorkbook.Worksheets

    If Ws.Name = ("Remote") Then
    If Ws.Name = ("Database") Then

    Else

    LL = Sheets("New attendance sheet").Range("B:G").End(xlDown).Row
    Sheets("New attendance sheet").Range("B13:G13" & LL).Copy

    End If
End If

Next Ws

End Sub

Bonjour et bienvenue sur le forum

Essaie ce code :

Sub test()

    Dim Ws As Worksheet
    Dim LL As Integer
    For Each Ws In ThisWorkbook.Worksheets
        If Ws.Name = ("Remote") Then
            If Ws.Name <> "Database" Then
                LL = Sheets("New attendance sheet").Range("B" & Range("Tableau13").Rows.Count + 12).End(xlUp).Row
                Sheets("New attendance sheet").Range("B13:G" & LL).Copy
            End If
        End If
    Next Ws
End Sub

Qu'en est-il ?

Bye !

Bonsoir à tous les deux,

Tout d'abord un grand merci pour le précieux coup de main.

M12 votre solution ne fonctionne pas vraiment.

La zone copiée au lieu de s’arrêter à ligne 132 s'arrête je ne sais pas trop dans le fin fond du document.

Le xlup ne semble donc pas fonctionner correctement.

GMB votre solution ne fonctionne pas non plus mais pour le coup.

Excel m'envoie un message d'erreur 1004 avec le fameux "la méthode Range de l'objet "_global" a échoué.

C'est une erreur à laquelle je me frotte régulièrement sur mon doc sans trop la comprendre puisque tout est bien défini.

Des pistes supplémentaires?

Hello,

En regardant de plus près cette ligne : Range("B13:G13" & LL).Copy avec LL renvoyant toujours 1

ça revient à écrire : mm = Range("B13:G13").Row & LL => ce qui donne 131 // numéro ligne B13 => 13 // 13 & 1 => 131

donc si on écrit Range("B14:G14" & LL) => 141 ou Range("B15:G15" & LL) => 151

si c'est pour faire de la copie du contenu plein du tableau, un truc du genre avec l'enregistreur doit le faire dans un 1er temps non ?

Sub test()

    Dim Ws As Worksheet
    Dim LL As Integer

For Each Ws In ThisWorkbook.Worksheets

    If Ws.Name = ("Remote") Then
    If Ws.Name = ("Database") Then

    Else

    Range("B13:G13").Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.Copy

    End If
End If

Next Ws

End Sub

edit : avec ça tu peux connaitre la fin de ton tableau, par le jeu du déplacement :

    Range("XFD1").Select
    Selection.End(xlDown).Select
    Selection.End(xlToLeft).Select
    Range("B1048576").Select
    fintab = Selection.End(xlUp).Row

la variable fintab récupére le numéro de ligne de la dernière ligne du tableau et tu peux créer ensuite dans ton code vba une adresse, exemple au lieu de B112 => "B" & fintab => qui renvoi B112

Nouvelle proposition à tester :

Sub test()

    Dim Ws As Worksheet
    Dim LL As Integer
    For Each Ws In ThisWorkbook.Worksheets
        If Ws.Name = ("Remote") Then
            If Ws.Name <> "Database" Then
                With Sheets("New attendance sheet")
                    LL = .Range("B" & .Range("Tableau13").Rows.Count + 12).End(xlUp).Row
                    .Range("B13:G" & LL).Copy
                End With
            End If
        End If
    Next Ws
End Sub

As-tu toujours le message ?

Bye !

Bonjour à tous,

Waard BRAVO. Votre code marche très bien. J'avais essayé avec l'enregistreur mais je n'arrivais pas à généraliser la formule....

C'est le problème avec Excel, on passe un temps fou pour résoudre des problèmes qui pour d'autres sont simples comme bonjour

Merci bcp en tout cas, et je vais faire un test aussi avec la méthode des déplacements.

GMB votre code m'envoie encore le message d'erreur.

Ma variable a pour lui 0 comme valeur.

J'ai l'impréssion que le problème ne vient pas tellement des commandes mais plutôt de la manière avec laquelle on indique à Excel où rechercher.

J'ai l''impression qu'il ne reconnait pas les noms des colonnes de tableau.

la ligne d'erreur est la suivante:

LL = .Range("B" & Range("Tableau13").Rows.Count + 12).End(xlUp).Row

En littéral cette ligne pourrait se treduire selon moi de la manière suivante:

LL = Regarde dans la colonne du tableau 13 située dans la colonne B de la feuille ==>Compte en partant du bas de cette colonne de tableau le nombre de cellules non vides et ajoute 12 pour les 12 premières lignes qui ne font pas partie du tableau.

C'est bien ça?

Encore merci pour votre aide!

Bonjour

David BS a écrit :

C'est bien ça?

Oui, c'est bien ça !

Ci-joint le fichier avec l'application.

Bye !

Merci à tous pour le coup de main en tout cas!

Rechercher des sujets similaires à "end xlup capricieux"