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 :

Questions de débutant


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Inscrit en
    Novembre 2008
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 18
    Par défaut Questions de débutant
    Bonjour,

    Cela fait à peine 2 jours que j'ai découvert VBA et j'ai déjà parcouru pas mal des cours concernant Vba appliqué à Excel.
    Je dois en effet faire quelques petites macros pour une feuille Excel. Il s'agit de pouvoir extraire certaines informations d'un bordereau de prix et d'effectuer des calculs sur des distances, surfaces et volumes pour faciliter la saisie de quantités.

    Il se pose à moi 2 petits problèmes et comme je manque de temps pour trouver la solution par moi-même, je sollicite votre aide.

    - Pour le 1er, il faudrait que je puisse sélectionner la cellule la plus à gauche de la ligne où je me trouve quand j'exécute ma macro (afin de pouvoir copier les bonnes informations).

    Voici le bout code que j'avais fait pour cela:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim Colonne As Integer
     
    Colonne = -ActiveCell.Column
    ActiveCell.Offset(0, Colonne).Range("A1:C1").Select
    Selection.Copy

    Le problème c'est que l'argument Colonne dans la commande Offset est invalide alors que quand je passe le curseur dessus lors de l'exécution dans le code il s'affiche bien une valeur numérique...je ne comprends donc pas pourquoi ce n'est pas bon.


    - Le 2ème problème c'est que je ne sais pas comment évaluer numériquement une opération que je tape dans dans une zone de texte.

    En fait, j'affecte une opération simple du style 2+3 à une variable que j'ai déclaré de type currency (dans le cas où il y aurait des décimales) mais comme 2+3 n'est pas une valeur numérique j'obtiens une erreur lors de l'éxécution.
    C'est pourquoi je voulais savoir comment évaluer numériquement 2+3 pour pouvoir l'affecter et le réutiliser après (en l'occurrence afficher le résultat dans une cellule).


    Voilà, je me doute qu'il n'y a rien de bien sorcier mais comme je suis néophyte j'ai un peu de mal...merci d'avance pour votre aide.

  2. #2
    Membre Expert
    Avatar de JackOuYA
    Inscrit en
    Juin 2008
    Messages
    1 040
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 1 040
    Par défaut
    bonsoir,

    pour le 1° probléme, dis nous plutôt ce que tu veux copier, la cellule la plus a gauche elle est dans la colonne A non ?

    pour le 2° voir Evaluate dans l'aide en ligne excel ..

  3. #3
    Membre averti
    Inscrit en
    Octobre 2008
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 22
    Par défaut amuse toi
    Voici une idée pour ton 1er soucis :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("A1:" & ActiveCell.Offset(0, -1).Address).Copy
    Il copie depuis A1 à ta cellule active - 1 colonne


  4. #4
    Membre averti
    Inscrit en
    Novembre 2008
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 18
    Par défaut
    Pour le problème N°1:

    En fait je veux pouvoir quand le curseur est sur la ligne d'un tableau (pas déclaré comme un tableau dans excel), récupérer les contenus des 3 premières cellules de la ligne pour les coller dans les 3 premières cellules d'une ligne d'un autre tableau contenu dans une autre feuille de calcul), puis copier le contenu de la 7ème cellule de cette même ligne pour le copier dans la 5ème cellule de la ligne de l'autre tableau.

    C'est pourquoi je voulais utiliser le numéro de la colonne dans laquelle se trouve le curseur au déclenchement de la macro pour servir de référence et copier les bonnes cellules.

    @ fred792: même souci avec ton code, il me faut connaître la position de l'"ActiveCell" pour adapter l'Offset en conséquence et ne copier que les 3 premières cellules.

  5. #5
    Expert confirmé
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Par défaut
    Citation Envoyé par Sclarck1 Voir le message
    En fait je veux pouvoir quand le curseur est sur la ligne d'un tableau (pas déclaré comme un tableau dans excel), récupérer les contenus des 3 premières cellules de la ligne pour les coller dans les 3 premières cellules d'une ligne d'un autre tableau contenu dans une autre feuille de calcul)
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    With Sheets("Feuil1")
        .Range(.Cells(ActiveCell.Row, 1), .Cells(ActiveCell.Row, 3)).Copy Sheets("Feuil2").Range("A1")
    End With

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    121
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 121
    Par défaut
    Bonjour,

    il faut que tu enregistres ta macro en coordonnées relatives comme ça, quelque soit ta position tu pourras sélectionner la cellule la plus à gauche de la ligne active ( Selection.End(xlToLeft).Select = touche 'Control' + flèche gauche)

  7. #7
    Membre averti
    Inscrit en
    Novembre 2008
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 18
    Par défaut
    @ fring: Merci beaucoup c'est plus simple comme méthode que le truc tordu que j'avais imaginé...et ça marche !

    Par contre j'ai une question sur la forme. Pourquoi utilise-tu ce code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    With Sheets("Feuil1")
        .Range(.Cells(ActiveCell.Row, 1), .Cells(ActiveCell.Row, 3)).Copy Sheets("Feuil2").Range("A1")
    End With
    et pas celui-ci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("Feuil1").Range(.Cells(ActiveCell.Row, 1), .Cells(ActiveCell.Row, 3)).Copy Sheets("Feuil2").Range("A1")

    ...je pose la question car je voulais utiliser la 2ème façon pour modifier 3 propriétés de bordure à la fois sur un groupe de cellules et ça ne voulait pas fonctionner.J'ai du utiliser un With Selections.Borders et ensuite lister dessous les propriétés pour que cela fonctionne. Quelle est la différence avec With...End With ?


    @ La Zélie: merci pour ta suggestion masi je n'utilise pas l'enregistrement de macros à part pour trouver la syntaxe...de toute façon la solution de fring fonctionne parfaitement.


    Sinon quelqu'un sait d'où vient mon problème avec les valeurs numériques saisies dans les textbox (cf. mon problème N°2)

  8. #8
    Membre averti
    Inscrit en
    Novembre 2008
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 18
    Par défaut
    Bon pour mon 2ème problème, vu que c'est différent et que j'ai un peu avancé dans sa compréhension je vais créer un nouveau topic avec le bout de code en question.

  9. #9
    Expert confirmé
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Par défaut
    With....End With va simplement t'éviter de répéter x fois le nom de la feuille concernée et rattacher tous les objets précédés d'un point à la feuille

    Ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    With Sheets("Feuil1")
        .Range(.Cells(ActiveCell.Row, 1), .Cells(ActiveCell.Row, 3)).Copy Sheets("Feuil2").Range("A1")
    End With
    Sans passer par With...End With donne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("Feuil1").Range(Sheets("Feuil1").Cells(ActiveCell.Row, 1), Sheets("Feuil1").Cells(ActiveCell.Row, 3)).Copy Sheets("Feuil2").Range("A1")

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

Discussions similaires

  1. Réponses: 13
    Dernier message: 23/06/2005, 10h56
  2. question de débutant sur les objets
    Par boucher_emilie dans le forum ASP
    Réponses: 3
    Dernier message: 06/08/2004, 10h51
  3. [MFC] Quelques questions de débutant...
    Par Sephi dans le forum MFC
    Réponses: 4
    Dernier message: 20/02/2004, 17h25
  4. Questions de débutant
    Par J-P-B dans le forum XMLRAD
    Réponses: 12
    Dernier message: 24/07/2003, 15h19
  5. [HyperFile] 2 questions de débutant
    Par khan dans le forum HyperFileSQL
    Réponses: 2
    Dernier message: 29/04/2002, 23h18

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