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 :

Premiere cellule non vide dans un tableau 2D


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2013
    Messages : 34
    Par défaut Premiere cellule non vide dans un tableau 2D
    Bonjour a tous!

    Voila mon probleme : je souhaiterai parcourir un tableau 2D (il y a des formules dans chacune des cellules) ligne apres ligne et que ma macro me renvoie tout d'abord la valeur de la premiere cellule non vide rencontree et egalement deux valeurs qui se trouvent au debut de la ligne correspondant a cette cellule!


    Merci d'avance pour votre aide!

  2. #2
    Membre Expert Avatar de QuestVba
    Homme Profil pro
    Enseignant
    Inscrit en
    Juillet 2012
    Messages
    2 475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2012
    Messages : 2 475
    Par défaut
    Bonjour,

    Vit fait,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub Cellule_Remplie()
     
    For lig = 1 To 15
     
        For col = 1 To 15
     
          If Not IsEmpty(Cells(lig, col)) Then Cells(lig, col).Activate: Exit Sub
     
        Next col
     
    Next lig
     
    End Sub

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    237
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 237
    Par défaut
    Bonjour

    Il y a souvent une confusion entre un tableau déclaré sur une feuille Excel et un tableau() , moi je dis silicium ou en mémoire et que l’on peut appeler sens passer par la carte graphique, c’est ce qui rend ces tableau() si rapide
    Personelement je les utilise le plus souvent possible,
    Voici mes trois liens favoris qui traitent des tableaux

    http://boisgontierjacques.free.fr/pa...e/tableaux.htm
    http://silkyroad.developpez.com/vba/tableaux/
    http://didier-gonard.developpez.com/...s-tableau-vba/

    A+
    Henri

  4. #4
    Membre Expert
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2011
    Messages
    1 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 858
    Par défaut
    Bonjour,

    S’il y a des formules dans chacune des cellules, c’est qu’il n’y a pas de cellule vide.
    Si tu souhaites que ta macro renvoie tout d'abord la valeur de la première cellule qui contient une valeur différente de " ", c’est jouable.
    Par contre, si cette cellule n’est pas une des 2 valeurs qui se trouvent au début de la ligne, c’est que ces 2 valeurs de début de ligne sont égales à " " puisque la cellule trouvée est la première cellule qui contient une valeur différente de " ".
    Non ???

    Cordialement.

  5. #5
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Je n'ai pas compris pourquoi vous aviez retiré votre fichier.

    Ci-joint, une solution possible avec une macro événementielle à mettre dans le module de l'onglet Sheet1

    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
    Option Explicit
     
    Private Sub Worksheet_Change(ByVal CellulesColonnesAouB As Range)
     
    Dim LigneDeTitre As Long
    Dim LigneEnCours As Long
    Dim TotalLigne As Single
     
       If CellulesColonnesAouB.Count > 6 Then Exit Sub
     
       If Not Application.Intersect(CellulesColonnesAouB, Columns("A:B")) Is Nothing Then
            LigneDeTitre = 2
            LigneEnCours = LigneDeTitre + 1
            For LigneEnCours = LigneDeTitre + 1 To ActiveSheet.UsedRange.Rows.Count
                TotalLigne = Application.WorksheetFunction.Sum(Range(ActiveSheet.Cells(LigneEnCours, 5), ActiveSheet.Cells(LigneEnCours, 9)))
                If TotalLigne > 0 Then
                       ActiveSheet.Range("L3") = ActiveSheet.Cells(LigneEnCours, 1)
                       ActiveSheet.Range("M3") = ActiveSheet.Cells(LigneEnCours, 2)
                       ActiveSheet.Range("N3") = ActiveSheet.Cells(LigneEnCours, 3)
                       Exit For
                End If
            Next
       End If
     
    End Sub
    Pour mémoire la feuille se présente sous cette forme : Premiere cellule non vide

    Cordialement.
    Dernière modification par AlainTech ; 11/07/2013 à 11h46. Motif: Suppression de la citation inutile

  6. #6
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2013
    Messages : 34
    Par défaut
    Bonjour a tous!
    Tout d'abord merci de vos reponses mais je n'ai pas encore trouve mon bonheur!

    Voici en PJ l'Excel (je ne l'avais pas vraiment supprime, j'avais en fait change son contenu puisque ma regle de selection avait change entre temps). Par ailleurs j'ai teste les codes et ceux ci ne semblent pas vouloir fonctionner : si je change les valeurs des donnees de base le retour est toujours le meme...

    Je reprecise mon probleme : je souhaiterai parcourir une zone (composee d'un nombre de lignes et de rangees fixe), ligne par ligne jusqu'a ce que je rencontre la premiere cellule non vide (et par ceci, j'entends la premiere cellule differente de " " ). Une fois cette cellule trouvee je veux que la macro me renvoit le contenu de celle ci mais egalement certaines des donnees qui se trouve en amont de celle ci (au tout debut de la meme ligne).

    Re voila l'Excel en PJ!

    Merci encore pour votre aide!
    Fichiers attachés Fichiers attachés

  7. #7
    Invité
    Invité(e)
    Par défaut
    Bonsoir,

    Mon code fonctionne correctement même sur votre nouveau fichier. Avez-vous testé le fichier joint dans mon premier message ?

    Etes vous certaine d'avoir placé le code dans le module de la première feuille et pas dans un module standard ?

    Cordialement.
    Dernière modification par AlainTech ; 11/07/2013 à 11h47. Motif: Suppression de la citation inutile

  8. #8
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2013
    Messages : 34
    Par défaut
    Oui, j'ai teste votre fichier mais des que je change les valeurs de D1 ou B2 rien ne se met en place. En fait la macro ne semble pas vouloir se lancer a aucun moment... Et quand je copie/colle votre code dans le module de ma premiere feuille je n'ai aucun moyen de lancer la macro, rien ne veut se passer!

  9. #9
    Membre extrêmement actif
    Avatar de NVCfrm
    Homme Profil pro
    Administrateur Système/Réseaux - Developpeur - Consultant
    Inscrit en
    Décembre 2012
    Messages
    1 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Administrateur Système/Réseaux - Developpeur - Consultant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2012
    Messages : 1 037
    Billets dans le blog
    5
    Par défaut
    Bonsoir,

    Juste pour orienter:

    Une zone, dont on ignore les limites s'obtient rapidement avec 2 propriétés Range
    1 _ .CurrentRegion qui renvoi une seule collection range se rapportant à l'objet Range
    2 _ .SpecialCells peut renvoyer une ou plusieurs collections Range en rapport avec l'objet. Ou une erreur si rien ne s'y rapporte.
    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
     
        Set zone = Range("S10").CurrentRegion
        Set zone = Range("a1").Cells(1020, 201).CurrentRegion
     
    'Ici on cible une zone spéciale dans une zone générale pouvant renvoyer une Collection Areas. 
        Set zone = Range("FX301").CurrentRegion.SpecialCells(xlCellTypeFormulas)
    'Voici un exemple de parcours de zone
        For Each zone In Range("f10").CurrentRegion.SpecialCells(xlCellTypeFormulas).Areas
            MsgBox zone.Address
        Next
    'Repérer une valeur dans un Tableau Range? il y a mille et une méthodes."
    'Voici une:
        Set cible = zone.Find("?", zone.Cells(1, 1), xlValues, , xlByRows, xlNext, False)
     cible renvoi le premier objet range contenant la valeur ou Nothing.
    'teste le résultat de la recherche sur cible
       If Not cible Is Nothing Then
    on dit que tous les chemins mènent à Rome.
    Le principe de la distance la plus courte entre 2 points étant étant ce à quoi l'on aspire dans un parcours, je proposerais d'adapter ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
        Dim zone As Range, cible As Range
     
        On Error Resume Next
        Set cible = Range("f10").CurrentRegion.Find("b", , xlValues, , xlByRows, xlNext, False).Range(Cells(1, 1), Cells(1, 3))
        If cible Is Nothing Then
            Err.Clear
            MsgBox "Aucune occurrence trouvée!"
        Else
            MsgBox cible.Address
        End If
        On Error GoTo 0
        ...

  10. #10
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Frizz Voir le message
    Oui, j'ai teste votre fichier mais des que je change les valeurs de D1 ou B2 rien ne se met en place. En fait la macro ne semble pas vouloir se lancer a aucun moment... Et quand je copie/colle votre code dans le module de ma premiere feuille je n'ai aucun moyen de lancer la macro, rien ne veut se passer!
    Avez-vous remarqué qu'il s'agissait d'une macro événementielle ? C'est à dire qu'il n'y a pas besoin d'un bouton pour la lancer. Elle ne fonctionne par contre que si on modifie une cellule dans la colonne A ou la colonne B, mais pas dans les deux, c'est volontaire.

    Si les deux cellules dans les colonnes A et B changent en même temps, il faut modifier le code dans la ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
       If CellulesColonnesAouB.Count > 6 Then Exit Sub
    et mettre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
       If CellulesColonnesAouB.Count > 7 Then Exit Sub
    Il est donc important de connaître la façon dont sont alimentées les cellules dans les colonnes A et B.

    Par ailleurs, si ce tableau n'est qu'une partie de la feuille et que le nombre de cellules changeant en même temps dépasse cette limite dans la feuille, il vous faut adapter cette valeur (y compris les cellules contenant des formules).

    Vous aurez remarqué que l'actualisation des cellules L3 à N3 fonctionnait dès que la somme des cellules des colonnes E à I était supérieure à 0, et débouclait à la première occurrence.

    Cordialement.
    Dernière modification par Invité ; 28/06/2013 à 04h24.

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 10/03/2011, 09h37
  2. chercher le nombre de cellules non vides d'un tableau
    Par ellewided dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 29/07/2009, 09h53
  3. Recherche de cellules non vides dans une colonne
    Par John81 dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 05/09/2008, 22h57
  4. Réponses: 5
    Dernier message: 22/02/2008, 19h34
  5. [VBA-E]selectionner la premiere cellule non vide d'une ligne
    Par muse47 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 14/10/2005, 08h11

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