Formule:si cell vide...
loulou
-
michel_m Messages postés 18903 Date d'inscription Statut Contributeur Dernière intervention -
michel_m Messages postés 18903 Date d'inscription Statut Contributeur Dernière intervention -
Hello,
Auriez vous la gentillesse de m'aider sur la création d'une formule telle que ci dessous:
Pour toutes les cases vides de la colonne P (et uniquement si elles sont vides), reporter la valeur de la meme ligne, colonne Q.
Si colonne Q également vide, reporter (toujours sur la ligne de la colonne P) la valeur de la ligne, colonne R
Puis, Pour toutes les cases vides de la colonne U (et uniquement si elles sont vides), reporter la valeur de la meme ligne, colonne V.
Si colonne V également vide, reporter (toujours sur la ligne de la colonne P) la valeur de la ligne, colonne W.
Merci beaucoup !
Auriez vous la gentillesse de m'aider sur la création d'une formule telle que ci dessous:
Pour toutes les cases vides de la colonne P (et uniquement si elles sont vides), reporter la valeur de la meme ligne, colonne Q.
Si colonne Q également vide, reporter (toujours sur la ligne de la colonne P) la valeur de la ligne, colonne R
Puis, Pour toutes les cases vides de la colonne U (et uniquement si elles sont vides), reporter la valeur de la meme ligne, colonne V.
Si colonne V également vide, reporter (toujours sur la ligne de la colonne P) la valeur de la ligne, colonne W.
Merci beaucoup !
10 réponses
-
Reporter la valeur de quoi? si la case est vide il n'y a pas de valeur j'ai pas bien saisi.
Sur combien de ligne il faut faire ca?
Tu travaille sur excel? -
Alors, je vais essayer d'être plus clair:
Si, sur une ligne, la cellule de la colonne P est vide (et seulement si la cellule est vide), je voudrais remplacer ce vide par la valeur qui est indiquée sur la même ligne, colonne Q.
Mais si la colonne Q est vide également, alors reporter en P la valeur de la meme ligne, colonne R.
Mais si Q et R sont vides également, alors laisser P vide.
Et appliquer ça sur toutes les lignes vides de la colonne P.
(en mettant une limite à 50 000 lignes pour éviter que ce soit trop long)
Est ce plus clair ? -
Bonjour,
Ca devrait le faire :Sub remplir() Dim lig As Long, derlig As Long derlig = WorksheetFunction.Max([Q65536].End(xlUp).Row, [R65536].End(xlUp).Row, [V65536].End(xlUp).Row, [W65536].End(xlUp).Row) Application.ScreenUpdating = False For lig = 2 To derlig If Cells(lig, 16) = "" Then If Cells(lig, 17) <> "" Then Cells(lig, 16) = Cells(lig, 17) Else Cells(lig, 16) = Cells(lig, 18) End If End If If Cells(lig, 21) = "" Then If Cells(lig, 22) <> "" Then Cells(lig, 21) = Cells(lig, 22) Else Cells(lig, 21) = Cells(lig, 23) End If End If Next lig Application.ScreenUpdating = True End Sub
http://www.cijoint.fr/cjlink.php?file=cj201106/cijlSa0kOD.xls
eric -
oui beaucoup plus clair. enfin 50000 ca fais beaucoup^^ surtout du 65000 que contient un classeur excel.
Enfin je vais essayer de pondre un bout de code. -
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
For i = 1 To 20000 If Cells(i, 16) = "" Then If Cells(i, 17) <> "" Then Cells(i, 16) = Cells(i, 17) ElseIf Cells(i, 18) <> "" Then Cells(i, 16) = Cells(i, 18) End If End If Next i
A coller dans une maccro -
Public Sub QRinP()
For i = 1 To 20000
If Cells(i, 16) = "" Then
If Cells(i, 17) <> "" Then
Cells(i, 16) = Cells(i, 17)
ElseIf Cells(i, 18) <> "" Then
Cells(i, 16) = Cells(i, 18)
End If
End If
Next i
End Sub
Public Sub VWinU()
For i = 1 To 20000
If Cells(i, 19) = "" Then
If Cells(i, 20) <> "" Then
Cells(i, 19) = Cells(i, 20)
ElseIf Cells(i, 21) <> "" Then
Cells(i, 19) = Cells(i, 20)
End If
End If
Next i
End Sub -
C'est génial, ça fonctionne, merci !!
Serait ce abusé de vous demander :
Une fois les éléments reportés dans les cases U et P,
Je souhaite:
Si la case U et/ou la case P n'est pas vide, sur la meme ligne, indiquer en colonne AA "Customer Contacted"
Si les cases U ET P sont vides, laisser la case de la colonne AA vide-
For i = 1 To 20000
If Cells(i, 16) = "" Then
If Cells(i, 17) <> "" Then
Cells(i, 16) = Cells(i, 17)
ElseIf Cells(i, 18) <> "" Then
Cells(i, 16) = Cells(i, 18)
End If
End If
If Cells(i, 21) = "" Then
If Cells(i, 22) <> "" Then
Cells(i, 21) = Cells(i, 22)
ElseIf Cells(i, 23) <> "" Then
Cells(i, 21) = Cells(i, 23)
End If
End If
if cells(i,16)<>"" then
cells(i,27)="Customer Contacted"
end if
if cells(i,21)<>"" then
cells(i,27)="Customer Contacted"
end if
Next i
-
-
Voila tu copies ca dans une maccro et l'affecte a un bouton pour la lancer (cela devrait faire tout ce que tu veux depuis le debut :) ):
For i = 1 To 20000 If Cells(i, 16) = "" Then If Cells(i, 17) <> "" Then Cells(i, 16) = Cells(i, 17) ElseIf Cells(i, 18) <> "" Then Cells(i, 16) = Cells(i, 18) End If End If If Cells(i, 21) = "" Then If Cells(i, 22) <> "" Then Cells(i, 21) = Cells(i, 22) ElseIf Cells(i, 23) <> "" Then Cells(i, 21) = Cells(i, 23) End If End If if cells(i,16)<>"" then cells(i,27)="Customer Contacted" end if if cells(i,21)<>"" then cells(i,27)="Customer Contacted" end if Next i
non vérifié... -
Bonjour
Excusez l'incruste
Peut-être + rapide
Option Explicit Const lig_dep As Byte = 2 'ligne départ Sub siQZ_pasvide() Dim derlig As Long, fin As Long, lig As Long 'initialisations derlig = Range("Q" & lig_dep - 1 & ":W50000").Find("*", , , , xlPrevious).Row fin = derlig - lig_dep + 1 ReDim T_colp(1 To fin) ReDim T_colaa(1 To fin) 'lecture et rangement For lig = lig_dep To derlig If Application.CountA(Range(Cells(lig, "Q"), Cells(lig, "W"))) > 0 AND cells(lig,"P")<>"" Then T_colp(lig - 1) = Cells(lig, Rows(lig).Find("*", Cells(lig, "P")).Column) T_colaa(lig - 1) = "Customer Contacted" End If Next 'restitution Application.ScreenUpdating = False Cells(lig_dep, "P").Resize(fin, 1) = Application.Transpose(T_colp) Cells(lig_dep, "AA").Resize(fin, 1) = Application.Transpose(T_colaa) End Sub
Michel -
Moi j'ai trouvé!
Code :
Voila...
Une cellule vide n'a pas de valeur..