Microsoft 365 VBA rechercher si une cellule d'une autre feuille est vide comme condition de IF

Kyirra

XLDnaute Nouveau
Bonjour à tous,

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

Merci d'avance pour vos retours !
 

Robert

XLDnaute Barbatruc
Repose en paix
Bonjour Kyirra, bonjour le forum,

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
 

Kyirra

XLDnaute Nouveau
Bonjour Kyirra, bonjour le forum,

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

Merci pour ton avis je pense que ca va marcher comme ca je teste !


J'ai seulement mis la partie qui plantait, mais le code complet est :


Sub ListingAutoArticles()

Dim nbIteration As Integer
Dim iteration As Integer
Dim celulleArrivee As Integer

nbIteration = Worksheets("CDC").Range("S6")
iteration = 4 'Numéro de départ
celluleArrivee = 1

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.

Worksheets("CDC").Range("B" & iteration).Copy (Worksheets("Feuil1").Range("B" & celluleArrivee))

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

Discussions similaires

Statistiques des forums

Discussions
315 089
Messages
2 116 098
Membres
112 661
dernier inscrit
ceucri