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

Macros et VBA Excel Discussion :

Comment remplir des cellules vides ?


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 23
    Points : 8
    Points
    8
    Par défaut Comment remplir des cellules vides ?
    Bonjour,

    Je suis novice en VBA et j'aurai aimé savoir s'il est possible dans Excel de faire un code permettant le remplissage de toutes les cases vides par -99999 ?

    J'ai un tableur qui fait 690 lignes et 25 colonnes.

    Je vous remercie d'avance pour vos réponses.

    S'il faut que je sois plus clair, n'hésitez pas à me le dire.

    Cyril

  2. #2
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Tu définis ta plage de données, tu sélectionnes les cellules vides et tu parcours la plage de cellules vide en les remplissant.
    Ce qui donne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub test()
    Dim plage As Range
        With Worksheets("feuil2").Range(Cells(1, 1), Cells(Range("A65536").End(xlUp).Row, Range("IV1").End(xlToLeft).Column))
            Set plage = .SpecialCells(xlCellTypeBlanks)
            For Each cell In plage
                cell.Value = -9999
            Next
        End With
    End Sub
    Dans cet exemple, ta plage de données commence sur la ligne 1 (en rouge). Tu adaptes

  3. #3
    Futur Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 23
    Points : 8
    Points
    8
    Par défaut
    Re bonjour,

    Merci ouskel'n'or !

    J'ai rentré le code que tu m'as donné et c'est déjà un gros plus pour moi puisque certaines cases se remplissent.

    Néanmoins, un problème se pose. J'ai fait un test en remplissant quelques cases au hasard d'un tableur et en lançant la macro, je ne rempli que la première suite de case vide. Par exemple, dans mon cas, j'avais mis 1 en L1,C1, rien de L2C1 à L4C1 puis 6 en L5C1 et à nouveau rien après. Seules les cases L2C1 à L4C1 se sont remplies par -9999.

    Que puis-je faire pour que ça prenne en compte tout le tableur ?

    Merci beaucoup d'avance.

    Cyril

  4. #4
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Effectivement, il ne fonctionnera pas si tu ne mets rien en colonne 1
    La formule pour la plage implique que la colonne 1 ait le plus grand nombre de lignes renseignées.
    Si tu veux être certain de remplir toutes les cellules vides, remplace
    With Worksheets("feuil2").Range(Cells(4, 1), Cells(Range("A65536").End(xlUp).Row, Range("IV4").End(xlToLeft).Column))
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    With Worksheets("Feuil1").Range("A1").SpecialCells(xlCellTypeLastCell)
    mais si tu supprimes des lignes, ce code n'en tiendra pas compte et donnera la dernière ligne avant suppression, tant que le fichier n'a pas été enregistré.
    Tu testes
    A+

  5. #5
    Futur Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 23
    Points : 8
    Points
    8
    Par défaut
    Re merci beaucoup ouskel'n'or !

    Ce coup-ci ça marche bien. En cas de problème, j'essayerai de compiler les 2 codes que tu m'as donné.

    En tout cas, vraiment merci !

    Et peut être à bientôt pour une nouvelle question ... quand on est pas doué ... on est pas doué !!!

    Cyril

  6. #6
    Futur Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 23
    Points : 8
    Points
    8
    Par défaut
    Re bonjour !

    ouskel'n'or, je crois que j'ai parlé un peu trop vite en disant que ça fonctionnait !

    Ca fonctionne lorsque le tableur est simple et que j'ai rentré les données manuellement.

    Ce qui pose problème maintenant, c'est que je copie et colle un tableau venant de access et contenant un bon nombre de données. Dans ce tableau, il y a des cases vides et j'aimerai là aussi les remplir par -99999. Le problème c'est que ça ne veut pas ! Ca me met une erreur 400 !!

    D'où peut venir ce problème ?

    Si dans une case vide de ce tableau j'inscris une valeur puis l'efface, en appliquant la macro, seule cette case se remplie.

    Juste une précision, il s'agit d'une tableau avec des nombres mais aussi des cases remplies par du texte.

    Si quelqu'un peut m'aider, ce serait super sympa.

    Merci d'avance.

    Cyril

  7. #7
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Montre ton code et indique la ligne de l'erreur

  8. #8
    Futur Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 23
    Points : 8
    Points
    8
    Par défaut
    Le code que j'ai mis est, il me semble ..., celui que tu m'as donné tout à l'heure.

    Code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub test()
    Dim plage As Range
        With Worksheets("AD tout").Range("A1").SpecialCells(xlCellTypeLastCell)
            Set plage = .SpecialCells(xlCellTypeBlanks)
            For Each cell In plage
                cell.Value = -99999
            Next
        End With
    End Sub
    Concernant le message d'erreur, je ne sais pas à quoi il se reporte. Quand je lance la macro, j'ai juste un petit rectangle avec une croix qui s'affiche et il est noté 400 dedans, sans plus de précisions !!

    Donc je ne sais pas à quoi se reporte l'erreur. Quand je retourne voir le code, il n'y a rien de nouveau !

    Merci d'avance

  9. #9
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    .....................
    As-tu du code dans la feuille de code de la feuille de calculs ?
    Je ne vois vraiment pas.
    Tes données récupérées depuis Access sont bien reportées ?
    En désespoir de cause, enregistre ton classeur et redémarre Excel puis teste de nouveau.
    Sinon, je n'ai pas de réponse
    Tu dis
    A+

  10. #10
    Futur Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 23
    Points : 8
    Points
    8
    Par défaut
    Me revoilà !

    J'ai essayé de suivre tes conseils, en redémarrant tout, j'ai enlevé et refais la macro mais le résultat n'est toujours que partiel.

    Je n'ai plus de message d'erreur, c'est déjà un point très positif mais certaines cases vides ne se remplissent pas alors que d'autres si !!

    Bizarre !

    Si tu as une idée, je suis preneur !

    Sinon, je n'ai pas de code dans la feuille de code de la feuille de calculs

    Qu'entends tu par "Tes données récupérées depuis Access sont bien reportées ?"
    Je n'en sais rien ! Je fais un copier coller entre Access et Excel. En regardant de plus près, les cases qui ne se remplissent pas semblent être :
    - celles dont les colonnes contiennent du texte et des dates
    - celles contenant des nombres mais dans la colonne, les nombres semblent identifiés au format texte !!

    Merci !!

  11. #11
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Essaie de voir si elle ne contiennent rien. Tu en sélectionnes une "vide" qui ne se complète pas. Tu fais un clic dessus, tu appuies sur supp et tu relances la macro. Si elle se complète avec -9999, c'est qu'elle n'était pas vide.
    Je ne sais pas ce que tu copies depuis Access mais tes cellules soit-disant vides peuvent contenir un caractère de contrôle. Ce peut être vblf ou vbcr ou tout autre caractère invisible. J'opte pour vblf (il me semble que vbcr place un carré dans la cellule)
    Pour remédier au problème, je te propose ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub test2()
        Cells.Select
        Selection.Replace What:=vbLf, Replacement:="", LookAt:=xlPart, _
            SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
            ReplaceFormat:=False
    End Sub
    Si ça ne change rien, teste ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Msgbox Len(Range("B12"))
    Remplace B12 par une cellule qui ne se remplit pas. Si tu as autre chose que 0, ou une erreur, c'est que ta cellule contient quelque chose.
    Si le message est "1" alors, en mettant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Msgbox asc(Range("B12"))
    tu auras le code du caractère ascii que tu dois remplacer.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub test3()
        Cells.Select
        Selection.Replace What:=chr(le code trouvé avec asc), Replacement:="", LookAt:=xlPart, _
            SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
            ReplaceFormat:=False
    End Sub
    Bonne chance mais dis-nous
    A+

  12. #12
    Futur Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 23
    Points : 8
    Points
    8
    Par défaut
    Merci beaucoup !

    Je regarde ça ce soir et je te tiens au courant dans la soirée ou demain matin !

    Croisons les doigts !!

    Encore merci ouskel'n'or

  13. #13
    Futur Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 23
    Points : 8
    Points
    8
    Par défaut
    Bonjour à tous,

    ouskel'n'or, j'ai essayé ce que tu m'as dit de faire. Voici le bilan.

    Quand j'entre le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Msgbox Len(Range("B12"))
    ça m'affiche 0.

    J'ai tout de même essayé le 2ème code que tu m'as donné :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub test2()
        Cells.Select
        Selection.Replace What:=vbLf, Replacement:="", LookAt:=xlPart, _
            SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
            ReplaceFormat:=False
    End Sub
    Et enfin, après avoir réalisé ces 2 opérations, je relance ma macro de départ
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub test()
    Dim plage As Range
        With Worksheets("AD tout").Range("A1").SpecialCells(xlCellTypeLastCell)
            Set plage = .SpecialCells(xlCellTypeBlanks)
            For Each cell In plage
                cell.Value = -99999
            Next
        End With
    End Sub
    et j'ai un message d'erreur m'indiquant "erreur d'exécution 1004 : Pas de cellule correspondante".
    La ligne de code en cause est la suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set plage = .SpecialCells(xlCellTypeBlanks)
    Merci d'avance si tu peux me sauver.

    Cyril

  14. #14
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Points : 5 537
    Points
    5 537
    Par défaut
    Bonjour,

    J'ignore comment le copier-coller a été fait à partir d'Access...

    Ce qu'il y a de certain est que si le 1er caractère d'une cellule est le caractère 0 (chr(0)), le len donnera = 0, y compris si le collage était sensé transporter d'autres choses. chr(0) ne veut pas dire vide

    exemple pour comprendre (ici on utilise un label comme tremplin au lieu d'une cellule) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub Command1_Click()
     Label1.Caption = Chr(0) & "aaaa"
     MsgBox Len(Label1.Caption)
    End Sub

  15. #15
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Bonjour ucfoutu,
    Appliqué à une cellule, Excel la considère comme vide.
    Mon test
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub test()
    Dim plage As Range, i
    'remplissage
        For i = 1 To 20
            Cells(1, i) = Chr(0)
        Next
    'remplacement
        With Worksheets("feuil2").Range("A1")
            Set plage = .SpecialCells(xlCellTypeBlanks)
            For Each cell In plage
                cell.Value = -99999
            Next
        End With
    End Sub

    @ cyrilounet08
    Ta cellule B12 fait bien partie de ta plage de données ?
    Si elle n'en fait pas partie, elle ne sera pas prise en compte, même vide. B12 n'était qu'un exemple.

  16. #16
    Futur Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 23
    Points : 8
    Points
    8
    Par défaut
    Re bonjour,

    Merci pour l'info ucfoutu.

    ouskel'n'or, je viens d'essayer ton code, il me remplace bien toute les cases de la première ligne par -99999, y compris celles contenant déjà quelque chose.

    Que puis-je faire avec ?

    Je te remercie d'avance.

    Cyril

  17. #17
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Bien sûr, c'est ce que je disais
    Citation Envoyé par ousk' dans son dernier post
    Appliqué à une cellule, Excel la considère comme vide.
    C'était juste pour montrer à ucfoutu que chr(0) vide la cellule mais ne "remplace" pas le contenu.
    Donc, il faut chercher autre chose. Mais quoi ?
    Joins ton fichier "zippé" avec une seule feuille de tes données récalcitrantes, qu'on voit ça
    Si tu as des données confidentielles, remplace-les par "hgjkdghdlfds" ce que tu veux mais ne touche pas aux cellules vides.
    A+

  18. #18
    Futur Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 23
    Points : 8
    Points
    8
    Par défaut
    Entendu, j'essaye de faire ça dès que possible.

    Je suis en déplacement tout l'après midi donc ça ne sera peut être pas avant demain.

    Merci beaucoup pour ton aide.

    Cyril

Discussions similaires

  1. [OpenOffice][Tableur] Comment compter des cellules non vides
    Par BizutAccess dans le forum OpenOffice & LibreOffice
    Réponses: 2
    Dernier message: 14/02/2012, 09h18
  2. Réponses: 2
    Dernier message: 15/02/2010, 01h07
  3. [VBA-E] Comment faire une boucle lorsqu'il y a des cellules vides
    Par Annick.w dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 01/02/2007, 22h39
  4. Réponses: 19
    Dernier message: 06/07/2006, 15h35
  5. [VBA-E]Remplir des cellules vides par des 0
    Par Tartenpion dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 12/03/2006, 13h58

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