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 :

Nouveau problème avec un tableau Excel et une macro VBA


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Mai 2007
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2007
    Messages : 65
    Points : 19
    Points
    19
    Par défaut Nouveau problème avec un tableau Excel et une macro VBA
    Bonjour à tous,
    certain me connaisse déjà car ils m'ont déjà aidé à plusieurs reprises. J'ai de nouveau besoin d'aide. Mon programme est le suivant, il permet que selon le type de projet selectionné, un certain nombre de cellules de la feuille "evaluation risque" soient copiées dans un nouvelle feuille "nomprojet",les cellules en question sont indiquées dans la feuille "types de projets".

    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
    Private Sub Valider_Click()
    Dim i As Integer
    Set FL1 = Sheets("Couverture")
    Set FL2 = Sheets("Types de projets")
    Set FL3 = Sheets("Evaluation risque")
     
    Sheets.Add.Name = FL1.Range("nomprojet").Text
     
        For i = 3 To 10
          If FL1.ComboBox1.Text = FL2.Cells(1, i).Value Then
            FL3.Range(FL2.Cells(2, i).Value).Copy Destination:=Sheets(FL1.Range("nomprojet").Value).Range("A1")
            FL3.Range(FL2.Cells(3, i).Value).Copy Destination:=Sheets(FL1.Range("nomprojet").Value).Range("A4")
     
          End If
        Next i
    Set FL1 = Nothing
    Set FL2 = Nothing
    Set FL3 = Nothing
    End Sub
    Maintenant ce que je voudrais c'est que la place que doit prendre les cellules ne soit pas définit par ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FL3.Range(FL2.Cells(2, i).Value).Copy Destination:=Sheets(FL1.Range("nomprojet").Value).Range("A1")
    et plus particulièrement mais que Range soit remplacer par un truc qui dit, va chercher l'info dans telle cellule.
    En fait je vais faire un petit tableau avec le nom des plages de cellules à copier et à quelle cellule elles doivent commencé à être copié. Par exemple la plage de cellule Prix doit commencé à être copié à la cellule A10.
    Vous avez compris, je m'exprime mal!!!
    Merci à tout ceux qui m'aiderons.
    Bonne journée
    Val.

  2. #2
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    667
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Avril 2007
    Messages : 667
    Points : 870
    Points
    870
    Par défaut
    Bonjour Valouche,
    En fait si j'ai bien compris tu veux faire pour les adresses de destination la meme chose que pour les adresses des sources c'est ca ? Si c'est le cas, la reponse est: fait pareil
    Quelque chose du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FL3.Range(FL2.Cells(2, i).Value).Copy Destination:=Sheets(FL1.Range("nomprojet").Value).Range(FL2.Cells(4, i).Value)
    Avec a la ligne 4, A1 a la ligne 5, A4...

  3. #3
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Mai 2007
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2007
    Messages : 65
    Points : 19
    Points
    19
    Par défaut
    J'ai déjà essayé mais il me met un message d'erreur "erreur définie par l'application ou par l'objet".
    Veut tu que je te renvoie le fichier avec mes modifications?

    EDIT: en fait il faut une nouvelle boucle, un nouveau IF.
    Sinon est-ce que c'est possible de faire en sorte que le programme mette les trucs les un à la suite des autres, tu sais qu'il vérifie que soit la place est libre et qu'il la colle en dessous, soit il y a deja quelque chose et qu'il passe à la ligne suivante? c'est possible de faire ça!

  4. #4
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    667
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Avril 2007
    Messages : 667
    Points : 870
    Points
    870
    Par défaut
    Citation Envoyé par valouche
    Sinon est-ce que c'est possible de faire en sorte que le programme mette les trucs les un à la suite des autres, tu sais qu'il vérifie que soit la place est libre et qu'il la colle en dessous, soit il y a deja quelque chose et qu'il passe à la ligne suivante? c'est possible de faire ça!
    Oui oui c'est possib'
    http://www.developpez.net/forums/sho...d.php?t=331890

  5. #5
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Mai 2007
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2007
    Messages : 65
    Points : 19
    Points
    19
    Par défaut
    Merci.
    Alors je crois j'ai pas tout compris
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    PremiereLigneVide = DerniereLigne + 1
    DerniereLigne = Range("A1").SpecialCells(xlCellTypeLastCell).Row
    Est-ce que ces deux lignes suffisent ou il faut que j'en prenne d'autre?
    "PremiereLigne" et "DerniereLigne" ce sont des variables qu'il faut que je déclare???et dans ce cas je les déclare de quel type?

  6. #6
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    667
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Avril 2007
    Messages : 667
    Points : 870
    Points
    870
    Par défaut
    Il faut toujours declarer ses variables
    Les lignes sont des entiers donc integer. Cependant integer ne peut pas aller au dela de 32000 a peu pres et les lignes peuvent aller jusqu'a 65000 donc Long est mieux si tu as beaucoup de ligne (pas ton cas ici mais ca peut te servir pour plus tard)

    Tu n'as pas "besoin" de deux variables, tu peux faire directement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    PremiereLigneVide = Sheets(FL1.Range("nomprojet").Value).Range("A1").SpecialCells(xlCellTypeLastCell).Row+ 1
    Et l'utiliser comme ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FL3.Range(FL2.Cells(2, i).Value).Copy Destination:=Sheets(FL1.Range("nomprojet").Value).Range("A" & PremiereLigneVide)
    ou bien directement comme ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FL3.Range(FL2.Cells(2, i).Value).Copy Destination:=Sheets(FL1.Range("nomprojet").Value).Range("A" & Sheets(FL1.Range("nomprojet").Value).Range("A1").SpecialCells(xlCellTypeLastCell).Row+ 1) 'illisible isn't it ?
    Vu la tournure que prend ton code je te conseillerai d'utiliser plus de variables pour le rendre plus lisible (ca mange pas de pain si tu les declares pas en variant quand un integer suffit):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ProjetCourant = FL1.Range("nomprojet").Value
    PremiereLigneVide = Sheets(ProjetCourant).Range("A1").SpecialCells(xlCellTypeLastCell).Row+ 1

  7. #7
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Mai 2007
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2007
    Messages : 65
    Points : 19
    Points
    19
    Par défaut
    Ok bon ça marche, enfin y a pas d'erreur mais ça ne copie pas, je te met mon code (je ne sais pas comment je dois déclarer ProjetCourant)

    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
    Private Sub Valider_Click()
    Dim i As Integer
    'Dim ProjetCourant As Integer
    Dim PremiereLigneVide As Long
    Set FL1 = Sheets("Couverture")
    Set FL2 = Sheets("Types de projets")
    Set FL3 = Sheets("Evaluation risque")
    Sheets.Add.Name = FL1.Range("nomprojet").Text
    FL2.Select
        For i = 2 To 10
          If FL1.ComboBox1.Text = FL2.Cells(i, 1).Value Then
            ProjetCourant = FL1.Range("nomprojet").Value
            PremiereLigneVide = Sheets(ProjetCourant).Range("A1").SpecialCells(xlCellTypeLastCell).Row + 1
          End If
        Next i
    Set FL1 = Nothing
    Set FL2 = Nothing
    Set FL3 = Nothing
    End Sub

  8. #8
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    667
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Avril 2007
    Messages : 667
    Points : 870
    Points
    870
    Par défaut
    C'est normal que ca ne copie pas, tu as enleve la ligne qui copie...
    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
    Private Sub Valider_Click()
    Dim i As Integer
    Dim ProjetCourant As String
    Dim PremiereLigneVide As Long
    Set FL1 = Sheets("Couverture")
    Set FL2 = Sheets("Types de projets")
    Set FL3 = Sheets("Evaluation risque")
    Sheets.Add.Name = FL1.Range("nomprojet").Text
    FL2.Select
        For i = 2 To 10
          If FL1.ComboBox1.Text = FL2.Cells(i, 1).Value Then
            ProjetCourant = FL1.Range("nomprojet").Value
            PremiereLigneVide = Sheets(ProjetCourant).Range("A1").SpecialCells(xlCellTypeLastCell).Row + 1
            FL3.Range(FL2.Cells(2, i).Value).Copy Destination:=Sheets(ProjetCourant).Range("A" & PremiereLigneVide)
          End If
        Next i
    Set FL1 = Nothing
    Set FL2 = Nothing
    Set FL3 = Nothing
    End Sub

  9. #9
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Mai 2007
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2007
    Messages : 65
    Points : 19
    Points
    19
    Par défaut
    Oui desolé j'avais vu que j'avais enlevé la ligne mais je l'avais rajoutée avant ton message.
    J'ai un autre soucis, il faudrait maintenant que avant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ProjetCourant = FL1.Range("nomprojet").Value
            PremiereLigneVide = Sheets(ProjetCourant).Range("A1").SpecialCells(xlCellTypeLastCell).Row + 1
            FL3.Range(FL2.Cells(i, 2).Value).Copy Destination:=Sheets(ProjetCourant).Range("A" & PremiereLigneVide)
    j'ai un While.
    Parce que là mon petit tableau se présente comme ça:

    Types de projet Truc à copier
    Progiciel Scoring PrixType
    Logiciel Scoring Solvabilite
    Infogerance Scoring EnvironnementClient

    Donc avant d'arreter la boucle pour un type de projet donné il faut qu'il verifie que le ligne est vide ou au contraire qu'elle est pleins et qu'il continue à copier.
    Je m'exprime bien?

  10. #10
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    667
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Avril 2007
    Messages : 667
    Points : 870
    Points
    870
    Par défaut
    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
    Private Sub Valider_Click()
    Dim i As Integer
    Dim ProjetCourant As String
    Dim PremiereLigneVide As Long
    Set FL1 = Sheets("Couverture")
    Set FL2 = Sheets("Types de projets")
    Set FL3 = Sheets("Evaluation risque")
    Sheets.Add.Name = FL1.Range("nomprojet").Text
     
        For i = 2 To 10
          If FL1.ComboBox1.Text = FL2.Cells(i, 1).Value Then
            colonne = 2
            Do
            ProjetCourant = FL1.Range("nomprojet").Value
            PremiereLigneVide = Sheets(ProjetCourant).Range("A1").SpecialCells(xlCellTypeLastCell).Row + 1
            FL3.Range(FL2.Cells(Colonne, i).Value).Copy Destination:=Sheets(ProjetCourant).Range("A" & PremiereLigneVide)
          colonne = colonne +1
          Loop until isempty(FL2.Cells(Colonne, i))
          End If
        Next i
    Set FL1 = Nothing
    Set FL2 = Nothing
    Set FL3 = Nothing
    End Sub
    Il faut peut etre corriger les indices et / ou l'implantation de la boucle mais c'est l'idee

  11. #11
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Mai 2007
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2007
    Messages : 65
    Points : 19
    Points
    19
    Par défaut
    merci, il me met une erreur bizarre, il me dit pour cette ligne de code qu'il est impossible de modifier une cellule fusionnée.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FL3.Range(FL2.Cells(i, 2).Value).Copy Destination:=Sheets(ProjetCourant).Range("A" & PremiereLigneVide)

  12. #12
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Points : 24 327
    Points
    24 327
    Par défaut
    Et tu en tires quoi comme conclusion???

    Ne crois-tu pas qu'il est temps que tu commences à réfléchir par toi-même plutôt que venir poster à chaque erreur rencontrée?
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

Discussions similaires

  1. Réponses: 0
    Dernier message: 04/08/2009, 11h30
  2. Nouveau problème avec une liste
    Par Sour0013 dans le forum IHM
    Réponses: 11
    Dernier message: 24/07/2007, 08h34
  3. Problèmes avec des cases à cocher et une liste déroulante
    Par rob2-9 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 25/01/2006, 10h52
  4. Problème avec un tableau de tableau
    Par SubZero2 dans le forum Langage
    Réponses: 4
    Dernier message: 07/12/2005, 15h25
  5. problème avec un tableau dans un insert ...
    Par vbcasimir dans le forum Langage
    Réponses: 3
    Dernier message: 02/11/2005, 14h31

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