Boucle VBA et copie de données

Bonjour à tous,

Dans mon fichier, il y a une colonne avec des formules qui doit compléter une autre colonne où il n'y en a pas.

Cependant, cette 2eme colonne peut déjà contenir certaines informations. J'aimerais que lorsque cette colonne est vide, les valeurs de la 1ere colonne soient copiées/collées. Je n'ai besoin que des valeurs et non des formules.

Je ne suis pas un expert VBA mais j'ai quand même essayé de avant de demander votre aide...

Mais malheureusement, cela fait planter le fichier quand je la lance.

Je pense que ma boucle ne doit pas être correcte.

Sub test()

    'compteur
    FinLigne = WorksheetFunction.CountA(Range("A:A"))
    NumeroLigne = 4

    While NumeroLigne < FinLigne

    If Range("B" & NumeroLigne).Value = "" And Range("E" & NumeroLigne).Value <> "" Then Range("E" & NumeroLigne).Select
        Range("E" & NumeroLigne).Copy
        Range("B" & NumeroLigne).Select
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
        NumeroLigne = NumeroLigne + 1
    End If
    Wend

End Sub

J'ai également mis un fichier exemple, plus visuel, pour vous expliquer.

Merci à tous pour votre temps.

P.S : Désolé pour ce code certainement ridicule...

13pour-test.xlsm (13.93 Ko)

Bonjour McHel, bonjour le forum,

Essaie comme ça :

Sub Macro1()
finligne = WorksheetFunction.CountA(Range("A:A"))
For I = 2 To finligne
    If Cells(I, "B") = "" And Cells(I, "E").Value <> "" Then
        Cells(I, "E").Copy
        Cells(I, "B").PasteSpecial Paste:=xlPasteValues
    End If
Next I
Application.CutCopyMode = False
End Sub

Évite autant que tu le peux les Select inutiles qui ne font que ralentir l'exécution du code et sont source de bugs...

Bonjour,

Une solution :

Sub test()

' Calcul dernière ligne
DerniereLigne = Range("A" & Rows.Count).End(xlUp).Row

' Boucle
For Ligne = 2 To DerniereLigne
    ' Si "B" est vide alors "B" = "E"
    If Range("B" & Ligne).Value = "" Then Range("B" & Ligne).Value = Range("E" & Ligne).Value
Next Ligne

End Sub

N'hésite pas si t'as des questions,

RemBabar

Bonjour

Essaie ça :

Option Explicit

Dim FinLigne&, NumeroLigne&

Sub Compléter()
    Application.ScreenUpdating = False
    FinLigne = Range("A" & Rows.Count).End(xlUp).Row
    For NumeroLigne = 2 To FinLigne
        If Range("B" & NumeroLigne) = "" Then
            Range("E" & NumeroLigne).Copy
            Range("B" & NumeroLigne).PasteSpecial Paste:=xlPasteValues
        End If
    Next NumeroLigne
    Application.CutCopyMode = False
End Sub

Bye !

Merci à tous !

J'ai testé vos 3 solutions et elles marchent toutes !

C'était vraiment très sympa de votre part. Je suis juste un peu déçu car je me rends compte que je n'étais pas très loin de trouver tout seul. Tant pis ce sera pour une prochaine fois...

Encore merci

Rechercher des sujets similaires à "boucle vba copie donnees"