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

Ligne complètement vide avant copie

  • Initiateur de la discussion Initiateur de la discussion altinea
  • 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 !

altinea

XLDnaute Accro
bonjour le forum, je viens vers vous pour avoir une solution à mon souci. J'ai un code qui me permets de copier les informations d'un ligne vers une autres feuille dès qu'il rencontre la première ligne vide.
Après utilisation, mon souci est que les premièes cellules si elles ne sont pas remplies, le système doit considérer que la ligne est vide.
Ma question "comment faire afin que la copy se fasse si la ligne est entierement vide, s'il y a des cellules remplies dans la ligne, hop on cpy en dessous?"


Private Sub Valider_Click()
Sheets("Choix").Select
Range("a3:w3").Copy
Sheets("Liste").Select
Range("a" & Sheets("Liste").Range("a65536").End(xlUp).Row + 1).PasteSpecial Paste:=xlPasteValues
Sheets("Liste").Select
End Sub


merci pour votre aide
 
Re : Ligne complètement vide avant copie

Bonjour à tous


Tu peux utiliser Application.CountBlank pour compter les cellules vide et ainsi déterminer si ta ligne est complétement vide ou pas.

Voir exemple succinct ci-dessous
Code:
Sub exemple()
Rows(1) = Rnd
MsgBox Application.CountBlank(Rows(1))
Rows(1).Clear
MsgBox Application.CountBlank(Rows(1))
If Application.CountBlank(Rows(1)) = 256 Then
MsgBox "Ligne vide"
Else
MsgBox "Ligne non vide"
End If
End Sub

Je te laisse adapter pour l'utiliser avec ton code VBA.
 
Dernière édition:
Re : Ligne complètement vide avant copie

Merci Stapple1600,
si j'ai bien compris le fonctionnement de ton code, cela va me permettre de savoir si ma ligne est vide. Par contre comment mettre en forme la copie des informations copiées sur l'autre feuille sur la premiere ligne entièrement vide.
Car ce que je souhaite c'est effectivement cette vérification de ligne entièrement vide se fasse et me copie les infos automatiquement
merci encore pour ton aide
 
Re : Ligne complètement vide avant copie

Re

Avec un fichier joint (sans données confidentielles) , je pourrai tester un code VBA plus abouti avant de le soumettre ici.

A te relire donc avec un fichier Excel (plutôt un *.xls, car ici je ne dispose que Excel 2003) afin de pouvoir tester en condition "réelle".
 
Re : Ligne complètement vide avant copie

rE

A défaut d'exemple , voici un essai dans le "vide" car je dois aller déjeuner
'il faudra changer le nom des feuilles
Code:
Dim derligvide As Long
Sheets(1).Range("a3:w3").Copy
With Sheets(2)
    derligvide = IIf(Application.CountBlank(.Rows(65536).End(xlUp)) = 256, .[A65536].End(xlUp).Row, .[A65536].End(xlUp).Row + 1)
    .Cells(derligvide, "A").PasteSpecial Paste:=xlPasteValues
End With

A la réflexion, si tu recopie en colonne A de la feuille Liste,
La ligne renvoyée par (xlUp).Row+1 sera forcément vide, on peut donc simplifier ton code
Mais là on me gronde pour que je passe à table 😉

Je te laisse tester et repasse plus tard.
 
Re : Ligne complètement vide avant copie

bonjour le forum, Staple1600, je n'ai pu répondre plus tot j'ai eu un probleme de connection avec un débit de 3ko et un autre probleme de taille puisque le fichier que je joint maintenant faisant plus de 5 mo.
Voilà donc le fichier avec les explications si tu peux et tu veux bien y jeter un oeil merci
 

Pièces jointes

Re : Ligne complètement vide avant copie

Bonjour


Essaies ceci
Code:
Sub b()
If Not Application.CountBlank(Sheets("un").Range("a3:f3")) > 0 Then
Sheets("un").Range("a3:f3").Copy Sheets("deux").[A65536].End(xlUp)(2)
End If
End Sub
Si la plage a3:f3 n'est pas entièrement remplie alors la copie ne se fait pas
Si la plage est entièrement remplie, la copie se fait.

PS: Mais ai-je bien compris le souci? je n'en suis pas sur 😉
 
Re : Ligne complètement vide avant copie

Merci pour ta proposition,
en fait
sur la feuil("un") la copie peut se faire même si l'ensemble des cellules ne sont pas remplies
sur la feuill("deux") si la cellule de la colonne A est vide, l'enregistrement suivant vient remplacer celui ci
donc ce que je souhaiterai c'est que sur feui("deux"), dès lors qu'il y a une cellule remplies dans la zone concernée qu'elle soit considérée comme non vide et que l'enregistrement se fasse ligne suivante.
j'espère que je suis clair, mais c'est pas évident
merci encore
 
Re : Ligne complètement vide avant copie

Re

Essayes cette macro alors
Code:
Sub c()
Dim derlig&, ligder&
With Sheets("deux")
    ligder = .Cells.Find(What:="*", _
            After:=.Cells.Cells(1), _
            Lookat:=xlPart, _
            LookIn:=xlFormulas, _
            SearchOrder:=xlByRows, _
            SearchDirection:=xlPrevious, _
            MatchCase:=False).Row
End With
With Sheets("un")
    derlig = .Cells.Find(What:="*", _
            After:=.Cells.Cells(1), _
            Lookat:=xlPart, _
            LookIn:=xlFormulas, _
            SearchOrder:=xlByRows, _
            SearchDirection:=xlPrevious, _
            MatchCase:=False).Row
    .Cells(derlig, "A").Resize(, 6).Copy Sheets("deux").Cells(ligder, "A").Offset(1)
End With
End Sub
 
Re : Ligne complètement vide avant copie

Re

A la réflexion, c'est plus propre comme cela
Code:
Sub d()
Dim derlig, ligder
derlig = derligne("un")
ligder = derligne("deux")
Sheets("un").Cells(derlig, "A").Resize(, 6).Copy Sheets("deux").Cells(ligder, "A").Offset(1)
End Sub
Code:
Function derligne(NOMFEUILLE$) As Long
With Sheets(NOMFEUILLE)
    derligne = .Cells.Find(What:="*", _
            After:=.Cells.Cells(1), _
            Lookat:=xlPart, _
            LookIn:=xlFormulas, _
            SearchOrder:=xlByRows, _
            SearchDirection:=xlPrevious, _
            MatchCase:=False).Row
End With
End Function
 
Re : Ligne complètement vide avant copie

Bonjour,

Si j'ai bien compris ton souci, tu dois pouvoir t'en sortir avec ce code
Code:
Sub Copier_Click()
Dim DerLigVide As Long
    Worksheets("un").Range("A3:F3").Copy
    With Worksheets("deux")
        DerLigVide = .UsedRange.SpecialCells(xlCellTypeLastCell).Row + 1
        .Cells(DerLigVide, "A").PasteSpecial Paste:=xlPasteValues
        Application.CutCopyMode = False
    End With
End Sub

Cordialement.
 
Re : Ligne complètement vide avant copie

Bonjour à tous


Quelques propositions :

1. Inspiré par le modèle initial :​
VB:
Sub Copier_Click()
Dim DerLigVide As Long
    Sheets("un").Range("A3:F3").Copy
    With Sheets("deux")
        DerLigVide = .Range("A1").Offset(.Rows.Count - 1).End(xlUp).Row
        Do Until Application.CountBlank(.Cells(DerLigVide, 1).EntireRow) = .Columns.Count
            DerLigVide = DerLigVide + 1
        Loop
        .Cells(DerLigVide, "A").PasteSpecial Paste:=xlPasteValues
    End With
End Sub


2. On peut l'écrire aussi :​
VB:
Sub Copier_Click()
Dim k&, x As Range
    Sheets("un").Range("A3:F3").Copy
    With Sheets("deux")
        Set x = .Range("A1").Offset(.Rows.Count - 1).End(xlUp)
        Do
            k = k + 1
        Loop Until Application.CountBlank(x.Offset(k).EntireRow) = .Columns.Count
    End With
    x.Offset(k).PasteSpecial Paste:=xlPasteValues
End Sub


3. Et certainement beaucoup plus rapide :​
VB:
Sub Copier_Click()
Dim k&, x As Range
    With Sheets("deux")
        Set x = .Range("A1").Offset(.Rows.Count - 1).End(xlUp)
        Do
            k = k + 1
        Loop Until Application.CountBlank(x.Offset(k).EntireRow) = .Columns.Count
    End With
    With Sheets("un").Range("A3:F3")
        x.Offset(k).Resize(1, .Columns.Count).Value = .Value
    End With
End Sub


ROGER2327
#6258


Lundi 9 Phalle 139 (Godemiché, économe - fête Suprême Quarte)
2 Fructidor An CCXX, 6,6499h - millet
2012-W33-7T15:57:35Z
 
Re : Ligne complètement vide avant copie

rebonjour, je voulais ajouter dans le code une zone de plus à copier mais ça ne marche pas

Sub Copier_Click()
Dim k&, x As Range
With Sheets("deux")
Set x = .Range("A1").Offset(.Rows.Count - 1).End(xlUp)
Do
k = k + 1
Loop Until Application.CountBlank(x.Offset(k).EntireRow) = .Columns.Count
End With
With Sheets("un").Range("A3:F3,T3:W3") j'ai ajouté ce bout comme sur la version initiale que j'avais
x.Offset(k).Resize(1, .Columns.Count).Value = .Value
End With
End Sub


est ce que vous pourriez me dire comment faire, car là il ne copie que la première partie
merci encore pour la précision
 
Re : Ligne complètement vide avant copie

bonsoir le forum, staple1600, roger2327,
sur le code de staple1600, il prends compte effectivement les deux zones à copier, par contre il me copie les info à partir de la ligne 7000 et suivant
merci de m'aider encore
 
- 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
10
Affichages
718
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…