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

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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
 
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 🙂
 
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:
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
 
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.

 
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:
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

Dernière édition:
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
 
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
 
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
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
4
Affichages
208
Retour