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 :

Cellule pleine considérée vide? [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Juillet 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juillet 2015
    Messages : 10
    Points : 12
    Points
    12
    Par défaut Cellule pleine considérée vide?
    Bonjour à tous,
    Première question sur ce forum!

    Je travaille actuellement sur une macro qui fait appel à une fonction d'indication du nombre de lignes d'une colonne. Rien de bien compliqué en soi. Mais quand je lance la macro j'ai régulièrement un soucis qui se produit.

    Ma colonne contient du texte (j'ai testé avec une boucle + msgbox qui m'indique l'adresse de la première cellule vide).

    Quand je lance la macro principale, j'ai un MsgBox qui doit m'indiquer le nombre de lignes et là il m'indique que la colonne contient 0 lignes.

    Y-a t-il une incidence quelconque sur les résultats d'une macro en fonction de la source de données sachant que mon contenu de feuille est issu d'un copier/coller d'un autre classeur, lui-même issu d'un exctraction Sql?

    Pour info : la fonction appellée est vraiment basique il s'agit simplement de compter les lignes (> pour toute ligne <>0 on fait i+1, i+1 est stocké sous "v" pour être réutilisé dans une boucle par la suite).

    Je vous remercie par avance pour votre aide.

  2. #2
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 073
    Points : 9 853
    Points
    9 853
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    et à quoi ressemble ce code basique ?


    que contient ta cellule exactement ? je cerne mal ton explication
    mon contenu de feuille est issu d'un copier/coller d'un autre classeur, lui-même issu d'un exctraction SQL
    ce sont des liaisons de données ? des références externes ? des chaines de caractères ?

  3. #3
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    Bonsoir ...

    et tu pense tester la présence de texte avec ta formule <> 0 .... celle-ci s'applique plutôt à des nombres .. pour du texte il faut comparer avec du texte , une chaine vide par exemple <> ""

  4. #4
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut heu
    bonjour
    Je travaille actuellement sur une macro qui fait appel à une fonction d'indication du nombre de lignes d'une colonne. Rien de bien compliqué en soi.
    ben pourtant en testant =,<>1 ou<>"" n'est pas la solution ideal surtout si ta colonne est remplie de plusieurs milliers de ligne entre nous !!

    fait une recherche sur ".end(xlup) ou .end(xldown)"

    en gros pour connaitre la derniere ligne la plus connu est

    exemple en colonne A

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    msgbox cells(rows.count,1).end(xlup).row
    te donne la derniere ligne utilisée


    et il y en a bien d'autre
    curentregion avec une cellule en parametre
    usedrange
    specialcell(lastcell)
    etc......
    bref ta methode est harcaique
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  5. #5
    Membre à l'essai
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Juillet 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juillet 2015
    Messages : 10
    Points : 12
    Points
    12
    Par défaut
    Bonjour,

    Merci pour vos réponses.

    Pour commencer je dirais que je n'ai pas recherché avec <>0. Je met simplement mes explications sous cette forme (pour le coup je trouvais plus rapide d'écrire <>0 que IsEmpty).

    Pour suivre, je n'utilise ni de méthode archaïques ni de méthode tout court : je débute depuis deux mois sur VBA. La macro que j'utilise est celle de mon prédécesseur (qui n'est bien sûr pas là pour me montrer comment elle fonctionne).

    Je vous met donc le code de la fonction:

    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    Function nbrligne(i As Long, z As Integer) As Long
     
    Dim v As Long
    v = i ' on stocke i dans v
     
    While Not IsEmpty(Worksheets(z).Cells(i, 3)) = True   'tant qu'on est pas sur une case vide
    i = i + 1
    Wend
    MsgBox ("nombre de lignes de la feuille " & z & ":" & i - 1) 'affichage du nombre de lignes
    nbrligne = i - 1 'renvoi du nombre de ligne totale (avec lignes vides +lignes d'enetetes)
    i = v 'i reprend sa valeur initial
    End Function
     
    Le  code qui rappelle la fonction:
     
    Sub nbj_stk()
     
    Dim i As Long
    Dim nblignes As Long
    Dim nblignes2 As Long
    Dim ligne As Object
    Dim codeart As String
    Dim recupligne As Long
    Dim nbjstk As Long
    Dim rotation As Variant
    Dim z As Integer
    Dim test As Long
     
    z = InputBox("entrer le numero de la feuille d'inventaire a traiter") 'recuperation du numero d'onglet
     
    nblignes = nbrligne(1, z) 'appel de la fonction nbrligne
    nblignes2 = nbrligne(1, z - 1)
    Worksheets(z).Cells(1, 17) = "nbj stock"
     
    For i = 2 To nblignes 'parcours de la feuille
        If Worksheets(z).Cells(i, 13) <> 0 Then 'si montant valo <> 0
        codeart = Worksheets(z).Cells(i, 2) 'recuperation du code article
        Set ligne = Worksheets(z - 1).Range("A2:A" & nblignes2).Find(codeart) 'recherche du code article dans l'onglet chiffre d'affaire
            If Not ligne Is Nothing Then ' si on le trouve
            recupligne = ligne.Row 'on recupere le numero de ligne
            test = Worksheets(z - 1).Cells(recupligne, 4)
                If test <> 0 Then     'si le CA est <> 0
                rotation = (Worksheets(z - 1).Cells(recupligne, 4)) / (Worksheets(z).Cells(i, 13)) 'calcul de la rotation
                nbjstk = 360 / rotation 'puis du nombres de jours de stock
                Worksheets(z).Cells(i, 17) = nbjstk 'que l'on renvoi dans l'onglet d'inventaire
                Else
                Worksheets(z).Cells(i, 17) = 999999 'sinon on renvoit 999999
                End If
           Else
           Worksheets(z).Cells(i, 17) = 999999
           End If
        Else
            Worksheets(z).Cells(i, 17) = 999999
        End If
    Next
    End Sub
    La MsgBox de la fonction me renvoie à : nombre de lignes de la feuille 6 : 0

    Ma colonne contient :
    1ère Ligne : VI
    Lignes suivantes : *

    J'ai testé en modifiant les formats et valeurs.

    Pour ce qui est de la source il s'agit ni plus ni moins que d'un copier coller d'un classeur excel (testé aussi en collage spécial) issu d'une extraction SQL mais pas de lien de données.

    Est-ce plus clair?

  6. #6
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    Bonjour,
    Citation Envoyé par Wormboy74 Voir le message
    ...
    Pour commencer je dirais que je n'ai pas recherché avec <>0. Je met simplement mes explications sous cette forme (pour le coup je trouvais plus rapide d'écrire <>0 que IsEmpty).
    ...
    oui mais cela ne veut pas dire la même chose ... si cellule contient 0 elle n'est pas vide !


    à première vue ton histoire de numéro de feuille ne me plait pas trop , modifie ton message box et vérifie que tu traite bien la bonne feuille :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MsgBox ("nombre de lignes de la feuille " & Worksheets(z).Name & ":" & i - 1) 'affichage du nombre de lignes

  7. #7
    Membre à l'essai
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Juillet 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juillet 2015
    Messages : 10
    Points : 12
    Points
    12
    Par défaut
    Et voilà !

    Plusieurs heures que je m'échine à copier dans un sens, dans l'autre; à modifier mes formats; importer; réimporter...

    Tout ça pour m'apercevoir grâce à toi Bbil que effectivement quand je regarde le résultat de la Msgbox avec le nom de feuille, ce n'est pas la bonne feuille qui est sélectionnée.

    En effet, j'ai omis de dire que je travaille également avec du MyReport qui me crée une "feuille fantôme" (visible sous l'éditeur VBA uniquement avec le préfixe "mr").

    J'ai modifié ma macro en conséquence.

    Tout simplement parfait.

    Grand merci.

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

Discussions similaires

  1. [VBA-E]copie du contenu de la cellule si non vide
    Par zougna dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 19/02/2007, 16h53
  2. [VBA-excel] Affecter une date à la première cellule pleine
    Par DVano dans le forum Macros et VBA Excel
    Réponses: 18
    Dernier message: 10/11/2006, 12h06
  3. [Excel] Détection cellulles pleines
    Par Destiny dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 31/10/2006, 18h41
  4. supprimer lignes/cellules de tableau vides
    Par Drozo dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 09/08/2006, 13h21
  5. [VB][Excel]test la dernière cellule pleine d'une feuille
    Par Mugette dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 22/09/2005, 13h25

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