Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Microsoft 365 VBA coller valeur sur la première ligne vide

  • Initiateur de la discussion Initiateur de la discussion raf26
  • Date de début Date de début

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 !

raf26

XLDnaute Occasionnel
Bonjour le forum,

J'ai besoin de votre aide pour une macro

Je souhaite copier / coller les valeurs (seulement les valeurs) d'une sélection dans la première ligne vide d'un tableau MAIS à partir de la colonne B (la colonne A de ce tableau sera complétée manuellement).

Je précise que les valeurs C5:I5 de la feuille Donnees seront supprimées par une autre macro après la copie.

Ci-joint un fichier test (aucune macro)

Merci d'avance et bon week-end de Pâques à vous.

Cordialement
 

Pièces jointes

Dernière édition:
Solution
Bonsoir,
Une table structurée n'a pas vocation a être limitée et comme le dit @job75 (que je salue ) à avoir des lignes vides .
Votre objectif semble de vouloir garder un nombre de lignes fixe, c'est votre choix
mais n'effectuez pas la macro trop de fois, le tableau va être vite rempli .
VB:
Option Explicit
Sub Importer()
Dim Wsd As Worksheet, Line As Range, Target As Range
Dim Lr As Long, Dt As Long
    Set Wsd = Worksheets("donnees")
        Lr = Wsd.Cells(Wsd.Rows.Count, "C").End(xlUp).Row
        Dt = [Import[#Headers]].Row
        For Each Line In Wsd.Range("C5:I" & Lr).Rows
            Set Target = [Import[Nom]].Find("", LookIn:=xlValues, lookat:=xlWhole)
            If Not Target Is Nothing Then...
Bonjour
code adapté :
VB:
Sub Importer()
Dim Wsd As Worksheet
Dim Lr As Long, K As Long
    Set Wsd = Worksheets("donnees")
        Lr = Wsd.Cells(Wsd.Rows.Count, "C").End(xlUp).Row
        For Each Line In Wsd.Range("C5:I" & Lr).Rows
            K = [Import].ListObject.ListRows.Add.Index
            [Import].Cells(K, 2).Resize(, 7) = Line.Value
        Next
    Set Wsd = Nothing
End Sub
 
Bonjour fanch55

Merci pour ton retour, marche nickel sur mon fichier test.

Par contre, j'avais mal expliqué le tableau de destination (Import) dans ce fichier test.

Sur mon fichier réel, le tableau Import est déjà dimensionné, du coup la macro bloque

Ci-joint le fichier test modifié qui ressemble plus à mon fichier réel

Cordialement
 

Pièces jointes

Bonsoir raf26, fanch55,

Les tableaux structurés ne sont pas faits pour fonctionner avec des lignes entièrement vides.

Mais bon vous pouvez toujours utiliser cette macro :
VB:
Sub Importer()
Dim c As Range
With [Import]
    Set c = .Columns(2).Find("*", , xlValues, , , xlPrevious)
    With Sheets("Donnees").[C4].CurrentRegion.Resize(, 7)
        If .Rows.Count > 1 Then c(2).Resize(, 7) = .Rows(2).Resize(.Rows.Count - 1).Value
    End With
    .Parent.Activate 'facultatif
End With
End Sub
A+
 
Bonsoir,
Une table structurée n'a pas vocation a être limitée et comme le dit @job75 (que je salue ) à avoir des lignes vides .
Votre objectif semble de vouloir garder un nombre de lignes fixe, c'est votre choix
mais n'effectuez pas la macro trop de fois, le tableau va être vite rempli .
VB:
Option Explicit
Sub Importer()
Dim Wsd As Worksheet, Line As Range, Target As Range
Dim Lr As Long, Dt As Long
    Set Wsd = Worksheets("donnees")
        Lr = Wsd.Cells(Wsd.Rows.Count, "C").End(xlUp).Row
        Dt = [Import[#Headers]].Row
        For Each Line In Wsd.Range("C5:I" & Lr).Rows
            Set Target = [Import[Nom]].Find("", LookIn:=xlValues, lookat:=xlWhole)
            If Not Target Is Nothing Then
                [Import[Nom]].Rows(Target.Row - Dt).Resize(, 7) = Line.Value
            Else
                MsgBox "Il n'y a plus de place pour importer !!!", vbCritical
            End If
        Next
    Set Wsd = Nothing
End Sub

Par ailleur, la formule de la colonne Total pour ne pas afficher de zéro non voulu, peut-être modifiée ainsi:
=SI(NBVAL(IMPORT[@[Poires]:[Abricot]])>0;SOMME(IMPORT[@[Poires]:[Abricot]]);"")

et la validation de la colonne Contrôle Commande peut être simplifiée dans votre cas :
 
- 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

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…