IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Excel Discussion :

Mise en forme conditionnelle si cellule "vide"


Sujet :

Excel

  1. #21
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 26
    Points : 35
    Points
    35
    Par défaut
    Tu as une petite erreur de syntaxe au niveau de ta boucle le In doit être écrit avec un "I" majuscule, les caractères de concaténations espacées...

    Voilà le code corrigé:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    Sub Test()
        'Déclaration des variables
        Dim Sht As Worksheet
        Dim Rng As Range
        Dim i As Integer
        Dim charReplace As String
        Dim c As Range
        Dim Fin As Long
     
     
        Set Sht = ThisWorkbook.Worksheets("Sheet1") 'Feuille concernée
        Set Rng = Sht.Range("A1:AM1") 'La plage de valeur à tester
        charReplace = "\"   'Le caractère à mettre en cas de valeur vide
     Fin = Sht.UsedRange.SpecialCells(xlCellTypeLastCell).Row
     
    For Each c In Sht.Range("A" & Fin & ":AM" & Fin)
       If c.Value = "" Then c.Value = charReplace
    Next c
    End Sub
    Par contre cette méthode ne checkera que la dernière ligne (AXX:AMXX XX représentant le numéro de la ligne). Si tu veux qu'elle vérifie toutes les cellules entre A1 et ta dernière ligne il faut juste changer ton foreach.

  2. #22
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    A priori, VBA n'apprécie pas qu'on ne lui mettre pas les espaces entre les &

    Essaye :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
       For Each c In Range("A" & Fin & ":AM" & Fin)

  3. #23
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 609
    Points : 5 901
    Points
    5 901
    Par défaut
    Bonjour,

    Insères des espaces autour des &
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For Each c in Range("A" & Fin & ":AM" & Fin)
    & sert à dimensionner des variables, du coup Excel ne comprend pas...

    OUPS... je n'avais pas vu ta réponse...

  4. #24
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Mars 2015
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes

    Informations forums :
    Inscription : Mars 2015
    Messages : 58
    Points : 25
    Points
    25
    Par défaut
    J'ai mis votre code il me resneigné bien les cellule ou j'écris mais laisse des blanc sur les cellule vide.
    Par contre surprenant il me met des "/" sur la ligne 7048...
    Je n'y comprend plus rien

    Par curiosité peut-on adapter un code comme ceci ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    Sub Test()
        'Déclaration des variables
        Dim i As Integer
        Dim n As Range
        Dim LastRow As Object
        Dim Sheet As Worksheet
     
     Set LastRow = Feuil1.Range("a65536").End(xlUp)
     
    For i = 0 To i = 3
       If TextBox & i + 1 = "" Then LastRow.Offset(1, i).Value = "/"
    Next i
     
    For i = 5 To i = 38
       If TextBox & i = "" Then LastRow.Offset(1, i).Value = "/"
    Next i
     
    End Sub

  5. #25
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Citation Envoyé par floflo50100 Voir le message
    J'ai mis votre code il me resneigné bien les cellule ou j'écris mais laisse des blanc sur les cellule vide.
    Je ne comprends pas ce que tu expliques. Qu'est-ce que tu appelles "renseigner" ?
    Ta demande, c'est bien de mettre des "/" dans les cellules vide de A à AM de la dernière ligne utilisée ?

    Par contre surprenant il me met des "/" sur la ligne 7048...
    Qu'est-ce qu'il y a dans les lignes 1 à 7047 ?

  6. #26
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Mars 2015
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes

    Informations forums :
    Inscription : Mars 2015
    Messages : 58
    Points : 25
    Points
    25
    Par défaut
    Pour tout t'expliquer :
    J'ai tableur que je dois renseigner ligne par ligne.
    Chaque colonne est liée a un textbox dans un userform.
    Si j'écris dans les textbox et que je clique sur validé il va me rajouter une ligne à mon tableur en remplissant les cellules que j'aurai renseigné avec les textboxs, si un ou plusieurs textbox sont vides il va me laisser des cellules vides :
    Nom : photo qmos 1.jpg
Affichages : 480
Taille : 336,0 Ko
    Dans la photo ci dessus j'ai renseigné les 3 premiers textbox donc quand je vais cliquer sur valider il va ajouter une ligne et écrire dans les 3 premières colonnes. Toutes les autres cellules de cette ligne seront vides :
    Nom : photo qmos 2.jpg
Affichages : 680
Taille : 310,3 Ko
    Mon tableau va de la colonne A à la colonne AM.
    Il y a juste la colonne E qui n'est pas à prendre en compte car elle ne se rempli pas avec une textbox mais avec un optionbutton.
    Vois tu mieux mon problème ?

  7. #27
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 609
    Points : 5 901
    Points
    5 901
    Par défaut
    Si je me fie au post #8, pourquoi ne pas mettre tes "/" directement au moment où tu remplis les cellules ?
    With Sheets("feuil1").Range("c15:c65536")
    Set trouve = .Find(quoi, lookat:=xlWhole)
    If Not trouve Is Nothing Then
    trouve.Offset(0, -2) = TextBox1.Text
    trouve.Offset(0, -1) = TextBox2.Text
    deviendrait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        With Sheets("feuil1").Range("c15:c65536")
            Set trouve = .Find(quoi, lookat:=xlWhole)
            If Not trouve Is Nothing Then
                If TextBox1.Text = "" Then trouve.Offset(0, -2) = "/" Else trouve.Offset(0, -2) = TextBox1.Text
                If TextBox2.Text = "" Then trouve.Offset(0, -1) = "/" Else trouve.Offset(0, -1) = TextBox2.Text
                .................
    Il y a certainement mieux à faire, mais c'est plutôt simple, non ?

  8. #28
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Je viens de m'apercevoir qu'il y aurait beaucoup plus simple que mon code précédent avec un SpecialCells :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub Test()
       Dim Sht As Worksheet
       Dim Fin As Long
     
       Set Sht = ThisWorkbook.Worksheets("Sheet1")
       Fin = Sht.UsedRange.SpecialCells(xlCellTypeLastCell).Row
       Sht.Range("A" & Fin & ":AM" & Fin).SpecialCells(xlCellTypeBlanks).Value = "/"
    End Sub

  9. #29
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Mars 2015
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes

    Informations forums :
    Inscription : Mars 2015
    Messages : 58
    Points : 25
    Points
    25
    Par défaut
    Bonjour Menhir,
    J'ai donc essayé ton code, je n'arrive toujours pas comprendre... il me met les "/" à la ligne 7047 !!! incompréhensible....

  10. #30
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 609
    Points : 5 901
    Points
    5 901
    Par défaut
    Sélectionne toutes les lignes sous tes données et supprime-les
    Il y a certainement quelque chose dans une cellule, peut-être simplement un espace.

  11. #31
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Citation Envoyé par floflo50100 Voir le message
    Bonjour Menhir,
    J'ai donc essayé ton code, je n'arrive toujours pas comprendre... il me met les "/" à la ligne 7047 !!! incompréhensible....
    La méthode UsedRange cible l'ensemble des cellules utilisées.
    Ca signifie que tu as mis quelque chose dans une cellule de la ligne 7047. Peut-être juste un espace ou un format (bordure, couleur de fond, etc.). Ca n'est peut-être même pas visible.
    Le mieux est de supprimer complètement cette ligne en la sélectionnant depuis son numéro de ligne + clic droit + Supprimer.
    Parce que la touche Suppr ne supprime que les contenus, pas les formats.

    Le problème c'est que dans ton cas, on ne peut pas utiliser la méthode End(xlUp) (qui ne repère que les contenu) puisqu'on ne sait pas à priori quelle cellule de la "bonne ligne" est vide et que si on appliquait cette méthode sur une colonne au hasard, ça risquerait de pointer sur l'une des cellules précédentes.
    La seule méthode fiable serait de relevé la ligne repéré par des End(xlUp) lancé sur toutes les colonnes et de ne garder que la valeur la plus grande.

    Juste pour remplacer la ligne "Fin = ..."
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
       Dim Y_I as Integer
       Fin = 0
       For Y_I = 1 to 39
          Fin=Application.WorksheetFunction.Max(Fin, Sht.Cells(Rows.Count,Y_I).End(xlUp).Row)
       Next Y_I
    Pas très sexy comme code mais ça devrait marcher.
    Vu que End(xlup) ne peut pas être appliqué à plusieurs colonnes (enfin... si, mais il ne s'occupe que de la première et ne tient pas compte des autres), je ne vois pas d'autre solution.

  12. #32
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 609
    Points : 5 901
    Points
    5 901
    Par défaut
    Citation Envoyé par Menhir Voir le message
    La seule méthode fiable serait de relevé la ligne repéré par des End(xlUp) lancé sur toutes les colonnes et de ne garder que la valeur la plus grande.
    Je pense que cette méthode pourrait faire l'affaire dans le cas de colonnes ou lignes n'ayant pas la même longueur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        Dim NbLignes As Long, nbColonnes As Long
     
        NbLignes = Cells.Find("*", Range("A1"), , , xlByRows, xlPrevious).Row
        nbColonnes = Cells.Find("*", Range("A1"), , , xlByColumns, xlPrevious).Column

Discussions similaires

  1. Réponses: 2
    Dernier message: 03/04/2013, 07h31
  2. Mise en forme conditionnelle si cellule égale 0
    Par Phixidor dans le forum Excel
    Réponses: 5
    Dernier message: 03/03/2013, 23h18
  3. Réponses: 3
    Dernier message: 11/02/2012, 09h46
  4. [XL-2007] Mise en forme conditionnelle de cellules
    Par Fred4345 dans le forum Excel
    Réponses: 9
    Dernier message: 08/02/2012, 22h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo