Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 07/12/2011, 23h57   #1
Membre du Club
 
Avatar de Kaera
 
Femme
Étudiant
Inscription : novembre 2011
Messages : 102
Détails du profil
Informations personnelles :
Sexe : Femme
Âge : 22
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : Santé

Informations forums :
Inscription : novembre 2011
Messages : 102
Points : 69
Points : 69
Par défaut Coller consécutivement des plages issues d'autres feuilles

Bonsoir à tous, étant donnée l'heure qu'il est !

Sur suggestion d'Overcrash qui s'est défilé devant la difficulté (), je vous expose mon (énième) pépin.

J'ai une feuille "résumé", d'autre feuilles inutiles dans le cas présent ainsi que des feuilles nommées par numéro "1", "2", "3"... Leur nombre (celui des feuilles numérotées) est variable.

Voici le bout de code:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Sub copie_temps()
 
'Pour chaque feuille dont le nom est numérique, copier H2:I23, coller consécutivement sur la feuille "résumé" à partir de la cellule E5
 
Dim sh As Worksheet
 
        For Each sh In ThisWorkbook.Worksheets
            If IsNumeric(sh.Name) Then
                sh.Range("H2:I23").Copy
            Sheets("résumé").Cells(5, Columns.Count).End(xlToLeft).Offset(, 1).PasteSpecial Paste:=xlValues
            End If
        Next
 
End Sub
Le code fonctionne en partie, c'est-à-dire qu'il copie les plages comme il faut et les colle comme il faut, consécutivement, mais il n'a copié que les données des feuilles "3", "5", "7" et "8" ! Et j'ignore pourquoi.
Je me permets de souligner le fait que le nombre de feuilles numérotées est variable. (Dans mon exemple test il y en a 8.)

Merci d'avance pour votre aide chers membres !
Kaera est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/12/2011, 06h26   #2
Expert Confirmé Sénior
 
Avatar de Qwazerty
 
Homme Stéphane
La très haute tension :D
Inscription : avril 2002
Messages : 2 446
Détails du profil
Informations personnelles :
Nom : Homme Stéphane
Âge : 32
Localisation : France

Informations professionnelles :
Activité : La très haute tension :D
Secteur : Service public

Informations forums :
Inscription : avril 2002
Messages : 2 446
Points : 4 620
Points : 4 620
Envoyer un message via MSN à Qwazerty
Salut

Tu devrais exécuter ton code en mode pas à pas. C'est a dire, dans le cas présent (pas de paramètres à passer a ta fonction), tu lance ta macro a l'aide de la touche F8, un surlignage jaune va pointer la ligne qui va être exécutée.

A tout moment, tu peux en survolant les différentes variables de ton code, connaitre ce qu'elles contiennent.

Pour les variables objets tel que Sh, tu fais un clic droit dessus et tu sélectionnes "Ajouter un espion", une fenêtre s'ouvre tu laisse par défaut et tu valides.
Une nouvelle liste devrait s'affichée contenant les espions, il est possible de "d'ouvrir" l'espion pour regarder ce qu'il contient et vois les valeurs de ses propriété, ici tu pourra regarder Name et ainsi voir au fur et à mesure de l’exécution du code (touche F8) si toute tes feuilles sont bien contrôlées et de vérifier pourquoi certaines sont ignorées.

Lorsque tu utilises worksheets, sache que les feuille de type graphique sont ignorées, seule les feuille de calcul(feuille "classique") sont prisent en compte, ce qui dans ton cas ne devrait pas poser de problème particulier.

Il reste donc a voir ce que IsNumeric pense des noms de tes feuilles. Tu peux également placer un espion sur isnumeric(Sh.name) en sélectionnant ce bout de code avant de faire clic le droit .

Bonne recherche.

Ps: Vis à vis de ton autre poste, OK vis à vis la confidentialité, pas de soucis c'est normal de ne pas toujours vouloir placer l’ensemble de sont code.

++
Qwaz
__________________

MagicQwaz := Harry Potter la baguette en moins
Le monde dans lequel on vit
HammerFest
Ma page perso DVP - Dernier Tutoriel : VBA & Internet Explorer
Qwazerty est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 08/12/2011, 07h49   #3
Membre du Club
 
Avatar de Kaera
 
Femme
Étudiant
Inscription : novembre 2011
Messages : 102
Détails du profil
Informations personnelles :
Sexe : Femme
Âge : 22
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : Santé

Informations forums :
Inscription : novembre 2011
Messages : 102
Points : 69
Points : 69
Salut Qwaz

J'ai utilisé le mode pas à pas (c'est génial ce truc).
Le problème n'est pas dû au IsNumeric car il détecte correctement le nom de la feuille, il sort de la boucle lorsque les feuilles sont nommées en lettres.

Le truc marrant dans l'histoire, c'est que ma macro effectue le traitement correctement !
Pour chaque feuille elle va chercher la plage puis la colle sur le "résumé".
Elle copie les données de la feuille "1", puis celles de la feuille "2", puis celles de la feuille "3"...qu'elle colle par dessus les données de la feuille "2" !

En gros, les données des feuilles impaires sont collées par dessus les données des feuilles paires précédemment collées.
Donc je me retrouve avec uniquement les données des feuilles impaires.

Là je ne comprends pas

EDIT :
J'ai compris pourquoi !
Dans mes feuilles dont le nom est paire, dans ma plage H2:I23 la première ligne est vide ! (si c'est trop confus je peux fournir un fichier ou un screenshot)
Comme dans mon code je demande à ma macro de chercher la première colonne vide en ligne 5, elle détecte des cellules vides donc elle colle les données suivantes par dessus!

Mais comment éviter ça ? Suis-je contrainte de remplacer les cellules vides par des "-" par exemple ?
Kaera est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/12/2011, 09h03   #4
Membre Expert
 
Homme
Retraité
Inscription : avril 2011
Messages : 694
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Retraité

Informations forums :
Inscription : avril 2011
Messages : 694
Points : 1 446
Points : 1 446
Bonjour,
Citation:
Comme dans mon code je demande à ma macro de chercher la première colonne vide en ligne 5, elle détecte des cellules vides donc elle colle les données suivantes par dessus!
Il suffit de choisir une ligne pleine pour la recherche du numéro de la colonne d'ajout (ligne 10 dans l'exemple).

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Sub copie_temps2()
'Pour chaque feuille dont le nom est numérique, copier H2:I23, coller consécutivement sur la feuille "résumé" à partir de la cellule E5
Dim sh As Worksheet
Dim ColAjout As Integer
    For Each sh In ThisWorkbook.Worksheets
        If IsNumeric(sh.Name) Then
            sh.Range("H2:I23").Copy
            With Worksheets("résumé")
                ColAjout = .Cells(10, .Columns.Count).End(xlToLeft).Column + 1
                .Cells(5, ColAjout).PasteSpecial Paste:=xlValues
            End With
        End If
    Next
End Sub
Cordialement.
gFZT82 est actuellement connecté   Envoyer un message privé Réponse avec citation 10
Vieux 08/12/2011, 11h39   #5
Membre du Club
 
Avatar de Kaera
 
Femme
Étudiant
Inscription : novembre 2011
Messages : 102
Détails du profil
Informations personnelles :
Sexe : Femme
Âge : 22
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : Santé

Informations forums :
Inscription : novembre 2011
Messages : 102
Points : 69
Points : 69
Salut gFZT82

Merci beaucoup, ta méthode fonctionne à merveille.
J'ai d'ailleurs tenté de l'appliquer à une autre partie de mon code dont le traitement est assez similaire.
Lorsque j'ai appliqué ta méthode, ma feuille résumé contient donc une plage à nombre de ligne fixe et à colonnes variables.
(cf Tableau 1 du screenshot)
Ensuite je souhaite couper une colonne sur 2 du tableau 1 et les coller consécutivement dans le tableau 2 (comme tu peux le voir sur le screenshot).

En tentant maladroitement d'adapter ton code, voici ce que j'obtiens (et qui plante :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Sub descendre_colonnes()
Dim Col As Long
Dim plage As Range
Dim ColAjout As Integer

    With Sheets("résumé")
        Set plage = .Range("E5").CurrentRegion
        Set plage = plage.Offset(, 1).Resize(, plage.Rows.Count - 1)
        
        For Col = 2 To plage.Columns.Count Step 2
            plage.Columns(Col).Cut
            ColAjout = Sheets("résumé").Cells(33, .Columns.Count).End(xlToLeft).Column + 1
            Sheets("résumé").Cells(35, ColAjout).Paste 'j'ai mis Cells(35 parce que la première ligne de certaines colonnes est vide
        Next

    End With

End Sub
J'obtiens une erreur sur la ligne rouge "Propriété ou méthode non gérée par cet objet".

Merci d'avance.
Images attachées
Type de fichier : png résumé.PNG (92,8 Ko, 3 affichages)
Kaera est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/12/2011, 15h58   #6
Membre Expert
 
Homme
Retraité
Inscription : avril 2011
Messages : 694
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Retraité

Informations forums :
Inscription : avril 2011
Messages : 694
Points : 1 446
Points : 1 446
Re,

Essaie avec ce code
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
Sub descendre_colonnes()
Dim Col As Long
Dim plage As Range
Dim ColAjout As Integer
    With Sheets("résumé")
        Set plage = .Range("E5").CurrentRegion
        Set plage = plage.Offset(1, 1).Resize(plage.Rows.Count - 1, plage.Columns.Count - 1)
        For Col = 2 To plage.Columns.Count Step 2
            ColAjout = .Cells(40, .Columns.Count).End(xlToLeft).Column + 1
            plage.Columns(Col).Cut Destination:=.Cells(33, ColAjout)
        Next
    End With
End Sub
Cordialement.
gFZT82 est actuellement connecté   Envoyer un message privé Réponse avec citation 10
Vieux 08/12/2011, 21h46   #7
Membre du Club
 
Avatar de Kaera
 
Femme
Étudiant
Inscription : novembre 2011
Messages : 102
Détails du profil
Informations personnelles :
Sexe : Femme
Âge : 22
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : Santé

Informations forums :
Inscription : novembre 2011
Messages : 102
Points : 69
Points : 69
Re salut,

Entre temps j'ai fini par trouvé la même chose que ce que tu me proposes

Merci beaucoup de ton aide !

Kaera*
Kaera est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 18h38.


 
 
 
 
Partenaires

Hébergement Web