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 :

Macro VBA ajout zéro en fin de colonne


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Inscrit en
    Juin 2013
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Juin 2013
    Messages : 14
    Par défaut Macro VBA ajout zéro en fin de colonne
    Bonjour,

    Je suis novice en VBA et j'aimerai savoir si on pouvais me donner un coup de main pour une macro.

    Alors mon souci est le suivant :

    j'ai 3 colonne (A-B-C) qui ne se terminent pas à la même ligne (exemple :colonne A s’arrête à la linge 200, la B à la ligne 150 et la C à la ligne 250).
    J'aimerai mettre un zéro sur les lignes 251 des trois colonnes.

    Avec une macro est-il possible repérer automatiquement quelle colonne est la plus longue et ajouter trois zéro sur la même ligne en fonction de la colonne la plus longue?


    Merci pour votre aide...

  2. #2
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    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 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    oui bien sûr c'est possible.

    Intéresse toi à la propriété .CurrentRegion de l'objet Range, en inspectant son nombre de lignes (Rows.Count) tu et en connaissant la ligne de départ (1), tu obtiens facilement le numéro de la dernière ligne, qu'il ne te reste qu'à remplir avec tes 0.

    Mon petit doigts me dit que Range("A1").CurrentRegion.Rows.Count est suffisant pour que tu avances et puisse résoudre ta problématique... mais chut, faut pas le répéter

  3. #3
    Membre averti
    Inscrit en
    Juin 2013
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Juin 2013
    Messages : 14
    Par défaut
    Bonjour,


    Merci pour ta réponse mais CurrentRegion ne fonctionnait pas vu que j'avais des cellules vides dans mes colonnes.
    J'ai néanmoins trouvé une solution ci-dessous mais du coup sa me met un zéro que dans la fin de colonne C (C251) or j'aimerai ajouté aussi un zéro en A251 et B251 ?

    Aurais tu une solution ou un indice...?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Range("C" & Rows.Count).End(xlUp).Offset(1).Select
    Selection.Value = "0"

  4. #4
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    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 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    si CurrentRegion ne fait pas l'affaire, il faut augmenter la portée de ta constitution de plage.

    Utilises donc UsedRange, au travers d'un Rows.count.end(xlup).row, que tu auras ramené au trois premières colonnes pour obtenir la réelle dernière ligne de ta plage de trois colonnes

  5. #5
    Membre averti
    Inscrit en
    Juin 2013
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Juin 2013
    Messages : 14
    Par défaut RESOLU
    Super! sa fonctionne parfaitement!

    merci beaucoup Joe!

  6. #6
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    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 374
    Billets dans le blog
    8
    Par défaut re
    re
    bonjour
    allons Joe!!!
    et si le usedrange fait plus que 3 colonnes et que par exemple la colonne 6 va jusqu'à la ligne 500

    et que la ligne final en ABC correspond a 250 comment on fait hein !!

    non !! non !! c'est pas bon avec ta méthode cela implique qu'il utilise que ces 3 colonnes dans le sheets

    j'ai regarder le post hier j'ai failli répondre la même chose

    j'ai donc tout essayé a part avec specialcell xltypelastcell sur un range je vois pas trop

    A méditer
    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

  7. #7
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut
    Bonjour,

    je serais parti aussi sur le UsedRange à cause des blancs.

    Maintenant effectivement si d'autres colonnes sont plus grandes,
    alors calculer chaque fin des trois colonnes (via End(xlUp) ou Find) et conserver la plus grande (Application.Max) …

    _________________________________________________________________________________________________________
    Je suis Paris, Nice, Bruxelles, Charlie, …

  8. #8
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    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 374
    Billets dans le blog
    8
    Par défaut re
    re
    Marc on prends un raccourci si tu veux bien

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub test()
    Dim L1 As Long, L2 As Long
        L1 = Columns("A:c").SpecialCells(xlCellTypeConstants, 2).Row
        L2 = Columns("A:c").SpecialCells(xlCellTypeFormulas, 1).Row
    MsgBox "c'est la ligne est la " & Application.Max(Array(L1, L2)) + 1
    End Sub
    et la on travaille uniquement sur les 3 colonne concernées hein jojo!!!!

    ajouter éventuellement le test has formule pour L2

    on peut aussi parler de find "*" xlprevious
    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

  9. #9
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    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 169
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par joe.levrai Voir le message
    Utilises donc UsedRange, que tu auras ramené au trois premières colonnes pour obtenir la réelle dernière ligne de ta plage de trois colonnes

    hum hum ...

    y'a un piège que je n'ai pas réussi à reproduire avec ceci ?
    sans instruction End()

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UsedRange.Resize(, 3).Find("*", , , , xlRows, xlPrevious).Row
    EDIT : m'étant arrêté au début de ton message #6 pour défendre mon bifteack avec ce message, je viens de voir qu'en fin de #8 tu redeviens raisonnable

  10. #10
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    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 374
    Billets dans le blog
    8
    Par défaut re
    re
    chez moi j'ai l'erreur 438
    l'Object ne gère pas cette propriété
    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

  11. #11
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    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 169
    Billets dans le blog
    5
    Par défaut
    Tu as préfixé la feuille ?
    ce bout de code fonctionne en l'état uniquement dans un module de feuille

  12. #12
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour,
    Il y aurait énormément à dire à ce sujet (pas tout un livre, mais une rédaction assez longue).
    - A patricktoulon : tant l'utilisation de la conjugaison de Usedrange avec End ou celle de xltypelastcell (ce qui revient presque au même) ne conduisent à un bon résultat que si la feuille ne comporte, après la vraie dernière ligne remplie, aucune cellule avec formule ou dotée d'un format (entre autres).
    j'ai donc tout essayé a part avec specialcell xltypelastcell sur un range je vois pas trop
    appelle la correction suivante : specialcell xltypelastcell ne saurait s'appliquer à un Range. Concerne la feuille entière
    - la méthode montrée par joe.levrai est de très loin la meilleure et elle efficace à plus de 99,9999 % (il n'y a qu'une infime - vraiment très infime - chance de tromperie. Le cas est tellement rare que je ne vais pas l'exposer ici, dans ce qui se transformerait en roman).

    Je voudrais en profiter par ailleurs pour dire qu'il est toujours utile de faire précéder l'utilisation du UsedRange (idem en ce qui concerne d'ailleurs la xltypelastcell) d'une ligne de code de rafraîchissement. Celle-ci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    la_feuille_concernée.UsedRange
    cette ligne de code recalcule le usedrange alors que, sans elle, il pourrait être resté ce qu'il était avant EFFACEMENT (pas suppression) de lignes ou colonnes. On évite ainsi des recherches faites inutilement sur une plage plus grande que celle nécessaire.
    Amitiés

    EDIT Ah ! l'importance des mots ! Je me suis moi-même fait avoir de bon matin.
    Ce n'est pas "suppression", mais "effacement", qu'il faut lire dans ma dernière phrase ...

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

Discussions similaires

  1. [XL-2007] Macro VBA ajout un champ dans base de donnée
    Par Sangoku76 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 30/10/2012, 10h35
  2. Macro VBA Excel : Comparaison des deux 1ères colonnes de 2 fichiers Excel
    Par techneric dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 10/01/2007, 11h00
  3. [VBA-] ajout de macro dasn les sources fiables
    Par SpaceFrog dans le forum Général VBA
    Réponses: 2
    Dernier message: 27/09/2006, 20h28
  4. [VBA] Ajout colonne dans recordset
    Par le_niak dans le forum Access
    Réponses: 25
    Dernier message: 31/07/2006, 12h35

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