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 :

faire remonter des valeurs


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Inscrit en
    Octobre 2008
    Messages
    203
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 203
    Points : 66
    Points
    66
    Par défaut faire remonter des valeurs
    Bonjour , imaginez un simple tableau de chiffres . J'ai crée une macro qui me supprime la ligne courante du tableau , jusque là tout va bien .
    Mais , je souhaite faire remonter les valeurs en dessous de la ligne supprimée , pour pas qu'il n'y ait de ligne vide dans mon tableau , et après quelques essais je n'y arrive pas , donc voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub enlever()
    Dim j As Integer, i As Integer, x As Integer
    x = derniereLigne
    i = Selection.Row
        For j = 1 To 5
            Cells(i, j).ClearContents
        Next j
    Range(Cells(i + 1, 1), Cells(x, 5)).Value = Range(Cells(i, 1), Cells(x - 1, 5)).Value
    End Sub
    Vous voyez j'ai essayé de transférer les valeurs de la plage du dessous à une plage de meme taille mais une ligne au dessus et ça ne me donne pas ce que je souhaite.

    Quelqu'un aurait il une solution?

    merci

  2. #2
    Membre expérimenté Avatar de laetitia
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 281
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 281
    Points : 1 512
    Points
    1 512
    Par défaut
    bonjour shaku le forum peut etre mettre delete a la place de ClearContents
    SALUTATIONS

  3. #3
    Membre du Club
    Inscrit en
    Octobre 2008
    Messages
    203
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 203
    Points : 66
    Points
    66
    Par défaut
    interdiction d'utiliser delete

  4. #4
    Membre expérimenté Avatar de laetitia
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 281
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 281
    Points : 1 512
    Points
    1 512
    Par défaut
    re, pourquoi??????????????????????????????????????????????????
    SALUTATIONS

  5. #5
    Membre du Club
    Inscrit en
    Octobre 2008
    Messages
    203
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 203
    Points : 66
    Points
    66
    Par défaut
    non mais laetitia tout va bien avec clearcontents pas de panique , là j'ai juste un petit soucis avec mes plages c'est tout

  6. #6
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Points : 5 537
    Points
    5 537
    Par défaut
    Citation Envoyé par shaku Voir le message
    interdiction d'utiliser delete
    Bonjour, shaku,

    J'ai bien l'impression que l'on est en train de faire, l'un après l'autre, tous tes exercices imposés...

    laetitia t'a donné la solution VBA logique... mais tu cherches (comme pour d'autres exercices que nous avons traités à ta place) à le faire comme on te l'a imposé dans le cadre d'exercices de cours. C''est visible et peu ....honnête (pardonne-moi de te le faire remarquer, mais tu vas être noté sur ce que d'autres ont fait !)
    Alors attends :
    on t'interdit d'utiliser Delete ? ===>> soit ===>> abonde donc un tableau dynamique, traite-le et importe le résultat.
    Tu ne vas, j'espère, pas nous dire que "ça non plus" et que tu veux par force "y aller" avec la manoeuvre que tu/on t'es/a définie ...

    EDIT (et c'est un indice) :
    d'autant qu'il ne faut pas être très fort pour voir que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range(Cells(i + 1, 1), Cells(x, 5)).Value = Range(Cells(i, 1), Cells(x - 1, 5)).Value
    remplit non pas à compter de la ligne "effacée" pais à compter de la suivante (et ne change donc rien !)
    et, en prime, tu y colles non ce qu'il y avait en dessous, mais ce qu'il y a, y compris la ligne effacée !

  7. #7
    Membre du Club
    Inscrit en
    Octobre 2008
    Messages
    203
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 203
    Points : 66
    Points
    66
    Par défaut
    J'ai bien l'impression que l'on est en train de faire, l'un après l'autre, tous tes exercices imposés...

    laetitia t'a donné la solution VBA logique... mais tu cherches (comme pour d'autres exercices que nous avons traités à ta place) à le faire comme on te l'a imposé dans le cadre d'exercices de cours. C''est visible et peu ....honnête (pardonne-moi de te le faire remarquer, mais tu vas être noté sur ce que d'autres ont fait !)
    Alors t'es bien culoté et malhonnête de dire ça car je n'ai jamais demandé de solution toute faite , je travaille toujours beaucoup avant contrairement à bien des gens . Ensuite , c'est un forum d'aide , fais pas l'hypocrite en faisant style que personne vient ici pour leurs devoirs . Ensuite , je trouve la plupart des solutions moi même , si tu veux que je poste tous mes exercices très bien j'en ai au moins 300 .
    Et finalement ce n'est pas pour un devoir . Je me passerai de tes messages à l'avenir .

  8. #8
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Points : 5 537
    Points
    5 537
    Par défaut
    Comme tu veux !
    Dis-nous donc pour quelle raison tu ne veux pas du Delete (qui est la SOLUTION VB), hein ...
    Bon ...
    Analyse donc ce que tu as écrit (ton code) ... traduis-le en français pour toi-mlême !!!

    Fais ensuite ton algo (super simple : du bouche-trou).
    Et transpose ensuite cet algo en code !

  9. #9
    Membre du Club
    Inscrit en
    Octobre 2008
    Messages
    203
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 203
    Points : 66
    Points
    66
    Par défaut
    je ne veux pas du delete car le delete fait automatiquement ce que je veux , moi je veux savoir faire comme delete mais avec une méthode perso , par exemple avec les range . Mon idée de base était simple :

    1.Je supprime le contenu des cellules sélectionnées , chose que fait le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub enlever()
    Dim j As Integer, i As Integer, x As Integer
    x = derniereLigne
    i = Selection.Row
        For j = 1 To 5
            Cells(i, j).ClearContents
        Next j
    Ensuite , une fois la ligne i supprimée , je prends la plage de la ligne i+1 ( donc du dessous ) , à la dernière ligne du tableau , donc x , et je la transpose 1 pligne plus haut dans une plage de même taille . Et ce code était censé le faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range(Cells(i + 1, 1), Cells(x, 5)).Value = Range(Cells(i, 1), Cells(x - 1, 5)).Value
    car c'est la traduction vba de ce que j'ai dit plus haut sauf erreur .

    Mais à la place il me supprime une seconde ligne...

  10. #10
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Points : 5 537
    Points
    5 537
    Par défaut
    Citation Envoyé par shaku Voir le message
    Mais à la place il me supprime une seconde ligne...
    pardi !!!
    relis-moi donc
    tu fais exactement l'inverse de ce que tu exposes !
    Fais ton algo et montre-le

  11. #11
    Membre du Club
    Inscrit en
    Octobre 2008
    Messages
    203
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 203
    Points : 66
    Points
    66
    Par défaut
    mais l'algo je viens de le dire , l'algo c'est bien la traduction en français du code .

    Non je ne fais pas l'inverse car figure toi que j'ai déjà essayé d'écrire l'inverse de ce que j'ai écrit et c'est encore pire .

  12. #12
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Points : 5 537
    Points
    5 537
    Par défaut
    Un algo s'esprime en algo (ligne par ligne) pas en "français parlé"
    je maintiens ce que j'ai dit sur ce que tu as écrit (ton code) et j'estime en avoir assez/trop dit pour ce qui est à ce point élémentaire.
    Bonne fin de semaine et bon travail.

  13. #13
    Membre du Club
    Inscrit en
    Octobre 2008
    Messages
    203
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 203
    Points : 66
    Points
    66
    Par défaut
    1. On supprime toute la ligne i ( des colonnes 1 à 5 ) .

    2. On prend la plage de la ligne i+1 à la fin du tableau .

    3. On met les valeurs de cette plage dans une plage de même taille qui commence ligne i.

    C'est vraiment mot pour mot ce que j'ai écrit en vba , j'ai mes tutos sous les yeux qui disent cela...

  14. #14
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Points : 5 537
    Points
    5 537
    Par défaut
    Citation Envoyé par shaku Voir le message
    1. On supprime toute la ligne i ( des colonnes 1 à 5 ) .

    2. On prend la plage de la ligne i+1 à la fin du tableau .

    3. On met les valeurs de cette plage dans une plage de même taille qui commence ligne i.

    C'est vraiment mot pour mot ce que j'ai écrit en vba , j'ai mes tutos sous les yeux qui disent cela...
    et non, justement !
    ton remplissage (tel que ton code a été écrit) ne commence pas à la ligne i, mais à la ligne i+1 !!!
    et ton code remplit en plus, à compter de la ligne i + 1, tout ce qui est présent à partir de la ligne i (qui est maintenant vierge !) ===>> deux lignes blanches !
    Je te le répête : c'est l'inverse qu'il faut faire (et l'inverse ne concerne que la ligne que je me suis évertué à dénoncer)..

    C'est vraiment si dur que cela à comprendre ???

    EDIT : et ce n'est pas tout !
    ce sera mieux, mais non parfait (car ton pseudo-algo n'est pas complet, d'une part, et que, d'autre part, tu ne prends pas la totalité de ce qui est en-dessous ...
    (toutes mes remarques et observations sont faites en ne faisant que lire ton code, sans même prendre la peine de faire le moindre petit essai !!!...)

  15. #15
    Membre expérimenté Avatar de laetitia
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 281
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 281
    Points : 1 512
    Points
    1 512
    Par défaut
    salut l ami ucfoutu avec toi dans ces moments tres difficile
    j ai encore appris avec ta logique merci a+ leti
    SALUTATIONS

  16. #16
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Points : 5 537
    Points
    5 537
    Par défaut
    Bonsoir, laetitia,

    oh, tu sais...
    la logique est dans cette affaire assez évidente :
    elle est la même que celle qui consisterait à donner à un objet A la couleur de l'objet B
    - si l'on peint l'objet B de la couleur de A, les deux objets auront bien la même couleur, mais elle ne sera pas celle de l'objet B (ni pour A, ni pour B) ...
    un algo est-il alors vraiment nécessaire ou la logique s'impose-t-elle ?
    That's the question
    Pour le reste (le manquant, car il y a un manquant dans le code présenté...), ce n'est pas plus compliqué qu'avec un jeu de bûchettes et il ne faut pas sortir de Saint-Cyr pour le "voir"....
    Alors : le développement informatique, dans cette "énorme" affaire ? ===>> il passe bien évidemment par un mécanisme de logique (normalement fort naturelle en l'espèce).
    Conclusion : pas de développement valable sans apréhension de la logique.

    C'est là l'essentiel (et c'est ce qui manquait, apparemment !)

    Voilà voilou !

    Amitiés.

  17. #17
    Membre du Club
    Inscrit en
    Octobre 2008
    Messages
    203
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 203
    Points : 66
    Points
    66
    Par défaut
    J'ai finalement réussi , merci ucfoutu pour ton aide .

  18. #18
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Points : 5 537
    Points
    5 537
    Par défaut
    Bon, shaku,

    Je suis content que tu aies pu apréhender cette erreur (dont je suppose qu'elle était dûe à une grande fatigue)

    J'espère que, dans la foulée, tu as également pu découvrir que, si finalement tu fais remonter d'une ligne toutes les lignes en dessous de celle que tu as effacée, il est totalement inutile de l'effacer d'abord, puisqu'elle sera de toutes manières "écrasée" par les données de la ligne i + 1, selon le mécanisme (pas algo mais mécanisme) suivant :
    d étant la dernière ligne non vide et i étant la ligne à effacer :
    - envoyer à partir de i la plage de i+1 à d inclus
    - effacer la ligne d (devenue double ( sur d-1) mais ayant gardé le même rang d)

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

Discussions similaires

  1. Un timer pour faire varier des valeurs pour une période donnée.
    Par zimoun dans le forum Interfaces Graphiques en Java
    Réponses: 3
    Dernier message: 22/10/2009, 01h42
  2. Comment faire remonter des exceptions
    Par specsy dans le forum Débuter avec Java
    Réponses: 5
    Dernier message: 02/05/2008, 11h04
  3. Réponses: 4
    Dernier message: 23/04/2008, 17h03
  4. faire correspondre des valeurs
    Par thierrry81 dans le forum Access
    Réponses: 2
    Dernier message: 06/12/2006, 22h38
  5. Réponses: 17
    Dernier message: 04/02/2005, 12h05

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