VBA autofill à partir de la dernière cellule non vide

miliev83

XLDnaute Occasionnel
Bonjour à tous,

Je sèche sur ma macro après plusieurs recherches...

J'ai 2 colonne : À et B
Je souhaite tirer le texte qui se trouve sur la dernière cellule non vide de la colonne B jusqu'à la dernière cellule de la colonne À

Le Problème c'est que la dernière cellule non vide de la colonne B n'est jamais la même

Actuellement pour la détecter j'utilise :
Cells (range ("B65536").end(xlup).row + 1,2).select

Mais je n'arrive pas à étendre le texte à pârtir de là. ..

Merci d'avance à ceux qui réfléchiront à mon problème
 

DoubleZero

XLDnaute Barbatruc
Re : VBA autofill à partir de la dernière cellule non vide

Bonjour, miliev83, le Forum

Comme ceci ?

Code:
Option Explicit
Sub D_ici_à_là()
    Cells(Range("B65536").End(xlUp).Row + 1, 2).Name = "ici"
    Cells(Range("a65536").End(xlUp).Row, 2).Name = "là"
    With [ici:là]
        .FormulaR1C1 = "=R[-1]C"
        .Value = .Value
    End With
    ActiveWorkbook.Names("ici").Delete: ActiveWorkbook.Names("là").Delete
End Sub

A bientôt :)
 

Efgé

XLDnaute Barbatruc
Re : VBA autofill à partir de la dernière cellule non vide

Bonjour miliev83, Bonjour 00 :)

Pour le plaisir de croiser 00 :) et pour le fun En une (grande) ligne
VB:
Option Explicit
Sub Pour_le_fun()
Range(Cells(Range("B65536").End(xlUp).Row , 2), Cells(Range("a65536").End(xlUp).Row, 2)).Formula = Cells(Range("B65536").End(xlUp).Row, 2).Formula
End Sub

Cordialement
 
Dernière édition:

miliev83

XLDnaute Occasionnel
Re : VBA autofill à partir de la dernière cellule non vide

Merci pour vos réponses, mais cela ne semble pas fonctionner avec mon début de macro.

En fait ce que je fais c'est que je filtre et copie colle des données (colonne A ) de ma feuil1 plusieurs fois dans ma feuil2

A chaque copie correspond un nom et un pays different que je saisie à la main et tire jusqu'à la dernière ligne non vide coller et ainsi dessuite pour tout mes filtres.


Sheets("FEUIL1").Select*
ActiveSheet.Range("$A$1:$BT$500").AutoFilter Field:=6, Criteria1:="<>"*
* * Range("A2").Select*
* * Range(Selection, Selection.End(xlDown)).Select*
* * Selection.Copy*
* * Sheets("Feuil2").Select*
* * Range("A2").Select*
* * Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _*
* * * * :=False, Transpose:=False*
* * Range("C2").Select*
* * ActiveCell.FormulaR1C1 = "FRANCOIS"*
*DernLigne = Range("A" & Rows.Count).End(xlUp).Row*
Range("C2").AutoFill Destination:=Range("C2:C" & DernLigne)*
Range("E2").Select*
* * ActiveCell.FormulaR1C1 = "ALLEMAGNE"*
*DernLigne = Range("A" & Rows.Count).End(xlUp).Row*
Range("E2").AutoFill Destination:=Range("E2:E" & DernLigne)*

Sheets("FEUIL1").Select*
ActiveSheet.ShowAllData*
* * ActiveSheet.Range("$A$1:$BT$500").AutoFilter Field:=12, Criteria1:="<>"*
* * Range("A2").Select*
* * Range(Selection, Selection.End(xlDown)).Select*
* * Selection.Copy*
* * Sheets("Feuil2").Select*
Range("A" & Cells(Rows.Count, "A").End(xlUp).Row + 1).PasteSpecial xlPasteValues*
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _*
* * * * :=False, Transpose:=False*
Cells(Range("C65536").End(xlUp).Row + 1, 3).Select*
ActiveCell.FormulaR1C1 = "ITALIE"*

Et la je dois tirer jusqua la derniere cellule non vide de la colonne A et c'est là où je bloque !!!

Merci encore
 

gosselien

XLDnaute Barbatruc
Re : VBA autofill à partir de la dernière cellule non vide

Bonjour le forum, °° ou 00 , efgé,

alors ....
5 – La possibilité de joindre des fichiers est donnée sur ce forum. Ne pas hésiter à utiliser cette fonction, tout en veillant que les données soient bidons et donc qu’aucune donnée confidentielle, nominative ne soit dans le fichier.

P.

 

miliev83

XLDnaute Occasionnel
Re : VBA autofill à partir de la dernière cellule non vide

La méthode est

Je ferais toujours 6 filtres dans le même ordre, c'est pourquoi je souhaite que une fois les articles copiés dans la 2eme feuille, le nom et le contrat soit saisie automatiquement et tirer vers le bas jusqu'au dernier articles qui est concerné.

Et cela pour chaque filtre...

merci
 
Dernière édition:

Efgé

XLDnaute Barbatruc
Re : VBA autofill à partir de la dernière cellule non vide

Bonjour miliev83, Bonjour 00 :)

Bon, le fichier n'a rien à voir avec la demande initialle....
Je ne sais pas le faire par filtre.
Je propose un code, peut être complexe, mais qui semble donner le résultat attendu.
Je pense que ton exemple comporte une erreur (voir mon annotation en feuille Base de données)
VB:
Sub test()
Dim i&, j&, TReportRw&
Dim DNoms As Object
Dim TData As Variant, TReport As Variant, Tmp As Variant
Set DNoms = CreateObject("Scripting.dictionary")

TReportRw = 1
With Sheets("Base de données")
    TData = .Range(.Cells(1, 1), .Cells(.Cells(.Rows.Count, 1).End(3).Row, .Cells(1, .Columns.Count).End(1).Column))
End With

ReDim TReport(1 To UBound(TData, 1) * UBound(TData, 2), 1 To UBound(TData, 2) + 3)
TReport(1, 1) = "Article"
TReport(1, 2) = "N° Contrat"
TReport(1, 3) = "Nom"

For j = 2 To UBound(TData, 2)
    Tmp = Split(Trim(TData(1, j)), " - ")
    If Not DNoms.Exists(Tmp(1)) Then DNoms(Tmp(1)) = j + 2
    TReport(1, DNoms(Tmp(1))) = Tmp(1)
    For i = 2 To UBound(TData, 1)
        If TData(i, j) <> "" And TData(i, j) > 0 Then
            Tmp = Split(Trim(TData(1, j)), " - ")
            TReportRw = TReportRw + 1
            TReport(TReportRw, 1) = TData(i, 1)
            TReport(TReportRw, 2) = Tmp(0)
            TReport(TReportRw, 3) = Tmp(1)
            TReport(TReportRw, DNoms(Tmp(1))) = TData(i, j)
        End If
    Next i
Next j

With Sheets("Ce que je veux faire") 'Adapter le nom de la feuille d'arrivée
    .UsedRange.ClearContents
    .Cells(1, 1).Resize(TReportRw, DNoms.Count + 3) = TReport
End With

End Sub
Cordialement
 

Pièces jointes

  • Classeur1(2).xlsm
    21 KB · Affichages: 42
  • Classeur1(2).xlsm
    21 KB · Affichages: 33
Dernière édition:

Efgé

XLDnaute Barbatruc
Re : VBA autofill à partir de la dernière cellule non vide

Re à toutes, Bonjour Gosselin ;-)

Avec les 0 (certainement optimisable) :
VB:
Sub test_2()
Dim i&, j&, K&, TReportRw&
Dim DNoms As Object
Dim TData As Variant, TReport As Variant, Tmp As Variant

Set DNoms = CreateObject("Scripting.dictionary")
TReportRw = 1

With Sheets("Base de données")
    TData = .Range(.Cells(1, 1), .Cells(.Cells(.Rows.Count, 1).End(3).Row, .Cells(1, .Columns.Count).End(1).Column))
End With

ReDim TReport(1 To UBound(TData, 1) * UBound(TData, 2), 1 To UBound(TData, 2) + 3)
TReport(1, 1) = "Article"
TReport(1, 2) = "N° Contrat"
TReport(1, 3) = "Nom"

For j = 2 To UBound(TData, 2)
    Tmp = Split(Trim(TData(1, j)), " - ")
    If Not DNoms.Exists(Tmp(1)) Then DNoms(Tmp(1)) = j + 2
    TReport(1, DNoms(Tmp(1))) = Tmp(1)
    For i = 2 To UBound(TData, 1)
        If TData(i, j) <> "" And TData(i, j) > 0 Then
            Tmp = Split(Trim(TData(1, j)), " - ")
            TReportRw = TReportRw + 1
            TReport(TReportRw, 1) = TData(i, 1)
            TReport(TReportRw, 2) = Tmp(0)
            TReport(TReportRw, 3) = Tmp(1)
            For K = 4 To UBound(TReport, 2)
                TReport(TReportRw, K) = 0
            Next K
            TReport(TReportRw, DNoms(Tmp(1))) = TData(i, j)
        End If
    Next i
Next j

With Sheets("Ce que je veux faire") 'Adapter le nom de la feuille d'arrivée
    .UsedRange.ClearContents
    .Cells(1, 1).Resize(TReportRw, DNoms.Count + 3) = TReport
End With

End Sub
Cordialement
 

Efgé

XLDnaute Barbatruc
Re : VBA autofill à partir de la dernière cellule non vide

Re

Mieux:
VB:
Sub test_2()
Dim i&, j&, K&, TReportRw&
Dim DNoms As Object
Dim TData As Variant, TReport As Variant, Tmp As Variant

Set DNoms = CreateObject("Scripting.dictionary")
TReportRw = 1

With Sheets("Base de données")
    TData = .Range(.Cells(1, 1), .Cells(.Cells(.Rows.Count, 1).End(3).Row, .Cells(1, .Columns.Count).End(1).Column))
End With

ReDim TReport(1 To UBound(TData, 1) * UBound(TData, 2), 1 To UBound(TData, 2) + 3)
TReport(1, 1) = "Article"
TReport(1, 2) = "N° Contrat"
TReport(1, 3) = "Nom"

For j = 2 To UBound(TData, 2)
    Tmp = Split(Trim(TData(1, j)), " - ")
    If Not DNoms.Exists(Tmp(1)) Then DNoms(Tmp(1)) = j + 2
    TReport(1, DNoms(Tmp(1))) = Tmp(1)
    For i = 2 To UBound(TData, 1)
        If TData(i, j) <> "" And TData(i, j) > 0 Then
            TReportRw = TReportRw + 1
            TReport(TReportRw, 1) = TData(i, 1)
            TReport(TReportRw, 2) = Tmp(0)
            TReport(TReportRw, 3) = Tmp(1)
            For K = 4 To UBound(TReport, 2)
                TReport(TReportRw, K) = IIf(K = DNoms(Tmp(1)), TData(i, j), 0)
            Next K
        End If
    Next i
Next j

With Sheets("Ce que je veux faire") 'Adapter le nom de la feuille d'arrivée
    .UsedRange.ClearContents
    .Cells(1, 1).Resize(TReportRw, DNoms.Count + 3) = TReport
End With

End Sub

C'est mon dernier mot Jean-Pierre

Cordialement
 

Efgé

XLDnaute Barbatruc
Re : VBA autofill à partir de la dernière cellule non vide

Bonjour miliev83, le fil, le forum

Dans la macro Test_2, il faut remplacer
VB:
If Not DNoms.Exists(Tmp(1)) Then DNoms(Tmp(1)) = j + 2
Par
VB:
If Not DNoms.Exists(Tmp(1)) Then DNoms(Tmp(1)) = DNoms.Count + 4

J'aurais dû le faire tout de suite d'ailleurs....

Cordialement
 

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
312 206
Messages
2 086 203
Membres
103 157
dernier inscrit
youma