Actuellement je suis en train de travailler sur une petite macro (boucle) voici l'extrait qui me pose soucis :
If [Worksheets("CDC").Range("B" & iteration)<>""] Then
Worksheets("CDC").Range("B" & iteration).Copy (Worksheets("Feuil1").Range("B" & celluleArrivee))
Else
Worksheets("Feuil1").Range("B" & celluleArrivee) = "N/A"
End If
iteration et celluleArrivee sont des variable qui s'incrémente à chaque passage de la boucle.
Mon but serait que si dans ma feuille CDC la cellule B1 (par exemple) est vide alors il m'affiche "N/A" dans la feuille d'arrivée, sinon il copie colle la cellule.
Le copier coller fonctionner l'écriture fonctionne, mais je ne comprend pas pourquoi la condition ne fonctionne pas... (erreur 13)
J'ai essayé aussi de cette manière :
IF [Not(IsEmpty(Worksheets("CDC").Range("B"& iteration")))] Then...
Le but étant de faire comme avec la fonction estvide() de excel qui fonctionne très bien mais de l'adapter au progamme boucle pour ne pas avoir à le répéter un nombre incalculable de fois
Ton code ne propose pas de boucle ?!... Essaie peut-être comme ça :
VB:
Sub Macro1()
Dim OS As Worksheet 'déclare la vartiable OS (Onglet Source)
Dim OD As Worksheet 'déclare la vartiable OD (Onglet Destination)
Dim DL As Long 'déclare la vartiable DL (Dernière Ligne)
Dim PLV As Long 'déclare la vartiable OS (Première Ligne Vide)
Dim I As Long 'déclare la vartiable I (Incrément)
Set OS = Worksheets("CDC") 'définit l'onglet source OS
Set OD = Worksheets("Feuil1") 'définit l'onglet destination OD
DL = OS.Cells(Application.Rows.Count, "B").End(xlUp).Row 'définit la dernière ligne éditée DL de la colonne B de l'onglet source
For I = 2 To DL 'boucle des lignes 2 DL
PLV = OD.Cells(Application.Rows.Count, "B").End(xlUp).Row + 1 'définit la première ligne vide de la colonne B de l'onglet destination
If OS.Cells(I, "B") <> "" Then 'condition : si la celllule ligne I colonne B de l'onglet source n'est pas vide
OS.Cells(I, "B").Copy OD.Cells(PLV, "B") 'copy la cellule dans la première cellule vide de la colonne B de l'onglet destination
Else 'sinon
OD.Cells(PLV, "B").Value = "N/A" 'écrit "N/A"
End If 'fin de la condition
Next I 'prochaine ligne de la boucle
End Sub
Ton code ne propose pas de boucle ?!... Essaie peut-être comme ça :
VB:
Sub Macro1()
Dim OS As Worksheet 'déclare la vartiable OS (Onglet Source)
Dim OD As Worksheet 'déclare la vartiable OD (Onglet Destination)
Dim DL As Long 'déclare la vartiable DL (Dernière Ligne)
Dim PLV As Long 'déclare la vartiable OS (Première Ligne Vide)
Dim I As Long 'déclare la vartiable I (Incrément)
Set OS = Worksheets("CDC") 'définit l'onglet source OS
Set OD = Worksheets("Feuil1") 'définit l'onglet destination OD
DL = OS.Cells(Application.Rows.Count, "B").End(xlUp).Row 'définit la dernière ligne éditée DL de la colonne B de l'onglet source
For I = 2 To DL 'boucle des lignes 2 DL
PLV = OD.Cells(Application.Rows.Count, "B").End(xlUp).Row + 1 'définit la première ligne vide de la colonne B de l'onglet destination
If OS.Cells(I, "B") <> "" Then 'condition : si la celllule ligne I colonne B de l'onglet source n'est pas vide
OS.Cells(I, "B").Copy OD.Cells(PLV, "B") 'copy la cellule dans la première cellule vide de la colonne B de l'onglet destination
Else 'sinon
OD.Cells(PLV, "B").Value = "N/A" 'écrit "N/A"
End If 'fin de la condition
Next I 'prochaine ligne de la boucle
End Sub
Do While iteration < nbIteration + 4 'Tant que la variable iteration n'est pas arrivée à 143, la boucle est répétée
'copier coller des données
'Sheets("CDC").Select
'Range("B4").Select
'Selection.Copy
'Sheets("Feuil1").Select
'Range("B1").Select
'ActiveSheet.Paste
'autre manière de copier coller
'.Range("B" & iteration) Remplace B4, ca veut dire colonne B et la valeur de ligne d'iteration. comme celle ci évolue les cellules selctionnées aussi.
'If [No(IsEmpty(Worksheets("CDC").Range("B"&iteration)))] Then
'Worksheets("CDC").Range("B" & iteration).Copy (Worksheets("Feuil1").Range("B" & celluleArrivee))
'Else
'Worksheets("Feuil1").Range("B" & celluleArrivee) = "N/A"
'End If
'Cells(iteration, 1) = iteration la cellule indiquée prend la valeur d'iteration
iteration = iteration + 1 'iteration augmente sa valeur de 1
celluleArrivee = celluleArrivee + 1
Loop
End Sub
PS il y a beaucoup de fonction en commentaire car je les gardes pour me rappeler l'avancée de mon travail (vu que c'est la première fois que je bosse sur vba)