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 :

Boucle For Each Next sur plusieurs feuilles [XL-2016]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Femme Profil pro
    Gestionnaire de paies
    Inscrit en
    Octobre 2016
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Gestionnaire de paies
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Octobre 2016
    Messages : 77
    Par défaut Boucle For Each Next sur plusieurs feuilles
    Bonjour,

    Je souhaite faire une boucle pour coller un sélection sur plusieurs feuilles :

    Feuilles :
    TEST
    SEM 1
    SEM 2
    SEM 3
    SEM 4
    SEM 5
    RECAP

    A savoir que les feuilles SEM 1, SEM 2 ... peuvent aussi s'appeler selon le mois :
    SEM 5
    SEM 6
    SEM 7
    SEM 8
    SEM 9

    Donc je copie une sélection de la SEM 1 qui est la feuille active et je souhaite la copier dans les autres semaines (soit tous les onglet sauf ONGLET TEST ET ONGLET RECAP)

    Voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     ActiveCell.Copy
     
    For Each ws In Worksheets
     
    If ws.Name > "SEM 1" Or ws.Name < "SEM 52" Then
    ws.Range("a999").End(xlUp).Offset(5, 0).PasteSpecial xlPasteAll
     
    End If
     
    Next ws

  2. #2
    Membre Expert
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 703
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Indre et Loire (Centre)

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

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 703
    Par défaut
    Bonjour,
    ws.Name renvoie le nom de la feuille, donc une chaine de caractères.
    Tu ne peux pas comparer des chaines de caractères avec < ou >. Que veut dire chaine1 > chaine2?
    tous les onglet sauf ONGLET TEST ET ONGLET RECAP
    Alors utilise cette condition :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If ws.Name <> "TEST" And ws.Name <> "RECAP" Then
     ...
    End If

  3. #3
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour riaolle

    Bien sur qu oui : on peut comparer deux chaînes par < ou >.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    msgbox "chaine 2" > "chaine 1"
    retournera par exemple true (ou vrai)
    il serait alors par contre prudent de les nommer "chaine 01" et ""chaine 02" (pour éviter d'arriver à "chaine 12" qui serait < "chaine 2"

    Ceci étant dit : la solution que tu proposes est plus adroite dans le cas présenté.
    Amitiés

  4. #4
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 680
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 680
    Par défaut
    Bonjour,
    Citation Envoyé par riaolle Voir le message
    Tu ne peux pas comparer des chaines de caractères avec < ou >. Que veut dire chaine1 > chaine2?
    Si on peut, il compare alors caractère par caractère la valeur du code ASCII

    edit: trop lent ...

  5. #5
    Membre confirmé
    Femme Profil pro
    Gestionnaire de paies
    Inscrit en
    Octobre 2016
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Gestionnaire de paies
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Octobre 2016
    Messages : 77
    Par défaut
    J'ai donc modifié : (l'onglet test s'appelle maintenant HORAIRE DE BASE)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     ActiveCell.Copy
     
    For Each ws In Worksheets
     
    If ws.Name <> "HORAIRE DE BASE" Or ws.Name <> "RECAP" Then
     
    ws.Range("a999").End(xlUp).Offset(5, 0).PasteSpecial xlPasteAll
     
    End If
     
    Next ws
    Mais la boucle ne se fait pas

  6. #6
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 680
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 680
    Par défaut
    Citation Envoyé par NadStin Voir le message
    Mais la boucle ne se fait pas
    Essaye le code ci dessous.
    Puis va voir le résultat du debug.print (ctrl+G) pour voir si la boucle se fait bien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    dim ws as worksheet
     ActiveCell.Copy
     
    For Each ws In thisworkbook.Worksheets
    debug.print ws.name
    If ws.Name <> "HORAIRE DE BASE" Or ws.Name <> "RECAP" Then
     
    ws.Range("a999").End(xlUp).Offset(5, 0).PasteSpecial xlPasteAll
     
    End If
     
    Next ws

  7. #7
    Membre Expert
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 703
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Indre et Loire (Centre)

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

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 703
    Par défaut
    OK, désolée pour mon erreur... j'ai appris quelque chose
    Attention, tu mets Or, il faut mettre And, car pour l'onglet "RECAP", par exemple, le nom est bien différent de HORAIRE DE BASE, donc la contidion est vérifiée.
    Mais la boucle ne se fait pas
    Pourrais-tu être un peu plus précis? Le code tourne, mais rien ne se passe?
    Peux-tu nous donner ce qu'il y a autour du bout de code que tu nous donnes pour voir s'il y a pas une erreur en amont.

  8. #8
    Membre confirmé
    Femme Profil pro
    Gestionnaire de paies
    Inscrit en
    Octobre 2016
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Gestionnaire de paies
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Octobre 2016
    Messages : 77
    Par défaut
    ok, j'ai modifié "or" en "and" mais toujours rien,
    le reste de la macro tourne et tout se passe comme prévu mais pour ce bout de code, rien ne se passe...

    voici le code en entier

    et ce que cela doit faire :
    lors d'un double clic, il a a un tableau qui se colle dans la feuille active et ce dernier est complété avec les éléments des input box, ensuite (normalement) ce même tableau doit se coller sur les autres onglet (d'ou la boucle...)

    merci...

    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
     
     
    Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
     
    Dim ws As Worksheet
     
    If MsgBox("Souhaitez vous ajouter une personne ?", vbYesNo) = vbYes Then
     
      Range("a999").End(xlUp).Offset(5, 0).Select
     
      Sheets("MODELES").Range("a16:aa25").Copy
     
      ActiveCell.PasteSpecial xlPasteAll
     
      nom = InputBox("Merci d'indiquer le nom et prénom du collaborateur : ", "Non - Prénom")
      ActiveCell.Offset(0, 2).Value = nom
     
      poste = InputBox("Merci d'indiquer le poste du collaborateur : " & Chr(10) & Chr(10) & "RM" & Chr(10) & "1er ADJOINT" & Chr(10) & "2ème ADJOINT" & Chr(10) & "VENDEUR(SE)" & Chr(10) & "CHEF CAISSE" & Chr(10) & "STAGIAIRE" & Chr(10) & "APPRENTI", "poste")
      ActiveCell.Offset(4, 2).Value = poste
     
      ray = InputBox("Merci d'indiquer le rayon du collaborateur : ", "rayon")
      ActiveCell.Offset(5, 2).Value = ray
     
      hor = InputBox("Merci d'indiquer le nombre d'heure hebdomadaire du collaborateur : " & Chr(10) & Chr(10) & "Format : HH:MM", "Nb d'heure")
      ActiveCell.Offset(7, 2).Value = hor
     
      anc = InputBox("Merci d'indiquer la date d'ancienneté du collaborateur : " & Chr(10) & Chr(10) & "Format : JJ/MM/AAAA", "Ancienneté")
      Sheets("ANCIENNETE").Activate
      Range("A1").End(xlDown).Offset(1, 0).Value = nom
      Range("B1").End(xlDown).Offset(1, 0).Value = anc
     
      ActiveCell.Copy
     
    For Each ws In Worksheets
     
    If ws.Name <> "HORAIRE DE BASE" And ws.Name <> "RECAP" Then
     
    ws.Range("a999").End(xlUp).Offset(5, 0).PasteSpecial xlPasteAll
     
    End If
     
    Next ws
     
     
     If MsgBox("Souhaitez vous ajouter ce collaborateur à horraire de base ?", vbYesNo) = vbYes Then
     
      Sheets("MODELES").Range("a32:i36").Copy
      Sheets("HORAIRE DE BASE").Activate
      Range("a104857").End(xlUp).Select
      ActiveCell.Offset(6, 0).PasteSpecial xlPasteAll
     
      ActiveCell.Value = nom
     
      MsgBox ("Merci de compléter l'horaire de base du collaborateur")
     
     
    End If
    End If
     
     
     
    End Sub

  9. #9
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut
    Bonjour !

    Citation Envoyé par NadStin Voir le message
    Je souhaite faire une boucle pour coller un sélection sur plusieurs feuilles
    Alors voir déjà du côté de la méthode FillAcrossSheets et ce, sans boucle !

    ___________________________________________________________________________________________________________
    Je suis Paris, Egypte, Stockholm, London, Istanbul, Berlin, Nice, Bruxelles, Charlie, …

  10. #10
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 680
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 680
    Par défaut
    Citation Envoyé par Marc-L Voir le message
    Alors voir déjà du côté de la méthode FillAcrossSheets et ce, sans boucle !
    +1, je ne connaissait pas, Merci beaucoup.

  11. #11
    Membre Expert
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Par défaut
    Slt Marc ,

    , je ne me rappelle avoir été dans ce besoin "FillAcrossSheets", mais il est bon de le remonter à la surface, car je ne connaissais pas non plus.
    Ça m'évitera de passer à coté la prochaine fois dans le cas où j'en aurai besoin …
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre :resolu: en n'oubliant pas d'indiquer qu'elle est la solution finale choisie ;)

  12. #12
    Membre confirmé
    Femme Profil pro
    Gestionnaire de paies
    Inscrit en
    Octobre 2016
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Gestionnaire de paies
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Octobre 2016
    Messages : 77
    Par défaut
    Bonjour,

    Ok, donc je définie ma variable et j'essaie avec FillAcrossSheets

    Et pour te répondre Ryu, c'est le tableau avec les entêtes que je veux veux copier pas juste les données.

    Bon...

    Il y a quoi qui cloche dans :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim myCel As Range
    myCel = Cells(Row.Count, 1).End(xlUp).Offset(5, 0).Resize(10, 28)

  13. #13
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 680
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 680
    Par défaut
    Il manque un S, a rowS.count
    et un Set en début de ligne.

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

Discussions similaires

  1. [XL-2007] Boucles For Each Next: problème de défilement des feuilles avec lenteur d'exécution
    Par camelia.w dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 24/12/2011, 20h08
  2. [XL-2003] boucle For each Next
    Par facteur dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 11/11/2009, 16h41
  3. boucle for each next : sauter une valeur
    Par scavenger dans le forum VBScript
    Réponses: 1
    Dernier message: 18/02/2009, 10h15
  4. Boucle For Each Next non entrée
    Par Kareg dans le forum VBA Access
    Réponses: 9
    Dernier message: 21/05/2008, 14h35
  5. [VBA-E]PB sur une boucle for each next
    Par rond24 dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 31/07/2006, 15h47

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