Voir si des données sont vides

Bonjour à tous, bonjour le forum !

Je pose mon problème ici, comme d'habitude

J'ai un classeur Excel avec 12 feuilles (une pour chaque mois).

Comme vous pouvez le voir, dans les cases B9 à E11, cela correspond par exemple au premier du mois.

Enfin bref, une fois que la personne a complété son mois (il a remplit matin et/ou après-midi et/ou soir pour chaque jour), je récupère toutes ces données à l'aide d'une macro.

Ce que j'aimerais faire, c'est voir si la personne a oublié de renseigner une date, par exemple s'il n'a rien mit le 2 mai 2008, j'aimerais pouvoir récupérer le texte 2 mai 2008 (par exemple...) dans une cellule.

Pour cela, j'ai pensé dans le classeur Excel avec les 12 feuilles a créer dans un nouvel onglet, des formules pour tester si les cellules sont vides et afficher en conséquent VIDE ou PAS VIDE.

Et ainsi récupérer les numéros des jours où y a rien.

J'ai donc pensé à faire une formule du type :

=SI(MAI!B9=0;"Vide";"PASVIDE")

car il faut seulement vérifier si l'agence a été remplit ou non.

Mais je n'arrive pas a faire quelque chose comme :

Si B9=0 et C9=0 et D9=0 et E9=0 alors "vide" sinon "pas vide"

Voilà, est-ce la bonne solution de faire ce système (qui me parait quand même lourd et bizarre) ou y a t'il plus simple ?

Merci !

Le fichier joint en question.

J'ai réussit en appliquant ce code :

=SI(ET(FEV!B86=0;FEV!C86=0;FEV!D86=0;FEV!E86=0);"vide";"")

Je vais surement rencontrer un problème lorsque je vais vouloir faire ce que je veux, je viendrons donc le poser ici

Bonjour,

Regarde si le fichier joint correspond à ton attente :

https://www.excel-pratique.com/~files/doc/CgOIDtableau_jours.zip

Amicalement

Nad

Bonjour,

Vois le fichier joint dans lequel j'ai prit en considération que le critère était que les 4 cellules soient vides (B9=0 et C9=0 et D9=0 et E9=0) et ce uniquement sur la ligne AGENCE.

La formule dans la feuille 1 à =SI(ET(colB=0;colc=0;colD=0;colE=0);"VIDE";"PAS VIDE")

Avec

colB =INDIRECT(Feuil1!B$2&"!B"&(LIGNE(DECALER(Feuil1!B$3;7*LIGNE();;))-15))

colc =INDIRECT(Feuil1!B$2&"!C"&(LIGNE(DECALER(Feuil1!B$3;7*LIGNE();;))-15))

colD =INDIRECT(Feuil1!B$2&"!D"&(LIGNE(DECALER(Feuil1!B$3;7*LIGNE();;))-15))

colE =INDIRECT(Feuil1!B$2&"!E"&(LIGNE(DECALER(Feuil1!B$3;7*LIGNE();;))-15))

Vérifie si c'est cela que tu souhaites.

https://www.excel-pratique.com/~files/doc/rdz8ptableau_jours.zip

Amicalement

Dan

Oui, merci beaucoup Nad-Dan c'est bien cela, mais j'avais déjà réalisé ce qu'il y a sur mon second post

Et je vais garder cela parce que ça fonctionne et cela m'évite de tout refaire.... désolé pour le temps que je t'ai pris

Par contre je vais avoir besoin d'aide dans quelques minutes je le sent

Re,

D'après ce que je vois, tu as fait 31 formules ?

Nad

Euh plutôt 31*12

J'ai la tête en feu, j'ai pas réussit le moyen de faire un boucle même en VBA...

Je suis entrain de rédiger mon problème.

Alors, j'ai donc deux feuilles Excel, la première avec le gros tableau (plein de vides, voir plus haut l'image) et le deuxième censé récupérer la date des jours où c'est écris : "vide"

J'ai essayé de réaliser une petite macro, mais je rencontre plusieurs problème :

  • J'ai fait une boucle mais elle semble ne fonctionner que pour une valeur
  • Je récupère la lettre de la colonne, en cherchant la cellule où apparait le mois désiré (MAR dans l'exemple) et ensuite je récupère le numéro de colonne par :
Colonne = ActiveCell.Column

Et enfin avec un select case je récupère le nom

Select Case Colonne
Case 1
   colonne_nom = "A"
Case 2
   colonne_nom = "B"
etc...

C'est fastidieux je sais, mais je ne sais pas comment faire autrement,

- Lorsque j'utilise

.Cells.Find("MAR", LookAt:=xlWhole)

Je ne peux pas remplacer "MAR" par Mois qui est une variable contenant un string "JAN", "FEV" etc...

- Je viens de me rendre compte que la cellule trouvé avec .Cells.find n'est pas l'ActiveCell donc en gros mon truc Colonne = ActiveCell.Column est inutile...

HELP plz

vide.xls

dotez.xls

Merci à vous !

Re,

Essaye avec ce code en le mettant à la place de celui qui est dans ton fichier "vide.xls"

Sub vide()
'Macro par Dan pour Handiman le 22/05/08
'On suppose que les f RODRIGUEZ.xls et DOTEZ.xls sont déjà ouverts

Dim lig As Byte, derlig As Byte, col As Byte, i As Byte
Dim moisref As String, mois As String

mois = ThisWorkbook.Sheets("feuil1").Range("A1").Value

Set ref = Workbooks("dotez.xls").Worksheets("Fin")
moisref = ref.Cells.Find(mois, LookAt:=xlWhole).Address
ligne = ref.Range(moisref).Row + 1
derlig = ligne + 30
col = Range(moisref).Column
With ThisWorkbook.Sheets("feuil1")
    For i = ligne To derlig
    lig = .Range("B65536").End(xlUp).Row + 1
        If ref.Cells(i, col) = "vide" Then
            .Range("B" & lig) = ref.Range("F" & i) & "/" & mois & "/08"
        End If
    Next i
End With
End Sub

A noter que les deux classeurs doivent être ouverts.

Amicalement

Dan

Nad-Dan merci énormément, je pensais que j'allais exploser tellement je me prenait la tête !

Je te remercie ENORMEMENT !!

Bonjour Dan, j'ai un problème lorsque j'essaye d'adapter votre code

Je suis décidément toujours aussi mauvais...

Dans le fichier joint que je vous ai donné, il y avait déjà inscrit en B2 le nom : "DOTEZ", et après dans la macro on avait utilisé (enfin vous aviez utilisé) :

.Range("B" & lig) = ref.Range("F" & i) & "/" & mois & "/08" 

Donc on remplissait dans la colonne B

J'ai essayé d'adapter le code pour faire en sorte qu'il "trouve" cette colonne là tout seul en fonction du contenu de la cellule,

J'obtiens donc bien le numéro de la colonne dans la variable

col2 = Range(technirefg).Column

Seulement après dans le code :

    lig = .Range("B65536").End(xlUp).Row + 1
        If ref.Cells(i, col) = "vide" Then
            .Range("B" & lig) = ref.Range("F" & i) & "/" & mois & "/08"
        End If

Comment remplacer la lettre B par la lettre correspondant au numéro de la variable col2 ?

Merci !

EDIT : J'ai trouvé la solution,

coln = Split(Columns(col2).Address(ColumnAbsolute:=False), ":")(1)

Sans oublier de déclarer col2 en tant que nombre et par caractère (hein nah0y...)

et après ça donne cela :

    lig = .Range(coln & "65536").End(xlUp).Row + 1
        If ref.Cells(i, col) = "vide" Then
            .Range(coln & lig) = ref.Range("F" & i) & "/" & mois & "/2008"
        End If

C'est trop fort le VBA

MErci

re,

C'est effectivement une solution plus souple.

Tes variables devraient être Dim col2 as byte et Dim coln as string.

Amicalement

Dan

C'est exact pour les variables,

Je suis plutôt content de moi sur ce coup là, même si j'ai encore une fois reçu une grande aide

Merci d'être aussi présent !

Rechercher des sujets similaires à "voir donnees vides"