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 sélectionner une plage qu'on ne connait paz à l'avance la dimension en vba [XL-2016]


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2017
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2017
    Messages : 13
    Par défaut comment sélectionner une plage qu'on ne connait paz à l'avance la dimension en vba
    Bonjour le forum.
    Depuis quelques jours je cherche à trouver une macro qui va selectionner une ligne précise dont la première cellule (en colonne A) est activée. Mais donc le StartRange sera à partir de la colonne I et le EndRange sera la colonne non vide +1. L'intersection entre les deux plage sera considéré comme plage de travavail. On pourra donc conpter le nombre de colonnes de la plage puis multiplier par une valeur cobtenue dans la colonne H de la même ligne, puis comparer à la somme des valeurs comprise dans la plage.

  2. #2
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2017
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2017
    Messages : 13
    Par défaut J'ai pensé à ceci mais ça ne me donne pas le resulta escompté. Svp votre aide me sera d'une très grande utilit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Function arrieres() As String 
      Dim valReel As Long 
      Dim valtho As Long j = 1   
     
      Do While Worksheets(1).Cells(1, j).Value <> "" 
        If (Worksheets(1).ActiveCell.Offset(0, 2).Value = Cells(1, j).Value And Worksheets(2).Cells(1, 26).Value = Cells(1, j).Value) Then 
          Row.Select.Count Range("a27").Value = Row.Select.Count 
        End If 
        j = j + 1 
      Loop  
      varlreel = Application.WorksheetFunction.Sum(Rows.Select) 
      valtho = Row.Select.Count * Worksheets(1).Activate.Offset(0, 7).Value  
      arrieres = valtho - varlreel Range("a28").Value = arrieres 
    End Function

  3. #3
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 176
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    A condition d'avoir la première ligne et la première colonne remplie
    • Vous enclenchez l'enregistreur de macro
    • vous vous placez sur la première cellule du tableau (en haut et à gauche).
    • vous utilisez le raccourci clavier ctrl + * (étoile du pavé numérique)


    Voici le code généré
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Sub Macro1()
        Range("A1").Select
        Selection.CurrentRegion.Select
    End Sub
    Comme il n'y a aucune raison d'utiliser la méthode Select, ni l'objet Selection et qu'il est préférable pour éviter des soucis par la suite, nous allons utiliser une variable objet en précisant la parentalité complète de l'objet Range

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub Macro1()
     Dim rng As Range
     Set rng = ThisWorkbook.Worksheets("Feuil1").Range("A1").CurrentRegion
     ' le code
     MsgBox "L'adresse de la plage occupe " & rng.Address
     ' Fin du process
     Set rng = Nothing
    End Sub
    Pour connaître le nombre de colonnes c'est MsgBox "Nombre de colonnes " & rng.Columns.Count

    En convertissant votre plage en tableau structuré, c'est encore plus simple

    A lire éventuellement

    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2017
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2017
    Messages : 13
    Par défaut
    Merci Mr Philippe pour votre precieux temps que vous avez bien voulu m'accorder en me produisant quelques pistes de sorties.

    Mais le souci c'est que je ne souhaite pas afficher uniquement le nombre de colonnes selectionnées. C'est une procédure qui doit être clôturée lorque l'application aura trouvée si le locataire cumule le arrièrés ou pas. Donc l'userform a dejà selectionné le nom du locataire en question. Il est maintenant question de determiner le le total des loyers qu'il a payé depuis l'occupassion des lieux en sommant les loyers mensuels versés par ce dernier(qui s'affichent sur la ligne en question), puis determier ce qu'il devrait verser en multipliant le nombre de colonnes represantant ici le nombre de mois par le loyer mensuel. La diferrence pourra être considérée comme arriérés.

    Voilà en gros le problème à rèsoudre. Merci d'avance

  5. #5
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 176
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Je suis convaincu, qu'il n'est nul besoin de passer par du VBA pour obtenir ce type de résultat mais pour en être certain et pour pouvoir vous aider, il faudrait obtenir une image succincte de vos données pour que l'on puisse voir comment elles sont organisées ainsi que le résultat attendu.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  6. #6
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2017
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2017
    Messages : 13
    Par défaut
    Hello!
    Merci une fois de plus pour vos observations car grâce à cela, je trouve de jour en jour de nouvelles inspirations. Vous m'avez demandez d'apporter plus d'élements concrèts pour qu'une solution definitive soit trouvée à mon problème. J'ai fait des captures d'écran que vous trouverez en bas de ce texte. Comme je disais dans le commentaire précédent, l'objectif est de recuperer les informations contenues dans l'userform et renseigner dans la feuille1, en tenant compte de l'année selectionnée ainsi que du mois. C'est à partir de là que l'application renseigne cette date dans la cellule A501. I'équation qui reste à resoudre concerne celle d'afficher le montant des arriérirés sur l'userform. Et aussi renseigner le montant payer dans la feuille1 une fois valider.

    Dans l'attente des vos observations, merci une fois de plus.






    Nom : 1.jpg
Affichages : 142
Taille : 170,5 KoNom : 2.jpg
Affichages : 126
Taille : 63,6 KoNom : 3.jpg
Affichages : 128
Taille : 94,0 Ko

  7. #7
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 176
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Comme je l'avais écrit, une formule native peut résoudre ce problème. Au vu de l'illustration publiée la fonction DECALER pourrait faire l'affaire.

    Cependant une meilleure organisation des données serait un plus.
    Ainsi un tableau structuré contenant les données générales et un autre avec les payements simplifierait grandement le projet et éviterait de construire une usine à gaz

    Dans l'illustration ci-dessous, on peut voir à gauche les données générales et à droite les payements de loyers
    Pour éviter les homonymes, on prévoit dans les deux tables une clé qui est le résultat de la concaténation du nom et prénom des personnes

    Dans le tableau de gauche,
    le calcul du nombre de mois d'occupation est calculé dans la colonne Durée par la fonction
    Code formule : Sélectionner tout - Visualiser dans une fenêtre à part
    =DATEDIF([@[Date d''entrée]];AUJOURDHUI();"m")+1
    le total des loyers à percevoir (colonne Total loyer) est une simple multiplication
    Code formule : Sélectionner tout - Visualiser dans une fenêtre à part
    =[@Durée]*[@Loyer]
    le total reçu par personne à l'aide de la fonction SOMME.SI
    Code formule : Sélectionner tout - Visualiser dans une fenêtre à part
    =SOMME.SI(Tableau2[Key];[@Key];Tableau2[Montant])
    le solde à payer avec une simple soustraction agrémenté par une mise en forme conditionnelle mettant en évidence les retards de payement
    Code formule : Sélectionner tout - Visualiser dans une fenêtre à part
    =[@[Total loyer]]-[@[Total reçu]]
    la rédaction de ma réponse a pris plus de temps que la création des formules

    Nom : 210129 dvp Loyer.png
Affichages : 82
Taille : 80,8 Ko

    [EDIT]
    et bien entendu, un tableau croisé dynamique en quelques clics pourrait nous permettre de présenter un tableau avec les payements par mois
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  8. #8
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2017
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2017
    Messages : 13
    Par défaut
    Hi Mr philippe merci pour vos explications
    Le symbole @ est juste à titre indicatif ou c'est vraiment necéssaire dans la formule?

  9. #9
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 176
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Le symbole @ est juste à titre indicatif ou c'est vraiment necéssaire dans la formule?
    Cela fait partie de la syntaxe des références structurées.

    Je vous invite à lire les tutoriels sur la question dont j'ai déjà publié les liens dans ma première réponse (fil #3)
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  10. #10
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2017
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2017
    Messages : 13
    Par défaut
    Merci Mr Philippe pour vous orientations. Ça y est, problème résolu. merci à l'équipe.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 27/09/2006, 19h41
  2. Comment sélectionner une plage de cellules non consécutives?
    Par jokair dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 18/08/2006, 15h36
  3. [TStringGrid] Comment sélectionner une cellule ?
    Par zidenne dans le forum Composants VCL
    Réponses: 1
    Dernier message: 18/11/2005, 10h45
  4. Réponses: 2
    Dernier message: 24/08/2005, 10h59
  5. Comment sélectionner une ligne dans une TStringGrid ?
    Par Ben_Le_Cool dans le forum Composants VCL
    Réponses: 11
    Dernier message: 22/08/2005, 12h38

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