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 ne tourne que sur 2 lignes


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Urbaniste
    Inscrit en
    Avril 2018
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Urbaniste

    Informations forums :
    Inscription : Avril 2018
    Messages : 14
    Par défaut Macro ne tourne que sur 2 lignes
    Bonjour,

    J'ai rédigé une macro assez simple (voir ci-dessous) qui devrait me permettre de copier le nombre de ligne (variable) de l'onglet "Travel_completed" dans l'onglet "Flightlist".
    Le soucis est qu'elle ne fonctionne que pour 2 lignes... et quand j'exécute le "pas à pas détaillé", en effet, c'est comme si, à partir de la 3ème ligne, il n'y avait plus rien dans le tableur... (qui possède pourtant 10 lignes dans mon cas test).
    Lorsque je copie-colle mes 2 premières lignes, ça fonctionne avec mes 4 premières lignes... C'est à n'y rien comprendre...
    Je ne peux malheureusement pas uploader mon fichier, qui est confidentiel...

    Qqn est inspiré?

    Merci!

    Mélanie

    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
     
    Sub copytodepandarr()
    Application.ScreenUpdating = False
    Set F8 = Sheets("Travel_completed")
    Set F5 = Sheets("FlightList")
    q = F8.Cells(65536, 2).End(xlUp).Row
    q = 18
    j = F5.Cells(65536, 2).End(xlUp).Row
    j = 3
    With F8
     For q = 18 To .Cells(65536, 29).End(xlUp).Row
      If .Cells(q, 5).Value = "ISSUED" Then
        F5.Cells(j, 1) = .Cells(q, 1)
        F5.Cells(j, 2) = .Cells(q, 2)
        F5.Cells(j, 3) = .Cells(q, 3)
        F5.Cells(j, 4) = .Cells(q, 7)
        F5.Cells(j, 5) = .Cells(q, 8)
        F5.Cells(j, 6) = .Cells(q, 9)
        F5.Cells(j, 7) = .Cells(q, 10)
        F5.Cells(j, 8) = .Cells(q, 11)
        F5.Cells(j, 9) = .Cells(q, 12)
        F5.Cells(j, 10) = .Cells(q, 13)
        F5.Cells(j, 11) = .Cells(q, 14)
        F5.Cells(j, 12) = .Cells(q, 16)
        F5.Cells(j, 13) = .Cells(q, 17)
        F5.Cells(j, 14) = .Cells(q, 18)
        j = j + 1
      End If
      Next q
    End With
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Sub isssuedmaj()
    Set F8 = Sheets("Travel_completed")
    q = F8.Cells(65536, 2).End(xlUp).Row
    q = 18
    With F8
     For q = 18 To .Cells(65536, 29).End(xlUp).Row
      Cells(q, 5).Value = UCase(Cells(q, 5).Value)
     Next q
     End With
    End Sub

  2. #2
    Expert confirmé Avatar de BENNASR
    Homme Profil pro
    Responsable comptable & financier
    Inscrit en
    Décembre 2013
    Messages
    2 974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Responsable comptable & financier
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 2 974
    Par défaut
    bonjour
    aussi débutant en VBA mais peut être ça peut t'aider
    avec ce code tu cherche la dernière ligne non vide de la colonne 2 puis tu impute une valeur fixe à ce même variable !!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    q = F8.Cells(65536, 2).End(xlUp).Row
    q = 18
    j = F5.Cells(65536, 2).End(xlUp).Row
    j = 3
    pourquoi ce q=18 et ce j = 3 ???

  3. #3
    Membre averti
    Femme Profil pro
    Urbaniste
    Inscrit en
    Avril 2018
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Urbaniste

    Informations forums :
    Inscription : Avril 2018
    Messages : 14
    Par défaut
    Bonjour,

    j'avoue débuter complètement. J'ai repris une partie du code d'un code existant. Je pensais que ce code fixait d'abord que pour F8 la variable ligne était q puis dire que dans ma feuille F8, la première ligne à prendre en compte est la ligne 18...
    le code fonctionne dans un autre excel...

    Mais je peux bien sûr changer ça
    En réalité ma macro est plus longue, d'où l'intérêt de dire quelle lettre correspond à quelle feuille... Si il y a une autre manière de faire, je suis preneuse évidemment...

    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
    Set F2 = Sheets("DB")
    Set F8 = Sheets("Travel_completed")
    Set F5 = Sheets("FlightList")
    Set F6 = Sheets("Shuttle Arrival")
    Set F7 = Sheets("Shuttle Departure")
    Set F9 = Sheets("Hotel")
    i = F2.Cells(65536, 1).End(xlUp).Row
    i = 2
    q = F8.Cells(65536, 2).End(xlUp).Row
    q = 18
    j = F5.Cells(65536, 2).End(xlUp).Row
    j = 3
    u = F9.Cells(65536, 2).End(xlUp).Row
    u = 12
    k = F6.Cells(65536, 2).End(xlUp).Row
    k = 5
    p = F7.Cells(65536, 2).End(xlUp).Row
    p = 5
    With F8
     For q = 18 To .Cells(65536, 29).End(xlUp).Row
      Cells(q, 5).Value = UCase(Cells(q, 5).Value)
      If .Cells(q, 5).Value = "ISSUED" Then
        F5.Cells(j, 1) = .Cells(q, 1)
        F5.Cells(j, 2) = .Cells(q, 2)
        F5.Cells(j, 3) = .Cells(q, 3)
        F5.Cells(j, 4) = .Cells(q, 7)
    etc etc

    Merci!

  4. #4
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par MelVé Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    i = F2.Cells(65536, 1).End(xlUp).Row
    i = 2
    q = F8.Cells(65536, 2).End(xlUp).Row
    q = 18
    j = F5.Cells(65536, 2).End(xlUp).Row
    j = 3
    u = F9.Cells(65536, 2).End(xlUp).Row
    u = 12
    k = F6.Cells(65536, 2).End(xlUp).Row
    k = 5
    p = F7.Cells(65536, 2).End(xlUp).Row
    p = 5
    Toute cette partie est absurde.
    Il ne sert à rien de donner à une variable une valeur si c'est pour lui en donner une autre à la ligne suivante sans même avoir utilisé la première.
    Je ne sais pas exactement ce que tu comptes faire là mais tu n'obtiendras certainement pas le résultat voulu.

    Sans compter que ceci For q = 18 To .Cells(65536, 29).End(xlUp).Row rend complétement inutile les deux lignes q = ....

    Citation Envoyé par MelVé Voir le message
    Je pensais que ce code fixait d'abord que pour F8 la variable ligne était q puis dire que dans ma feuille F8, la première ligne à prendre en compte est la ligne 18...
    Ce code donne à la variable q la valeur du numéro de la dernière ligne.
    Puis il donne à cette même variable la valeur 18.

    VBA n'assigne pas de fonctions à des variables. Une variable est simplement une case dans laquelle on met une valeur ou la référence à un objet.

  5. #5
    Expert confirmé Avatar de BENNASR
    Homme Profil pro
    Responsable comptable & financier
    Inscrit en
    Décembre 2013
    Messages
    2 974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Responsable comptable & financier
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 2 974
    Par défaut
    re
    le 2 est la colonne B
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    q = F8.Cells(65536, 2).End(xlUp).Row
    le 29 c'st la colonne 29
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For q = 18 To .Cells(65536, 29).End(xlUp).Row
    pour chercher la dernière ligne d'une colonne pour un débutant je crois que c'est plus simple d'utiliser :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    i =F8.Range("A" & Rows.Count).End(xlUp).Row

  6. #6
    Membre averti
    Femme Profil pro
    Urbaniste
    Inscrit en
    Avril 2018
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Urbaniste

    Informations forums :
    Inscription : Avril 2018
    Messages : 14
    Par défaut
    Je vous l'ai dit, je débute complètement.
    Dans ce cas je m'en fiche de trouver la dernière variable, je veux juste que Excel sache que q correspond à mon onglet Travel_completed, j à tel autre onglet etc etc et q=18 parce que la première ligne de mon onglet Travel_completed à prendre en compte c'est la 18ème, avant ce ne sont pas des lignes qui comptent. Idem pour le j=3 etc etc

    J'avoue que je ne suis pas maniaque du code non plus, si il y a des choses inutiles ou redondantes, ca m'est un peu égal, du moment que ça marche sans que j'y passe des heures pour que tout soit propre ;-)

    J'ai fait un tableau ou je pense qu'il n'y a plus rien de confidentiel que je joint ici, si ça peut vous éclairer...? Merci! :-)
    Fichiers attachés Fichiers attachés

  7. #7
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par MelVé Voir le message
    je veux juste que Excel sache que q correspond à mon onglet Travel_completed, j à tel autre onglet etc etc
    q et j ne correspondent à aucun onglet.
    Ce sont juste des "boites" qui contiennent une valeur numérique. Ton code n'établit aucun "lien" entre ces variables et des onglets.

    Et prends la peine de déclarer tes variables (et commence ton code par un Option Explicit pour t'y obliger), ça t'évitera bien des problèmes à l'avenir.

    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
    Option Explicit
     
    Sub copytodepandarr()
       Dim q As Long, j As Long
       Dim F8 As Worksheet
       Dim F5 As Worksheet
     
       Set F8 = Sheets("Travel_completed")
       Set F5 = Sheets("FlightList")
     
       j = F5.Cells(Rows.Count, 2).End(xlUp).Row
     
       With F8
          For q = 18 To .Cells(Rows.Count, 29).End(xlUp).Row
             If .Cells(q, 5).Value = "ISSUED" Then
                F5.Cells(j, 1) = .Cells(q, 1)
                F5.Cells(j, 2) = .Cells(q, 2)
                F5.Cells(j, 3) = .Cells(q, 3)
                F5.Cells(j, 4) = .Cells(q, 7)
                F5.Cells(j, 5) = .Cells(q, 8)
                F5.Cells(j, 6) = .Cells(q, 9)
                F5.Cells(j, 7) = .Cells(q, 10)
                F5.Cells(j, 8) = .Cells(q, 11)
                F5.Cells(j, 9) = .Cells(q, 12)
                F5.Cells(j, 10) = .Cells(q, 13)
                F5.Cells(j, 11) = .Cells(q, 14)
                F5.Cells(j, 12) = .Cells(q, 16)
                F5.Cells(j, 13) = .Cells(q, 17)
                F5.Cells(j, 14) = .Cells(q, 18)
                j = j + 1
             End If
          Next q
       End With
    End Sub

  8. #8
    Membre expérimenté
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Avril 2007
    Messages
    272
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2007
    Messages : 272
    Par défaut
    Bonjour

    Bizarre ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    q = F8.Cells(65536, 2).End(xlUp).Row
    q = 18
    Si le fichier ne peut pas être téléchargé pour cause de confidentialité, il ne faut surtout pas !
    Mais faire un proto banalisé avec quelques lignes de données ce serait plus facile à comprendre.

    A+

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

Discussions similaires

  1. [XL-2010] Macro ne fonctionne que sur la première feuille
    Par lucho74 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 04/01/2012, 16h09
  2. [AC-2007] TDC : afficher/cacher détails que sur une ligne
    Par Tyu38 dans le forum VBA Access
    Réponses: 0
    Dernier message: 24/06/2010, 13h56
  3. Macro ne fonctionne que sur mon ordinateur
    Par Kibald dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 15/06/2009, 14h24
  4. Menu que sur une ligne
    Par le-baron dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 21/03/2008, 17h22
  5. Prob débutant mon app ne tourne que sur mon ordi
    Par alainpeniche dans le forum Windows
    Réponses: 1
    Dernier message: 01/10/2007, 00h20

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