Formule:si cell vide...

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

  • Votes
  • Date
  • Date décroissante
  1. 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?
    1. 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 ?
      1. Contributeur
        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
        1. chez moi ça ne marche que pour les colonnes PQR et rien ne se passe pour UVW... :/
          Une idée ?

          Merci beaucoup!
        2. Contributeur
          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
      2. 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.
        1. Contributeur
          déjà fait au post 4, on s'est croisé...
      3. 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
        1. 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 !!
        2. il faut remplacer 16 par 21
          17 par 22
          18 par 23
      4. 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
        1. 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
          1. 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
        2. 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é...
          1. Contributeur
            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