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 :

je veu copier une feuille d'un classeur et il affiche erreur 424


Sujet :

Macros et VBA Excel

  1. #21
    Membre à l'essai
    Inscrit en
    Juillet 2007
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 74
    Points : 21
    Points
    21
    Par défaut
    oui je comprend c pas un site pour avoire du tout cuit ,c plus de l'encadrement

  2. #22
    Membre à l'essai
    Inscrit en
    Juillet 2007
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 74
    Points : 21
    Points
    21
    Par défaut
    pour faire ce que je t dis il faut que met:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ligne_début = InputBox("Placer : Ligne début ?")
    ligne_fin = InputBox("Placer : Ligne fin ?")
     
    For ligne = ligne_début To ligne_fin
        test = 0

    juste apres mes declaration et que je mette mon code dans une boulce c sa

  3. #23
    Membre averti
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    258
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 258
    Points : 306
    Points
    306
    Par défaut
    Oui sauf que les input Box réclament des valeurs

    donc il faut demander: "Donner la ligne de début de selection."

    Il faut faire un petit test (histoire que l'utilisateur ne mette pas de valeurs farfelues qui planteraient la macro) du type

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Do until reponse isnuméric
         If not reponse isnumeric then
            reponse=Inputbox("N'importe quoi! Il faut donner un numéro de ligne!!!")
         End if
    Loop
     
    If reponse =0 then
            reponse=Inputbox("Qu'est ce que tu crois?? La ligne 0 n'existe pas!")
    end if
    Bien sur à dédoubler pour les ligndébut et lignfin

    et ne pas oublier le Next à la fin pour reboucler

    les Collage spécial fonctionneront à chaque fois sans probleme.

  4. #24
    Membre à l'essai
    Inscrit en
    Juillet 2007
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 74
    Points : 21
    Points
    21
    Par défaut
    pourquoi m affiche-t-il :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Do until reponse isnuméric
         If not reponse isnumeric then
    en rouge

  5. #25
    Membre averti
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    258
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 258
    Points : 306
    Points
    306
    Par défaut
    A pardon parceque réponse est la variable que tu récupere de l'Inputbox.

    Dans ton cas, à remplacer par Ligne_début et par Ligne_fin

    dslé

  6. #26
    Membre à l'essai
    Inscrit en
    Juillet 2007
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 74
    Points : 21
    Points
    21
    Par défaut
    le next ce met apres le end if c sa

  7. #27
    Membre averti
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    258
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 258
    Points : 306
    Points
    306
    Par défaut
    Il faut revoir ton code en mettant à chaque fois ce que tu fais!

    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
    'Demander le numéro de la ligne de début
    ligne_début = InputBox("Placer : Ligne début ?")
     
    'Test de réponse exacte
     
    'Demander le numéro de ligne de fin
    ligne_fin = InputBox("Placer : Ligne fin ?")
     
    'Test de réponse exacte
     
    'Boucle pour chaque ligne
    For ligne = ligne_début To ligne_fin
        test = 0
     
    'Si la valeur de la cellule xy vaut une valeur, alors
     
    'je la copie
     
    'Je la colle sur la feuille précédente 
     
    'etc...
     
    'et je passe à la ligne suivant
    next
    Tu mets donc le next apres tout ce que tu dois faire sur la ligne

    l'avantage de cette méthode et de savoir à quel moment mettre les boucle, les end if, les else....
    Ca permet aussi de reprendre un code écrit il y a un an.

  8. #28
    Membre à l'essai
    Inscrit en
    Juillet 2007
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 74
    Points : 21
    Points
    21
    Par défaut
    et si je dois copier sur trois colonne differente je fais 3 boucle for

  9. #29
    Membre averti
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    258
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 258
    Points : 306
    Points
    306
    Par défaut
    Soit tu as exactement les memes critères et tu selectione d'abord les 3 colonnes avec un truc du type

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range(A:A,C:C,E:E).select
    qui va sellectionner les 3 colonnes A, C et E

    ou alors tu as des critères spécifiques pour chaque et il faut mieux passer par une boucle For ou autre chose en fonction de ce que tu noteras en francais dans ton code

  10. #30
    Membre à l'essai
    Inscrit en
    Juillet 2007
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 74
    Points : 21
    Points
    21
    Par défaut
    mais si je dois coller par exemple :
    _la colonne A sur la colonne B
    _la colonne B sur la colonne E
    _la colonne C sur la colonne S


    sur l autre feuille je fais comme tu as ecrit sauf que j'ecris
    Range(A:B,B:E,C:S).select

    mais je crois que je me trompe

  11. #31
    Membre averti
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    258
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 258
    Points : 306
    Points
    306
    Par défaut
    Ca va etre compliqué de tout faire en meme temps.

    Dans ce cas, tu décomposes:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    'Coller la colonne A sur la colonne B 
    Sheets("feuille départ").range("A:A").copy (Sheets("feuille arrivée").range("B:B"))
    'Coller la colonne B sur la colonne E 
    Sheets("feuille départ").range("B:B").copy (Sheets("feuille arrivée").range("E:E"))
     
    'Coller la colonne C sur la colonne S
    Sheets("feuille départ").range("C:C").copy (Sheets("feuille arrivée").range("S:S"))

  12. #32
    Membre à l'essai
    Inscrit en
    Juillet 2007
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 74
    Points : 21
    Points
    21
    Par défaut
    ok,g eu un autre probleme g essayé pour testé de mettre un zero dans les messages box pour tester le message d'erreur maintenat le messagebox ne s'enleve plus mon application est bloqué

  13. #33
    Membre averti
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    258
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 258
    Points : 306
    Points
    306
    Par défaut
    Oui mais c'est normal si tu n'as pas mis le test que je t'ai proposé.

    Si tu lui demande de partir à la ligne 0 qui n'existe pas, il plante forcément.

    Il y a un autre test à ajouter si jamais tu lui donne une ligne_fin < ligne_début car il ne trouvera jamais cette ligne puisque que la boucle for incrémente le numéro de ligne.

  14. #34
    Membre à l'essai
    Inscrit en
    Juillet 2007
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 74
    Points : 21
    Points
    21
    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    Sub Copier()
     
    Dim WBSource As Workbook, WBDest As Workbook
    Dim i As Integer
    Dim j As Long
     
     
    'Demander le numéro de la ligne de début
    ligne_début = InputBox("Placer : Ligne début ?")
     
    'Test de réponse exacte
     Do Until ligne_début
         If Not ligne_début Then
            reponse = InputBox("N'importe quoi! Il faut donner un numéro de ligne!!!")
         End If
    Loop
     
    If reponse = 0 Then
            reponse = InputBox("Qu'est ce que tu crois?? La ligne 0 n'existe pas!")
    End If
    'Demander le numéro de ligne de fin
    ligne_fin = InputBox("Placer : Ligne fin ?")
     
    'Test de réponse exacte
     Do Until ligne_fin
         If Not ligne_fin Then
            reponse = InputBox("N'importe quoi! Il faut donner un numéro de ligne!!!")
         End If
    Loop
     
    If reponse = 0 Then
            reponse = InputBox("Qu'est ce que tu crois?? La ligne 0 n'existe pas!")
    End If
    'Boucle pour chaque ligne
    For ligne = ligne_début To ligne_fin
        test = 0
       If Cells("B") Or Cells("E") Or Cells("S") <> 0 Then GoTo saut3:
     Set WBSource = Workbooks("ruitz.xls")
    Set WBDest = Workbooks("planning.csv")
    'cherche la ligne vide dans le classeur de destination
    i = WBDest.Worksheets("planning").Range("A65536").End(xlUp).Row + 1
     
     
     
    WBDest.Sheets("planning").Range("A:A").Copy (WBDest.Sheets("planning").Range("B:B"))
     
    WBDest.Sheets("planning").Range("B:B").Copy (WBDest.Sheets("planning").Range("E:E"))
     
     
    WBDest.Sheets("planning").Range("C:C").Copy (WBDest.Sheets("planning").Range("S:S"))
     
     Next
     
     
    saut3:
    Next ligne
    'et je passe à la ligne suivant
     
     
     
    End Sub




    g ecrit sa mais ca ne marche pas

  15. #35
    Membre averti
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    258
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 258
    Points : 306
    Points
    306
    Par défaut
    do = faire
    until = jusqu'à

    derriere, il faut mettre une condition

    idem pour le if

    comme par exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Do until Ligne_début isnuméric
         If not Ligne_début isnumeric then
            reponse=Inputbox("N'importe quoi! Il faut donner un numéro de ligne!!!")
         End if
    Loop
     
    If ligne_début =0 then
            ligne_début =Inputbox("Qu'est ce que tu crois?? La ligne 0 n'existe pas!")
    end if

    et on peut encore améliorer la protection en éliminant les lignes avec signe négatif en écrivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If ligne_début <=0 then
            ligne_début =Inputbox("Qu'est ce que tu crois?? La ligne 0 n'existe pas!")
    end if

    autre probleme, tu utilise Goto qui peut fonctionner mais qui est déconseillé
    Tu as un if sans end if

  16. #36
    Membre à l'essai
    Inscrit en
    Juillet 2007
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 74
    Points : 21
    Points
    21
    Par défaut
    pourquoi me met-il erreur 13 a la ligne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Cells("B") Or Cells("E") Or Cells("S") <> 0 Then GoTo saut3:
    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    Sub Copier()
     
    Dim WBSource As Workbook, WBDest As Workbook
    Dim i As Integer
    Dim j As Long
     
     
    'Demander le numéro de la ligne de début
    Ligne_début = InputBox("Placer : Ligne début ?")
     
    'Test de réponse exacte
    Do Until Ligne_début
         If Not Ligne_début Then
            reponse = InputBox("N'importe quoi! Il faut donner un numéro de ligne!!!")
         End If
    Loop
     
    If Ligne_début = 0 Then
            Ligne_début = InputBox("Qu'est ce que tu crois?? La ligne 0 n'existe pas!")
    End If
    'Demander le numéro de ligne de fin
    ligne_fin = InputBox("Placer : Ligne fin ?")
     
    'Test de réponse exacte
     Do Until Ligne_début
         If Not Ligne_début Then
            reponse = InputBox("N'importe quoi! Il faut donner un numéro de ligne!!!")
         End If
    Loop
     
    If Ligne_début = 0 Then
            Ligne_début = InputBox("Qu'est ce que tu crois?? La ligne 0 n'existe pas!")
    End If
    'Boucle pour chaque ligne
    For ligne = Ligne_début To ligne_fin
        test = 0
     
     
     
     Set WBSource = Workbooks("ruitz.xls")
    Set WBDest = Workbooks("planning.csv")
    'cherche la ligne vide dans le classeur de destination
    i = WBDest.Worksheets("planning").Range("A65536").End(xlUp).Row + 1
     
    'Si la valeur de la cellule xy vaut une valeur, alors
     
    'je la copie
     'Coller la colonne A sur la colonne B
    WBSource.Sheets("planning").Range("D:D").Copy (WBDest.Sheets("planning").Range("B:B"))
    'Coller la colonne B sur la colonne E
    WBSource.Sheets("planning").Range("B:B").Copy (WBDest.Sheets("planning").Range("E:E"))
     
    'Coller la colonne C sur la colonne S
    WBSource.Sheets("planning").Range("C:C").Copy (WBDest.Sheets("planning").Range("S:S"))
    'Je la colle sur la feuille précédente
     Next
    'etc...
     
    'et je passe à la ligne suivant
     
     
     
    End Sub
    ce programme copie mais ne tient pas en compte les lignes selectionné

  17. #37
    Membre averti
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    258
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 258
    Points : 306
    Points
    306
    Par défaut
    Essais plutot de séparer les condition

    Axiome : Un ordi, c'est débile et ca le restera!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Cells("B")<>0 Or Cells("E")<>0 Or Cells("S") <> 0 Then GoTo saut3:
    Sinon, ca ne veurt rien dire Cells("B")

    Que veux tu dire exactement?

  18. #38
    Membre à l'essai
    Inscrit en
    Juillet 2007
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 74
    Points : 21
    Points
    21
    Par défaut
    je veus faire ma condition pour que si la ligne est vide il va a la suivante

  19. #39
    Membre averti
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    258
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 258
    Points : 306
    Points
    306
    Par défaut
    Dans ce cas, tu vas désigner la cellule par cells

    Syntaxe (voir touche F1)

    Cells(N°Ligne,N°Colonne)

    Donc cellule B5 donne Cells(5,2)

    Attention, si la cellule est vide, elle ne vaut pas 0 mais rien ("")

    le code devient:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Cells(ligne,2)="" Or Cells(ligne,5)="" Or Cells(ligne,19) ="" Then GoTo saut3:
    Et ca devient cohérent puisque la variable incrémentée se retrouve dans la condition

  20. #40
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Deux choses, une simple indication : préfère utiliser Empty plutôt que ""
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Cells(ligne,2)= Empty Or Cells(ligne,5)= Empty Or Cells(ligne,19) = Empty Then
    deuxièmement, un autre principe de base et un bon gros conseil :
    N'utilise JAMAIS de goto dans une boucle.
    Et donc, remplace ta ligne par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If not (Cells(ligne,2)= Empty Or Cells(ligne,5)= Empty Or Cells(ligne,19) = Empty) Then
         'Ton code
    Endif
    NB - Si tu as toujoours une erreur, elle ne viendra pas de là

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 3 PremièrePremière 123 DernièreDernière

Discussions similaires

  1. Copier une feuille d'un classeur dont on ne connait pas le nom
    Par macromagnon dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 14/04/2014, 22h11
  2. Copier une feuille d'un classeur fermé dans un autre fermé
    Par abdelkarim_1987 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 11/09/2013, 17h44
  3. [XL-2010] Copier une feuille d'un classeur existant sur un nouveau classeur avec vba
    Par missy060 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 09/06/2013, 00h46
  4. [XL-2003] copier une feuille sur un classeur fermé
    Par zangaloni dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 12/01/2012, 19h23
  5. Copier une feuille dans un classeur nouvellement créé
    Par jonathanoudelet dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 19/11/2008, 10h57

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