Formule:si cell vide...

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

10 réponses

  1. Christof422 Messages postés 990 Statut Membre 213
     
    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
  2. loulou
     
    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
  3. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    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
    1. loulou
       
      chez moi ça ne marche que pour les colonnes PQR et rien ne se passe pour UVW... :/
      Une idée ?

      Merci beaucoup!
      0
    2. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
       
      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
  4. Christof422 Messages postés 990 Statut Membre 213
     
    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
    1. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
       
      déjà fait au post 4, on s'est croisé...
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Christof422 Messages postés 990 Statut Membre 213
     
    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
    1. loulou
       
      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
    2. Christof422 Messages postés 990 Statut Membre 213
       
      il faut remplacer 16 par 21
      17 par 22
      18 par 23
      0
  7. loulou
     
    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
  8. loulou
     
    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
    1. Christof422 Messages postés 990 Statut Membre 213
       
      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
  9. Christof422 Messages postés 990 Statut Membre 213
     
    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
  10. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    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
  11. Ctesias Messages postés 786 Statut Membre 36
     
    Moi j'ai trouvé!

    Code :


    Voila...

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