Exécuter une macro sur une colonne en fonction d'une valeur

Bonjour. Je suis débutant en VBA.

J'ai réussi à créer une macro de validation des donnnées qui m'indique si j'ai des cellules vides.

Voir code:

Sub Remplir5()

'********************************
' Remplir5 Macro
'Macro pour trouver les vides
'******************************

vide = False
For Each c In Range("C10:c30").Cells
If c = "" Then vide = True
Next
If vide Then MsgBox "Cellule vide"

End Sub

Je voudrais que cette macro s'applique également sur les colonnes D, E, F. etc,, seulement si la valeur de D2, de E2 ou de F2 (entete de la colonne) correspond à une certaine valeur.

MErci de votre aide.

Bonjour,

Quel est l'objectif réel de la macro ? Rechercher les cellules vides ou empêcher qu'elles le deviennent ? Et quelle est cette condition sur les colonnes D à F ?

Pour l'exercice, voici une proposition de recherche (compte et renvoie les addresses par boite de dialogue et sur la feuille) :

Sub RechercherVide()

Dim plage as range, c as range
Dim k as byte
Dim nbvide%
Dim Add$

for k = 3 to 6 'pour les colonnes 3 à 6 (càd C à F)
    if cells(2, k).value = "" then goto Passer 'si entete vide, on saute la recherche (A ADAPTER EVIDEMMENT)
    set plage = Range(cells(10, k), cells(30, k)) 'définition de la plage en cours (lignes 10 à 30)
    For Each c In plage 'pour chaque cellule sur la plage
        If c.value = "" Then 'si cellule vide
            nbvide = nbvide + 1 'compteur s'incrémente (+1)
            if Add = "" then 'si Add est vide
                Add = c.address 'Add prend uniquement l'adresse
            else 'sinon
                Add = Add & "," & c.address 'concatène les adresses déjà stockées avec celle en cours (avec , comme séparateur)
            end if
        end if
    Next c 'cellule suivante
Passer: 'reprise en cas de saut (entete vide)
next k 'colonne suivante

msgbox "Il y a " & nbvide & " cellules vides :" & vbcrlf & vbcrlf & Add 'message
Range("N1").value = Add 'adresses copiées sur la feuille (en N1 : choix arbitraire)

End Sub

Mais il y a beaucoup plus simple, avec exemples d'actions sur ces cellules :

Sub AvecMesVides()

Dim Vides as range

Set Vides = Range("C10:F30").specialcells(xlcelltypeblanks) 'union des cellules vides de ma plage de recherche

with Vides 'sur cette plage de cellules vides (factorisation)
    .interior.color = RGB(255, 0, 0) 'colorie en rouge l'intérieur
    .value = "VIDE" 'attribue la valeur "VIDE"
    .cells(1).value = .address 'renvoie sur la première cellule les adresses de toutes les vides
end with

'A NOTER QUE LES LIGNES SE SUPERPOSENT AUX PRÉCÉDENTES SANS INFLUER DESSUS

end sub

Cdlt,

Bonjour.

J'ai copié le code, changer les variables et tout à fonctionner durant un bout. Merci.

J'ai un erreur d'Exécution 13 qui apparait sans raison apparante:

Sub RechercherVide()
Dim plage As Range, c As Range
Dim k As Byte
Dim nbvide%
Dim Add$

For k = 3 To 12 'pour les colonnes 3 à 8 (càd C à n)
If Cells(9, k).Value = "" Then GoTo Passer 'si entete vide, on saute la recherche (A ADAPTER EVIDEMMENT)
Set plage = Range(Cells(10, k), Cells(44, k)) 'définition de la plage en cours (lignes 10 à 30)
For Each c In plage 'pour chaque cellule sur la plage
If c.Value = "" Then 'si cellule vide
nbvide = nbvide + 1 'compteur s'incrémente (+1)
If Add = "" Then 'si Add est vide
Add = c.Address 'Add prend uniquement l'adresse
Else 'sinon
Add = Add & "," & c.Address 'concatène les adresses déjà stockées avec celle en cours (avec , comme séparateur)
End If
End If
Next c 'cellule suivante
Passer: 'reprise en cas de saut (entete vide)
Next k 'colonne suivante

MsgBox "Il y a " & nbvide & " cellules vides :" & vbCrLf & vbCrLf & Add 'message
'Range("N1").Value = Add 'adresses copiées sur la feuille (en N1 : choix arbitraire)

End Sub

Bonjour,

A première vue, c'est assez énigmatique. C'est le genre de chose qui ne m'arrive que sur mon mac et jamais sur windows. Essayez avec

Dim plage As Range 'sans c as range

et sinon, essayez de boucler sur les lignes et colonnes (sans for each).

Mais si le but est de trouver les cellules vides, le second code est plus intéressant !

Rechercher des sujets similaires à "executer macro colonne fonction valeur"