1
votes

comment définir une cellule à 0 si elle est vide et qu'une autre cellule contient des données

donc j'ai ce code et ce que je veux faire est le suivant:

si Range ("aj61: aj432") est vide et Range ("F61: F432" ) contient du texte, puis définissez les cellules vides sur 0

Voici ce que j'ai essayé mais j'ai obtenu une incompatibilité de type

Sub Insert_0()
    Dim rng As Range
    Set rng = Range("AJ61:AJ432")
    If IsEmpty(rng) And rng.Offset(-30, 0) <> "" Then rng.Value = 0
End Sub


4 commentaires

Donnez-nous l'erreur exacte dans un extrait s'il vous plaît


IsEmpty retournera toujours false pour les variables initialisées


Parlez-vous de cellules vraiment vides ou de cellules avec des formules qui renvoient "" ?


l'erreur est: Erreur d'exécution '13': - Incompatibilité de type


5 Réponses :


3
votes

Vous devez parcourir la plage:

For i = 61 To 432
    If Cells("AJ" & i).Value = "" And Cells("F" & i).Value <> "" Then Cells("AJ" & i).Value = 0
Next


1 commentaires

a obtenu une erreur: Erreur d'exécution '5': Appel de procédure ou argument non valide sur la ligne if cells



0
votes

Si vous voulez vérifier si une plage de plusieurs cellules est vide, vous devez utiliser quelque chose comme:

If WorksheetFunction.CountA(rng) = 0 Then


0 commentaires

0
votes

Vous devrez parcourir les cellules de la plage. Quelque chose comme:

dim cel as range
for each cel in rng.cells
    If IsEmpty(cel) And cel.Offset(-30, 0) <> "" Then cel.Value = 0
next

pour le rendre plus rapide, vous pouvez remplir un tableau avec les valeurs de la plage


1 commentaires

obtenu une erreur lorsque j'ai exécuté votre code, donc j'ai ajouté ceci après la commande dim: set cel = Range ("AJ61: AJ432") et l'erreur est: Erreur d'exécution '424': Objet requis.



1
votes

aucune boucle

Sub Insert_0()
    Intersect(Range("F61:F432").SpecialCells(xlCellTypeConstants).EntireRow, Range("AJ:AJ")).SpecialCells(xlCellTypeBlanks).Value = 0
End Sub


0 commentaires

6
votes

Utilisez SpecialCells pour capturer les lignes des valeurs de texte de la colonne F qui se croisent avec les valeurs vides de la colonne AJ.

Option Explicit

Sub Insert_0()

    Dim rng As Range

    On Error Resume Next
    Set rng = Intersect(Range("F61:F432").SpecialCells(xlCellTypeConstants, xlTextValues).EntireRow, _
                        Range("AJ61:AJ432").SpecialCells(xlCellTypeBlanks))
    On Error GoTo 0

    If Not rng Is Nothing Then
        rng = 0
    Else
        Debug.Print Err.Number & ": " & Err.Description
        On Error GoTo -1
    End If

End Sub


2 commentaires

Utilisation très intelligente de INTERSECT () (+1)


Bonne utilisation de INTERSECT avec SpecialCells . Jamais vu auparavant