Formule:si cell vide...

Fermé
loulou - 8 juin 2011 à 10:20
michel_m Messages postés 16602 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 - 8 juin 2011 à 16:52
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 !
A voir également:

10 réponses

Christof422 Messages postés 871 Date d'inscription mardi 24 mai 2011 Statut Membre Dernière intervention 8 février 2015 212
8 juin 2011 à 10:32
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?
0
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 ?
0
eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 7 256
Modifié par eriiic le 8/06/2011 à 10:54
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
0
chez moi ça ne marche que pour les colonnes PQR et rien ne se passe pour UVW... :/
Une idée ?

Merci beaucoup!
0
eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 7 256
8 juin 2011 à 13:57
oui, il y avait une petite erreur, j'avais corrigé le post mais pas le code du classeur.

If Cells(lig, 17) <> "" Then
corrigé en
If Cells(lig, 22) <> "" Then
dans la 2nde partie
eric
0
Christof422 Messages postés 871 Date d'inscription mardi 24 mai 2011 Statut Membre Dernière intervention 8 février 2015 212
8 juin 2011 à 10:55
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.
0
eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 7 256
8 juin 2011 à 10:56
déjà fait au post 4, on s'est croisé...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Christof422 Messages postés 871 Date d'inscription mardi 24 mai 2011 Statut Membre Dernière intervention 8 février 2015 212
8 juin 2011 à 11:05
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
0
Génial, ça fonctionne parfaitement mais j'ai essayé d'ajouter la meme chose avec les colonnes V et W dans U si vide et cette seconde partie ne fonctionne pas ... Tu peux (encore) m'aider ?!! Merci beaucoup !!
0
Christof422 Messages postés 871 Date d'inscription mardi 24 mai 2011 Statut Membre Dernière intervention 8 février 2015 212
8 juin 2011 à 14:23
il faut remplacer 16 par 21
17 par 22
18 par 23
0
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
0
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
0
Christof422 Messages postés 871 Date d'inscription mardi 24 mai 2011 Statut Membre Dernière intervention 8 février 2015 212
8 juin 2011 à 16:05
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
0
Christof422 Messages postés 871 Date d'inscription mardi 24 mai 2011 Statut Membre Dernière intervention 8 février 2015 212
Modifié par Christof422 le 8/06/2011 à 16:16
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é...
0
michel_m Messages postés 16602 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 312
Modifié par michel_m le 9/06/2011 à 06:18
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
0
Ctesias Messages postés 724 Date d'inscription lundi 16 mai 2011 Statut Membre Dernière intervention 1 décembre 2011 36
Modifié par Ctesias le 8/06/2011 à 10:36
Moi j'ai trouvé!

Code :


Voila...

Une cellule vide n'a pas de valeur..
-2