VBA - Utiliser la dernière ligne

Bonjour,

J'essaie d'utiliser la dernière ligne de mon document pour l'application de divers traitements.

Cette dernière ligne est variable, aussi, j'aimerais qu'Excel aille la trouver avant de procéder aux autres calculs.

J'utilise cette formulation :

Private Sub CommandButton1_Click()

Dim h As Long
Dim g As Long

h = Sheets("CSV").Cells(Rows.Count, "AH").End(xlUp).Row
g = Sheets("VNEI (EI)").Cells(Rows.Count, "B").End(xlUp).Row

Sheets("VNEI (EI)").Cells(3, 2, Cells(g, 2)).Value = Sheets("CSV").Cells(2, 34, Cells(h, 34)).Value

J'ai laissé la première ligne de code qui consiste tout simplement à copier/coller des valeurs d'une colonne à une autre. Si vous m'aidez à faire fonctionner celle-ci, normalement je devrais être en mesure de faire fonctionner le reste...

J'ai ce message d'erreur qui apparaît "Nombre d'arguments incorrect ou affectation de propriété incorrecte".

Je vais avoir besoin de faire référence à la dernière ligne assez régulièrement, visiblement je ne m'y prends pas comme il faut et aimerais corriger ça.

Merci de votre attention.

Bonne journée !

Bonjour,

quand tu mets

Cells(3, 2, Cells(g, 2)).Value

il y a en effet un argument en trop !

cela doit s'écrire :

Cells( la_ligne , la_colone )

essaie

for i=3 to g
Sheets("VNEI (EI)").Cells(i, 2).Value = Sheets("CSV").Cells(i-1, 34).Value
next

Bonjour,

J'essaie d'indiquer de la cellule B3 Cells(3, 2 à la cellule B"dernière ligne". , Cells(g, 2)).

Ah en effet ! Je teste ça. (Pour le moment ça fait crash Excel).

Bonjour,

J'essaie d'indiquer de la cellule B3 Cells(3, 2 à la cellule B"dernière ligne". , Cells(g, 2)).

pour sélectionner ou copier une zone, elle peut se définir comme suit :

Range(Cells(3,2), Cells(g,2))

J'ai testé uniquement ce que vous proposez, en supprimant le reste du code , les cellules restent vides.

C'est bon ça marche très bien !

g désignais la dernière ligne de la feuille où viennent se coller les valeurs. Excel ne faisait que coller du vide.

h correspond bien à la feuille d'où les valeurs proviennent et là, le copier/collage se fait bien.

Finalement, une partie du reste ne semble pas fonctionner avec cette solution.

J'ai utilisé deux formulations pour le code :

Dim h As Long, g As Long, l As Long, m As Long

    h = Sheets("CSV").Cells(Rows.Count, "AH").End(xlUp).Row

    For l = 2 To h
        Sheets("VNEI (EI)").Cells(l, 2).Value = Sheets("CSV").Cells(l - 1, 34).Value

    g = Sheets("VNEI (EI)").Cells(Rows.Count, 2).End(xlUp).Row
           Sheets("VNEI (EI)").Range(Cells(g, 2), Cells(3, 2)).RemoveDuplicates 'Columns:=2, Header:=xlNo

    Next

Et

Dim h As Long, g As Long, l As Long, m As Long

    h = Sheets("CSV").Cells(Rows.Count, "AH").End(xlUp).Row

    For l = 2 To h
        Sheets("VNEI (EI)").Cells(l, 2).Value = Sheets("CSV").Cells(l - 1, 34).Value

    g = Sheets("VNEI (EI)").Cells(Rows.Count, 2).End(xlUp).Row

    For m = g To 3 Step -1
       Sheets("VNEI (EI)").Cells(m, 2).RemoveDuplicates

    Next
    Next

Les doublons ne veulent pas se supprimer.

Si la discussion ne porte plus tout à fait sur le même sujet, je peut clore celle-ci.

Mets a minima un fichier simplifié ... car en effet maintenant il s'agit aussi de ne pas dupliquer des valeurs si je comprends bien !

Le voici

Effectivement, j'ai opté pour la solution de copier les valeurs d'une feuille à l'autre, puis de supprimer les doublons.

A partir de ces données épurées, je lance des recherches entre les deux feuilles.

Bonjour,

Bonjour Steelson,

Une proposition à étudier.

Cdlt.

Private Sub CommandButton1_Click()
Dim ws As Worksheet, ws2 As Worksheet
Dim rng As Range, Cell As Range
Dim n As Long, n2 As Long

    Application.ScreenUpdating = False

    Set ws = Worksheets("CSV")
    Set ws2 = Worksheets("VNEI (EI)")

    With ws
        n = .Cells(.Rows.Count, 34).End(xlUp).Row   'AH
        Set rng = .Cells(2, 34).Resize(n - 1)
    End With

    With ws2
        n2 = .Cells(.Rows.Count, 2).End(xlUp).Row + 1
        Set Cell = .Cells(n2, 2)
    End With

    rng.Copy Destination:=Cell

    With ws2
        n2 = .Cells(.Rows.Count, 2).End(xlUp).Row   'B
        Set rng = .Cells(2, 2).Resize(n2 - 1)
    End With

    rng.RemoveDuplicates Columns:=1, Header:=xlYes

End Sub

Bonjour,

Cette solution fonctionne très bien visiblement !

Il y a deux éléments que je ne comprends pas :

  • Cell As Range utilisé ensuite: rng.Copy Destination:=Cell
  • .Resize(n - 1)

A quoi servent t-ils ?

En tout cas merci pour l'aide !

Re,

Voir ci-dessous la procédure commentée.

Pour plus d'informations sur Resize et Copy, sur le web, faire une recherche sur :

Range.Resize et Range.Copy

Private Sub CommandButton1_Click()
'déclaration des variables
Dim ws As Worksheet, ws2 As Worksheet
Dim rng As Range
Dim Cell As Range
Dim n As Long, n2 As Long

    Application.ScreenUpdating = False
    'initialisation des variables
    Set ws = Worksheets("CSV")
    Set ws2 = Worksheets("VNEI (EI)")

    With ws
        'dernière ligne non vide de la colonne AH (34)
        n = .Cells(.Rows.Count, 34).End(xlUp).Row
        'plage à copier sans l'en-tête de colonne
        Set rng = .Cells(2, 34).Resize(n - 1)
    End With

    With ws2
        'dernière ligne non vide de la colonne B (2)
        n2 = .Cells(.Rows.Count, 2).End(xlUp).Row + 1
        'cellule de destination de la copie de rng
        Set Cell = .Cells(n2, 2)
    End With

    rng.Copy Destination:=Cell

    With ws2
        'dernière ligne non vide de la colonne B (2)
        n2 = .Cells(.Rows.Count, 2).End(xlUp).Row   'B
        'plage de cellules avec en-tête pour supprimer les doublons
        Set rng = .Cells(2, 2).Resize(n2 - 1)
    End With
    'suppression des doublons
    rng.RemoveDuplicates Columns:=1, Header:=xlYes

End Sub

Bonjour,

Bonjour Steelson,

Une proposition à étudier.

Bonjour Jean-Eric

je te laisse la main (ce n'est pas trop ma tasse de thé)

Bonsoir,

J'ai utilisé votre proposition et m'en suis inspiré pour simplifier la lecture de tout le reste du code, merci encore pour la solution et les explications !

Bonne soirée !

Rechercher des sujets similaires à "vba utiliser derniere ligne"