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 01/02/2012, 15h39   #1
Invité de passage
 
Homme
Inscription : novembre 2011
Messages : 17
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : novembre 2011
Messages : 17
Points : 3
Points : 3
Par défaut Déterminer a partir de quelle ligne copier des données

Bonjour le forum !
J'utilise le code ci-dessous afin de copier les lignes de la feuille 1 et 2 vers la feuille "synthese" :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
Sub Mise_en_forme()
ligne = 1
For Each s In Array("Feuil1", "Feuil2")
For Lig = 1 To Sheets(s).[F65000].End(xlUp).Row
If Sheets(s).Cells(Lig, 6) <> "" Then
Sheets(s).Cells(Lig, 1).Resize(, 10).Copy
Sheets("Synthse").Cells(ligne, 2).PasteSpecial Paste:=xlValues
Sheets("Synthese").Cells(ligne, 1) = s
ligne = ligne + 1
End If
Next Lig
Next s
End Sub
Moi je souhaiterais effectuer la copie des données en 2 fois : une 1ere fois pour copier les données de la Feuil1 vers la feuille "Synthese", puis la Feuil2 vers la feuille Synthese.

Il faudrait donc que la 2nde macro sache a partir de quelle ligne elle doit copier les données dans la feuille Synthese...d'ou mon post !
Si vous avez des suggestions...

Merci d'avance,
Gaia77
Gaia77 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/02/2012, 16h27   #2
Expert Confirmé
 
Avatar de patricktoulon
 
patrick
Inscription : avril 2009
Messages : 1 831
Détails du profil
Informations personnelles :
Nom : patrick
Âge : 42
Localisation : France, Var (Provence Alpes Côte d'Azur)

Informations professionnelles :
Secteur : Bâtiment

Informations forums :
Inscription : avril 2009
Messages : 1 831
Points : 2 859
Points : 2 859
Envoyer un message via MSN à patricktoulon
Par défaut heu...!!!

bonjour tu y etait presque
il te fallait simplement separer les boucle sur les feuill et celle des lignes
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
Sub Mise_en_forme()
ligne = 1
for i =1 to 2
For Lig = 1 To Sheets(i).[F65000].End(xlUp).Row
If Sheets(i).Cells(Lig, 6) <> "" Then
Sheets(i).Cells(Lig, 1).Resize(, 10).Copy
Sheets("Synthse").Cells(ligne, 2).PasteSpecial Paste:=xlValues
Sheets("Synthese").Cells(ligne, 1) = s
ligne = ligne + 1
End If
Next Lig
Next i
End Sub
au plaisir
__________________
mes fichiers dans les contributions:
mon formulaire mail avec CDO en vba et mon formulaire mail avec CDO en vbs dans un HTA
mon nouveau mouse in out pour les boutons dans un userform
mon addin pour prendre un cliché de selection de cellules

si ton problème est résolu n'oublie pas de pointer :résolu:ça peut servir aux autres
et n'oublie pas de voter
patricktoulon est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/02/2012, 10h05   #3
Invité de passage
 
Homme
Inscription : novembre 2011
Messages : 17
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : novembre 2011
Messages : 17
Points : 3
Points : 3
Merci Patricktoulon,

ça ne fonctionne pas tout à fait, car je n'ai que la Feuil1 qui est copier vers la feuille "synthese" ...
Et là, je ne vois pas ou est le problème !
Un avis ?

MErci
Gaia77 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/02/2012, 16h53   #4
Expert Confirmé
 
Avatar de patricktoulon
 
patrick
Inscription : avril 2009
Messages : 1 831
Détails du profil
Informations personnelles :
Nom : patrick
Âge : 42
Localisation : France, Var (Provence Alpes Côte d'Azur)

Informations professionnelles :
Secteur : Bâtiment

Informations forums :
Inscription : avril 2009
Messages : 1 831
Points : 2 859
Points : 2 859
Envoyer un message via MSN à patricktoulon
Par défaut re

bonjour
j'ai répondu un peu vite

en fait je comprend pas très bien ce que tu veux copier

1 ligne ou une plage

dans le premier cas c'est presque bon mais dans le 2eme c'est pas du tout la bonne méthode


plus de renseignement


au plaisir
__________________
mes fichiers dans les contributions:
mon formulaire mail avec CDO en vba et mon formulaire mail avec CDO en vbs dans un HTA
mon nouveau mouse in out pour les boutons dans un userform
mon addin pour prendre un cliché de selection de cellules

si ton problème est résolu n'oublie pas de pointer :résolu:ça peut servir aux autres
et n'oublie pas de voter
patricktoulon est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/02/2012, 15h10   #5
Invité de passage
 
Homme
Inscription : novembre 2011
Messages : 17
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : novembre 2011
Messages : 17
Points : 3
Points : 3
Bonjour,
En fait je souhaite copier vers la feuille "synthese" toutes les lignes des feuilles 1 et 2 dont la cellule F n'est pas vide.

J'espère avoir été clair ,

Merci d'avance,
Gaia77
Gaia77 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/02/2012, 16h29   #6
Membre Expert
 
Homme
Retraité
Inscription : avril 2011
Messages : 700
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Retraité

Informations forums :
Inscription : avril 2011
Messages : 700
Points : 1 460
Points : 1 460
Bonjour,
Citation:
Il faudrait donc que la 2nde macro sache a partir de quelle ligne elle doit copier les données dans la feuille Synthese...
La variable Ligne est incrémentée après chaque copie de ligne.
Quant on passe de la feuille1 à la feuille 2, la copie est réalisée à la ligne suivante puisque la variable Ligne n’est pas réinitialisée.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Option Explicit
Sub Mise_en_forme()
Dim Sh As Variant
Dim Lig As Long, Ligne As Long
    Ligne = 1
    For Each Sh In Array("Feuil1", "Feuil2")
        With Worksheets(Sh)
        For Lig = 1 To .Range("F" & .Rows.Count).End(xlUp).Row
            If .Cells(Lig, 6) <> "" Then
                .Cells(Lig, 1).Resize(, 10).Copy
                Sheets("Synthese").Cells(Ligne, 2).PasteSpecial Paste:=xlValues
                Sheets("Synthese").Cells(Ligne, 1) = Sh
                Ligne = Ligne + 1
            End If
        Next Lig
        End With
    Next Sh
End Sub
Cordialement.
gFZT82 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2012, 15h28   #7
Expert Confirmé
 
Avatar de patricktoulon
 
patrick
Inscription : avril 2009
Messages : 1 831
Détails du profil
Informations personnelles :
Nom : patrick
Âge : 42
Localisation : France, Var (Provence Alpes Côte d'Azur)

Informations professionnelles :
Secteur : Bâtiment

Informations forums :
Inscription : avril 2009
Messages : 1 831
Points : 2 859
Points : 2 859
Envoyer un message via MSN à patricktoulon
Par défaut re

bonjour

ou alors tu a la fonction native de excel "find et find next "

code testé et commenté a chaque ligne :
Code :
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
 
Sub copie_dansfeuille_synthese()
'on repere la premiere ligne vide dans le sheets("synthese")
    ligsynt = Sheets("synthese").Range("a65630").End(xlUp).Row + 1
    For Each sh In Array("Feuil1", "Feuil2")
        'dans toute les lignes de  la colonne "f" dans le sheets(feuil1)
        With Sheets(sh).Range("f1:f" & Sheets(sh).Range("f" & Rows.Count).End(xlUp).Row)
            'on cherche ce qui est différent de rien dans la colonne f
            Set cellule = .Find("*", LookIn:=xlValues)
            'si il y a une cellule contenant quelque chose en f
            If Not cellule Is Nothing Then
                ' firstadress devient l'addresse de cette cellule
                firstAddress = cellule.Address
                Do
                    'donc on copy la plage "A" jusqu'à "Z" de la ligne de la cellule trouvéeen feuil1
                    ' et la destination est la plage "a" jusqu'à "Z" de la premiere ligne "ligsynt" du sheets ("synthese")
                    Sheets(sh).Range("A" & cellule.Row & ":z" & cellule.Row).Copy Destination:=Sheets("synthese").Range("a" & ligsynt)
                    'on ajout 1 a ligsynt pour passer a la suivante
                    ligsynt = ligsynt + 1
                    'on cherche la prochaine occurence dans feuil1 en colonne f(je rapelle que l'on a utilisé le joker (*)_
                    'c 'est a dire tout ce qui est différent de rien
                    Set cellule = .FindNext(cellule)
                    'on continu a boucler tant que l'on est pas revenu a la premiere adresse trouvée(firstaddress)
                Loop While Not cellule Is Nothing And cellule.Address <> firstAddress
            End If
        End With
    Next
End Sub
au plaisir
__________________
mes fichiers dans les contributions:
mon formulaire mail avec CDO en vba et mon formulaire mail avec CDO en vbs dans un HTA
mon nouveau mouse in out pour les boutons dans un userform
mon addin pour prendre un cliché de selection de cellules

si ton problème est résolu n'oublie pas de pointer :résolu:ça peut servir aux autres
et n'oublie pas de voter
patricktoulon est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 17h31.


 
 
 
 
Partenaires

Hébergement Web