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 :

Autofill uniquement les 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 confirmé
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2015
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Novembre 2015
    Messages : 80
    Par défaut Autofill uniquement les cellules vides
    Bonjour !

    J'ai une colonne A avec des données jusqu'à la cellule A300. Certaines sont vides, d'autres non.

    En VBA, je rentre une formule dans la cellule A1 puis j'utilise la fonction Autofill pour la rentrer dans toute ma colonne A (Jusqu'à A300).

    Le problème est que les données contenues dans les cellules non vides de la colonne A sont elles aussi écrasées !

    J'ai essayer de filtrer sur les cellules vides avant d'appliquer l'autofill mais ça refill également les cellules filtrées...

    Y a-t-il un moyen d'ajouter un paramètre "only empty cells" à l'autofill ?

    Pour rappelle voici la ligne de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ws.Range("A1").Select
    Selection.AutoFill Destination:=ws.Range(ws.Cells(1, 1), ws.Cells(300, 1))
    Et la ligne de code pour le filtre sur cellules vides :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ws.Range("$A$1:$A$300").AutoFilter Field:=1, Criteria1:="="

    On ne peut pas écrire un truc ressemblant à ça ? :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Selection.AutoFill Destination:=ws.Range(ws.Cells(1, 1), ws.Cells(300, 1)), Criteria1:="="

    Merci de votre attention.

  2. #2
    Expert éminent 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
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("A1").Copy Range("A2:A300").SpecialCells(xlCellTypeBlanks)

  3. #3
    Membre confirmé
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2015
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Novembre 2015
    Messages : 80
    Par défaut
    Bonjour désolé du temps de réponse. Merci beaucoup je pense que c'est ce qu'il me fallait. N'étant pas sur mon lieu de travail je vous tiendrais au courant du résultat demain. Encore merci !

    EDIT : ça fonctionne parfaitement merci !

  4. #4
    Membre confirmé
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2015
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Novembre 2015
    Messages : 80
    Par défaut
    Ok je me suis emballé un peu vite...

    Il y a un problème connu avec le "SpecialCells(xlCellTypeBlanks).Select".

    La formule que je colle dans les "cellules vides" est une formule de type RECHERCHEV + IF, qui renvoi "" (vide) si le recherchev ne trouve pas de correspondance. Puis je fais un copier coller des cellules pour transformer les résultats de formule en donnée brut.

    Le problème se trouve là. Lorsque que l'on copie colle une cellule vide, on la voit vide, mais il y a des données cachées qu'Excel considère comme non vide (quelques sujets en parle sur le forum, ils expliquent bien mieux que moi)

    En gros lors du premier jet, les cellules sont réellement vides. La formule copie colle ces cellules. Elles restent vides, mais ne sont plus considérées comme vide.

    Lors du deuxième (et suivants) jet, on obtient alors une erreur 1004 "pas de cellule correspondante" car en effet, il ne détecte plus les cellules comme vides.

    Je ne sais donc pas comment contourner ce problème...

  5. #5
    Expert éminent 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
    Par défaut
    Citation Envoyé par maximeozenne Voir le message
    Il y a un problème connu avec le "SpecialCells(xlCellTypeBlanks).Select".
    Je ne t'ai certainement pas conseillé de mettre un Select.
    Je peux même te conseiller d'éviter autant que possible d'éviter ce membre.

    La formule que je colle dans les "cellules vides" est une formule de type RECHERCHEV + IF, qui renvoi "" (vide) si le recherchev ne trouve pas de correspondance. Puis je fais un copier coller des cellules pour transformer les résultats de formule en donnée brut.
    Si tu n'indiques pas le contenu de cette formule, comment imagines-tu qu'on puisse t'indiquer comment l'adapter ?

    Le problème se trouve là. Lorsque que l'on copie colle une cellule vide, on la voit vide, mais il y a des données cachées qu'Excel considère comme non vide (quelques sujets en parle sur le forum, ils expliquent bien mieux que moi)
    Une cellule contenant une formule n'est pas vide, même si son résultat est une chaine de caractère de longueur nulle.

    Dans ce cas, il faudra faire une boucle qui scrute chaque cellule, vérifie avec la propriété Text si elle est vide et, si c'est le cas, fasse un coller dedans.

  6. #6
    Membre confirmé
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2015
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Novembre 2015
    Messages : 80
    Par défaut
    A vrai dire la formule renvoie nulle, puis je fais un copier coller de la range modifiée pour transformer les formule en donnée brut (exemple si je marque "=1+1" ça sera marqué 2 dans la case mais =1+1 dans la formule. Après ma manip', ça sera marqué 2 dans la case ET dans la formule.)

    Du coup les cellules vides résultants du renvoi de nulle par la formule, sont bel et bien vides. Si je filtre sur "non vide" ma colonne, elles disparaissent. Ma feuille les considère comme vide, mais pas le code VBA.

    Je ne me suis pas douté qu'un problème pareil existait et j'ai simplifié mon problème au maximum pour la compréhension.

    Dans un soucis d'optimisation je veux éviter les boucles, car pour 300 lignes ça va, mais quand j'en aurais 20000 ça sera pas aussi drôle.


    EDIT : Voici le lien du topic qui explique ce phénomène : http://www.developpez.net/forums/d52...ule-convaincu/

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

Discussions similaires

  1. Supprimer les cellules vides d'une sélection
    Par Franc dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 26/03/2008, 15h04
  2. bordure pour les cellules vides
    Par jawed84 dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 14/01/2008, 14h39
  3. bordures pour les cellules vides
    Par luimême dans le forum Mise en page CSS
    Réponses: 1
    Dernier message: 26/12/2007, 12h12
  4. Enlever les cellules vide dans un ComboBox
    Par Dream Master dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 31/05/2007, 16h14
  5. Afficher les cellules vides...
    Par Invité dans le forum ASP
    Réponses: 1
    Dernier message: 31/08/2005, 17h32

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