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