VBA copier/coller si cellules vides

Bonjours à tous. C'est énorme le nombre de sujet qui existe sur copier coller en VBA. Toutefois je n'ai pas trouvé de solution à mon problème qui me semblait pourtant simple à résoudre.

Je cherche un moyen en VBA pour copier coller les valeurs de plusieures colonnes vers d'autres colonnes si et uniquement si ces dernières sont vides.

Exemple: je souhaite coller ou récupérer la valeur des cellules des ligne 6 à 58 des colonnes 3, 5, 7, 9, 11 et 12 vers les colonnes 20, 22, 24, 26, 28, 30, des mêmes lignes mais uniquement si les cellules de ces dernières colonnes sont vides.

Pourtant simple. Merci pour votre coup de main.

J'utilise ce début de code mais il ne gère pas si les cellules des colonnes de destination sont vide ou pas. Il colle le tout.

Sub CopierValeurs()
' La Source sont les colonnes ac ae ag ai... et la Destination les colonnes be bg bi bk... si elles sont vides
Feuil1.Range("Be6:Be58").Value = Feuil1.Range("ac6:ac58").Value
Feuil1.Range("Bg6:Bg58").Value = Feuil1.Range("ae6:ae58").Value
Feuil1.Range("Bi6:Bi58").Value = Feuil1.Range("ag6:ag58").Value
Feuil1.Range("Bk6:Bk58").Value = Feuil1.Range("ai6:ai58").Value
Feuil1.Range("Bm6:Bm58").Value = Feuil1.Range("ak6:ak58").Value
Feuil1.Range("Bo6:Bo58").Value = Feuil1.Range("am6:am58").Value
Feuil1.Range("Bq6:Bq58").Value = Feuil1.Range("ao6:ao58").Value
Feuil1.Range("Bs6:Bs58").Value = Feuil1.Range("aq6:aq58").Value
Feuil1.Range("Bu6:Bu58").Value = Feuil1.Range("as6:as58").Value
Feuil1.Range("Bw6:Bw58").Value = Feuil1.Range("au6:au58").Value

  MsgBox " Copie Effectuée ..."
End Sub

Bonjour,

Vous avez tout ce qu'il faut ici

https://www.excel-pratique.com/fr/vba/conditions

@+

Merci pour ta réponse et pour la révision de cours. Malheureusement j'ai déjà lu 4x le cours sur les If, et les variables, les conditions mais je n'y arrive pas.

J'ai bourré ma macro de if de then de else et de end if, mais rien à faire, ça beeg tout le temps. Il faut savoir bien les placer et les fermer.

Voici ce que j'avais déjà réaliser dans mon code, une vraie usine à gaz pour pas grand chose...

Sub CopierValeurs()
' La Source sont les colonnes ac ae ag ai... et la Destination les colonnes be bg bi bk... si elles sont vides
If Feuil1.Range("Be6:Be58").Value = "" Then Feuil1.Range("Be6:Be58").Value = Feuil1.Range("ac6:ac58").Value

If Feuil1.Range("Bg6:Bg58").Value = "" Then Feuil1.Range("Bg6:Bg58").Value = Feuil1.Range("ae6:ae58").Value

If Feuil1.Range("Bi6:Bi58").Value = "" Then Feuil1.Range("Bi6:Bi58").Value = Feuil1.Range("ag6:ag58").Value

If Feuil1.Range("Bk6:Bk58").Value = "" Then Feuil1.Range("Bk6:Bk58").Value = Feuil1.Range("ai6:ai58").Value

If Feuil1.Range("Bm6:Bm58").Value = "" Then Feuil1.Range("Bm6:Bm58").Value = Feuil1.Range("ak6:ak58").Value

If Feuil1.Range("Bo6:Bo58").Value = "" Then Feuil1.Range("Bo6:Bo58").Value = Feuil1.Range("am6:am58").Value

If Feuil1.Range("Bq6:Bq58").Value = "" Then Feuil1.Range("Bq6:Bq58").Value = Feuil1.Range("ao6:ao58").Value

If Feuil1.Range("Bs6:Bs58").Value = "" Then Feuil1.Range("Bs6:Bs58").Value = Feuil1.Range("aq6:aq58").Value

If Feuil1.Range("Bu6:Bu58").Value = "" Then Feuil1.Range("Bu6:Bu58").Value = Feuil1.Range("as6:as58").Value

If Feuil1.Range("Bw6:Bw58").Value = "" Then Feuil1.Range("Bw6:Bw58").Value = Feuil1.Range("au6:au58").Value

End If
  MsgBox " Copie Effectuée ..."

End Sub

Si la valeur des cellules des secondes colonnes sont égale à rien, (donc vides), tu me copies les valeurs des colonnes en amont, sinon tu ne touche à rien, pas de copier coller.

Je viens même à l'instant de vouloir simplifier le tout, mais ça ne donne toujours rien.

Sub CopierValeurs()
' La Source est Feuil3 (Planning) et la Destination est Feuil1 (GTA)
  If Feuil1.Range("Be6:Be58"; "Bg6:Bg58"; "Bi6:Bi58"; "Bk6:Bk58"; "Bm6:Bm58"; "Bo6:Bo58"; "Bq6:Bq58"; "Bs6:Bs58"; "Bu6:Bt58"; "Bw6:Bw58").Value = "" Then

  Feuil1.Range("Be6:Be58").Value = Feuil1.Range("ac6:ac58").Value
  Feuil1.Range("Bg6:Bg58").Value = Feuil1.Range("ae6:ae58").Value
  Feuil1.Range("Bi6:Bi58").Value = Feuil1.Range("ag6:ag58").Value
  Feuil1.Range("Bk6:Bk58").Value = Feuil1.Range("ai6:ai58").Value
  Feuil1.Range("Bm6:Bm58").Value = Feuil1.Range("ak6:ak58").Value
  Feuil1.Range("Bo6:Bo58").Value = Feuil1.Range("am6:am58").Value
  Feuil1.Range("Bq6:Bq58").Value = Feuil1.Range("ao6:ao58").Value
  Feuil1.Range("Bs6:Bs58").Value = Feuil1.Range("aq6:aq58").Value
  Feuil1.Range("Bu6:Bu58").Value = Feuil1.Range("as6:as58").Value
  Feuil1.Range("Bw6:Bw58").Value = Feuil1.Range("au6:au58").Value
  End If

  MsgBox " Copie Effectuée ..."
End Sub

erreur, erreur, erreur, erreur, erreur, erreur, erreur, erreur, erreur, ...

Même ce simple code je n'arrive pas à le faire fonctionner.

Sub CopierValeurs()

If Range("Bg6:Bg58").Value = "" Then Range("Bg6:Bg58").Value = Range("ae6:ae58").Value

End Sub

ça me met "erreur d’exécution '13' . If Range("Bg6:Bg58").Value = "" Then Range("Bg6:Bg58").Value = Range("ae6:ae58").Value

Nom problème est résolue grâce à xorsankukai qui m'a concocté un superbe code vba.

Ce code copier/colle les valeurs des plusieurs colonnes vers une série identique de colonnes sur la même page en respectant 3 critères:
- copier les valeurs des colonnes avec un intervalle de 1/2 (step2)
- coller que si les cellules de destination sont vides
- copier/coller aussi les colonnes de destination vers les colonnes initiales si vide.

Voici le code pour ceux à qui ça pourrait intéresser
Sub CopierValeurs()
 Dim lig%, col%

  Application.ScreenUpdating = False
  Application.Calculation = xlCalculationManual

  With Sheets("Feuil1")
   .Unprotect "333"
     For lig = 6 To 58
      For col = 29 To 47 Step 2
       .Cells(lig, col + 28) = IIf(.Cells(lig, col + 28) = "", .Cells(lig, col), .Cells(lig, col + 28))
       .Cells(lig, col) = IIf(.Cells(lig, col) = "", .Cells(lig, col + 28), .Cells(lig, col))
      Next col
     Next lig
   .Protect "333"
  End With

  Application.ScreenUpdating = True
  Application.Calculation = xlCalculationAutomatic
End Sub
Merci BrunoM45.

Cordialement,

LionSleep

Rechercher des sujets similaires à "vba copier coller vides"