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 :

Selection de cellules vides [XL-2003]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mars 2008
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 25
    Par défaut Selection de cellules vides
    Bonjour,

    Je dois copier une formule dans chaque cellule vide (ou a valeur 0) d'une colonne. Il y a dans cette colonne des sous-totaux (donc une formule) qui fait pour le moment apparaitre une valeur 0.

    J'ai essaye deja plusieurs methodes pour lui faire selectionner la cellule vide et lui faire copier la formule, mais je n'arrive pas a lui faire comprendre (a Excel ) que si il y a une formule deja presente dans la cellule (et ce, meme si la valeur est egale a 0) de ne pas toucher a cette cellule.

    J'ai essaye les expressions suivantes sans succes :
    - "Is Nothing"
    - ".value = 0"
    - ".SpecialCells(xlCellTypeFormulas)"
    - ".SpecialCells(xlCellTypeBlanks)"

    Avez vous une idee ?

    Voici le dernier code en date:

    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 Copie()
    ActiveSheet.Cells(6, 11).Copy
     
    a = ActiveSheet.Cells(6, 3).CurrentRegion.Rows.Count + 3
    For b = 7 To a
        If ActiveSheet.Cells(b, 11) Is Nothing Or ActiveSheet.Cells(b, 11).Value = "" Then
            ActiveSheet.Cells(b, 11).PasteSpecial (xlPasteFormulas)
        End If
    Next b
     
    c = ActiveSheet.Cells(339, 3).CurrentRegion.Rows.Count + 337
    For d = 339 To c
        If ActiveSheet.Cells(d, 11).Value = 0 Then
            ActiveSheet.Cells(d, 11).PasteSpecial (xlPasteFormulas)
        End If
    Next d
     
    ActiveSheet.Cells(443, 11).PasteSpecial (xlPasteFormulas)
     
    End Sub

    Merci

    Romain

  2. #2
    Membre Expert Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Par défaut
    Regarde
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    isempty(cells(1,1))
    cells(1,1)=""
    par contre
    .SpecialCells(xlCellTypeBlanks)
    aurait du fonctionner je croie (si bien utilisé )
    essaye
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
        If  ActiveSheet.Cells(b, 11)= "" Then
            ActiveSheet.Cells(b, 11).PasteSpecial (xlPasteFormulas)
        End If

  3. #3
    Membre averti
    Inscrit en
    Mars 2008
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 25
    Par défaut
    Et bien non !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    For b = 7 To a
        If IsEmpty(ActiveSheet.Cells(b, 11)) Then
            ActiveSheet.Cells(b, 11).PasteSpecial (xlPasteFormulas)
        End If
    Next b
    Si la cellule contient la valeur "0", il ne me copie pas la formule (alors qu'il le devrait)

    En fait, pour simplifier le probleme que je rencontre, je veux lui faire copier une formule dans chaque cellule ou il n'y en a pas (quelque soit la valeur presente dans la cellule)



    D'habitude, j'arrive toujours a ecrire des usines a gaz qui marchent, mais la... je bloque...

    Merci

    Romain

  4. #4
    Membre Expert Avatar de laetitia
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 281
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 281
    Par défaut
    bonjour ropineau l'ami Krovax le forum
    un exemple en utilisant left je boucle sur colonne b. a adapter a ton code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub test()
    Dim c As Range
    For Each c In Range("b1", Range("b65536").End(xlUp))
    If Left(c.Formula, 1) = "=" Or c <> "" Then c.Activate: MsgBox "pas vide" Else c.Activate: MsgBox " vide"
    Next
    End Sub

  5. #5
    Membre Expert Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Par défaut
    Effectivement, j'avais oublié le 0 il suffit de rajouter un ou dans le teste
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     if IsEmpty(ActiveSheet.Cells(b, 11)) or ActiveSheet.Cells(b, 11)=0 then
    mais essaye d'adapter le code de Laetitia (que je salue au passage). Ils sont souvent (voir toujours) très efficace

  6. #6
    Membre averti
    Inscrit en
    Mars 2008
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 25
    Par défaut
    Ah bah oui..., bah la oui...

    J'etais justement en train de tester en lui faisant identifier la formule dans la cellule, mais tu as ete plus rapide que moi

    Merci beaucoup Laetitia et Krovax pour votre aide !

    Juste une question en passant, qu'est ce que le ".end" a la fin de ta formule ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For Each c In Range("b1", Range("b65536").End(xlUp))
    je ne le comprend pas vraiment

    Merci pour tout !

    Romain

  7. #7
    Membre Expert Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Par défaut
    en gros tu part de la dernière ligne tu vas vers le haut jusqu'a une ligne pleine (en gros hein )

    Regarde ceci pour tout ce qui touche aux dernière ligne il est pratiquement exhaustif

  8. #8
    Membre averti
    Inscrit en
    Mars 2008
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 25
    Par défaut
    Merci !

    Romain

  9. #9
    Membre chevronné
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    322
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 322
    Par défaut
    Bonjour,

    je suppose que toutes les formules de la colonne C sont identiques....

    si c'est le cas, pas besoin de boucle...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Range("K6").Copy
    Range("C7").PasteSpecial Paste:=xlPasteFormulas
    Range("C7").AutoFill Destination:=Range("C7:C" & [B65000].End(xlUp).Row)
    Peut-être?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2007] copie d'une selection de cellules non vides
    Par gabi75 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 02/06/2010, 16h49
  2. Selection d'une cellule vide
    Par meumeu73.1 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 04/02/2009, 16h05
  3. Excel - Cellule vide en effectuant la somme
    Par spopo dans le forum Excel
    Réponses: 14
    Dernier message: 31/08/2005, 17h05
  4. Problemes avec des cellules vides
    Par arsgunner dans le forum ASP
    Réponses: 7
    Dernier message: 14/06/2004, 09h42
  5. [XSL-FO] Table avec cellule vide
    Par JustAGphy dans le forum XSL/XSLT/XPATH
    Réponses: 6
    Dernier message: 12/05/2004, 15h11

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