Macro compliquée

Résolu/Fermé
Farfadet88 Messages postés 6293 Date d'inscription lundi 28 janvier 2008 Statut Membre Dernière intervention 29 avril 2020 - 6 janv. 2010 à 11:47
Farfadet88 Messages postés 6293 Date d'inscription lundi 28 janvier 2008 Statut Membre Dernière intervention 29 avril 2020 - 7 janv. 2010 à 14:28
Bonjour,

J'ai un document excel assez compliqué et je bloque sur une macro.

J'ai plusieurs feuilles comportant la même trame mais avec des noms différents et une feuille (que l'on appellera "feuille finale" qui reprend certaines données de toute ces feuille.

Une macro me permet, grâce à une userform, d'insérer des données dans la première ligne vide de la feuille de mon choix.

Je cherche à y associer une macro qui reprenne les valeurs de cette ligne et la colle dans ma "feuille finale".
Jusque là pas de souci.
Sauf que ma feuille finale comprend une ligne "titre" pour chaque feuille de mon classeur.
Comment faire en sorte que les données enregistrées s'incrémentent dans la ligne en dessous de la ligne "titre" correspondant à la feuille remplie?

Exemple

"Feuille 1 ligne 1"
Lieu1 Situation1 Risque1

"Feuille 2 ligne 1"
Lieu2 Situation2 Risque2

"Feuille Finale"
Feuille1
Lieu1 Risque1

Feuille 2
Lieu2 Risque2



Quand jenregistre de nouvelles données sur la feuille1 grâce à ma userform je veux arriver à

"Feuille Finale"

"Feuille Finale"
Feuille1
Lieu1 Risque1
Lieu3 Risque3

Feuille 2
Lieu2 Risque2



Comment faire en sorte que mes données se mettent avant le titre "Feuille2" ?

A voir également:

21 réponses

Gord21 Messages postés 918 Date d'inscription samedi 21 novembre 2009 Statut Membre Dernière intervention 20 mars 2013 289
6 janv. 2010 à 13:25
Bonjour,
Une petite question : comment sont ajoutées tes données sur Feuille 1 ? (macro, manuellement, )

Pour comment faire, je pense que tu recherches la dernière ligne inscrite sous Feuille 1 dans Feuille finale, tu insères une ligne et tu copies tes données.
0
Farfadet88 Messages postés 6293 Date d'inscription lundi 28 janvier 2008 Statut Membre Dernière intervention 29 avril 2020 1 365
6 janv. 2010 à 13:30
Elles y sont insérées par macro.
exemple:
Range("a65536").End(xlUp).Offset(1, 0) = textbox1.value

Quelle est la macro permettant de rechercher la ligne en dessous de ma ligne "Feuille 1" et d'y insérer une nouvelle ligne? Sachant que ma ligne "feuille 1" est composée de plusieurs cellules fusionnées
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
6 janv. 2010 à 13:50
Salut,
Tu peux trouver cette ligne grâce à la fonction find (tu recherches Feuille1 par exemple) un exemple ici pas très récent...
0
Farfadet88 Messages postés 6293 Date d'inscription lundi 28 janvier 2008 Statut Membre Dernière intervention 29 avril 2020 1 365
7 janv. 2010 à 10:03
Re,

Bon ben je n'arrive pas à adapter son code pour réaliser le mien (et oui je suis une vraie bille).

Un peu d'aide ne serait pas de refus si tu as le temps.

Merci d'avance
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
7 janv. 2010 à 10:19
Salut Farfadet,
Petite question :
ta feuille "finale" est construite sur ce modèle :
feuille 1
des données
des données
<une ligne vide>
feuille 2
des données
des données
des données
<une ligne vide>
feuille 3
etc...
Avec systématiquement une ligne vide entre les données de la feuille précédente et le nom "feuille x"?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Farfadet88 Messages postés 6293 Date d'inscription lundi 28 janvier 2008 Statut Membre Dernière intervention 29 avril 2020 1 365
7 janv. 2010 à 10:27
Non.

Au tout début de l'utilisation j'ai:

Feuille1
Feuille2
Feuille3.
...


Et par la suite je veux obtenir

Feuille1
Données
Données
Données
Données
Feuille2
Données
Données
Feuille3
Données

Sachant que les cases "feuille" sont composées de plusieurs cases fusionnées. Ce sont en quelques sortes des cases "titre"

0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
7 janv. 2010 à 10:49
Voilà déjà la bonne syntaxe pour la méthode find :
Dim donnee As String, numlig As String
donnee = ActiveSheet.Name
numlig = Sheets("Feuille finale").Cells.Find(What:=donnee, LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlNext).Row


numlig te renvoie donc le numéro de ligne ou l'on trouve ton nom de feuille (feuille 1) sur la feuille finale

Reste à copier / coller ta ligne.
Pour le "copier" pas de souci, je suppose que tu copies la dernière ligne saisie et donc la dernière ligne non vide :
Sheets("Feuille 1").Range("A65536").End(xlUp).EntireRow.Copy

Par contre le "coller" pose problème. Le plus simple est de coller chaque nouvelle ligne juste sous la ligne de titre dans la feuille finale. Ton code complet donnerait ceci :

Dim donnee As String, numlig As String
'ton code ici
donnee = ActiveSheet.Name
numlig = Sheets("Feuille finale").Cells.Find(What:=donnee, LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlNext).Row
Sheets("Feuille finale").Range("A" & numlig).Offset(1, 0).EntireRow.Insert Shift:=xlDown
ActiveSheet.Range("A65536").End(xlUp).EntireRow.Copy Sheets("Feuille finale").Range("A" & numlig).Offset(1, 0)

0
Farfadet88 Messages postés 6293 Date d'inscription lundi 28 janvier 2008 Statut Membre Dernière intervention 29 avril 2020 1 365
7 janv. 2010 à 11:20
Erf ça a marché un moment dans un classeur de test mais ça ne marche pas dans mon vrai classeur

La macro m'insère une ligne sous celle recherchée et me colle le nom de cette ligne et non les valeurs de la ligne située en fin de tableau
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
7 janv. 2010 à 11:45
Donne nous ton code, se sera plus simple de le corriger...
Quand tu EDIT un message signale le car on ne le vois pas dans "mes interventions"...
0
Farfadet88 Messages postés 6293 Date d'inscription lundi 28 janvier 2008 Statut Membre Dernière intervention 29 avril 2020 1 365
7 janv. 2010 à 11:51
If Sheets("données").Range("m1") = "Administratif" Then
Sheets("Administratif").Select
Range("a65536").End(xlUp).Offset(1, 0) = Sheets("données").Range("n1")
Range("b65536").End(xlUp).Offset(1, 0) = Sheets("données").Range("o1")
Sheets("données").Range("l1").Copy
Range("c65536").End(xlUp).Offset(1, 0).Select
ActiveCell.PasteSpecial
If ActiveCell.Value = "Photo" Then ActiveCell.Comment.Visible = False
Range("d65536").End(xlUp).Offset(1, 0) = Sheets("données").Range("p1").Value
Range("e65536").End(xlUp).Offset(1, 0) = Sheets("données").Range("q1").Value
Range("f65536").End(xlUp).Offset(1, 0) = Sheets("données").Range("r1").Value
Range("g65536").End(xlUp).Offset(1, 0) = Sheets("données").Range("w1").Value
Range("i65536").End(xlUp).Offset(1, 0) = Sheets("données").Range("t1").Value
Range("j65536").End(xlUp).Offset(1, 0) = Sheets("données").Range("w1").Value
Range("m65536").End(xlUp).Offset(1, 0) = Sheets("données").Range("u1").Value
Range("h65536").End(xlUp).Offset(1, 0) = Sheets("données").Range("s1").Value
Range("k65536").End(xlUp).Offset(1, 0) = Sheets("données").Range("x1").Value
Range("l65536").End(xlUp).Offset(1, 0) = Sheets("données").Range("y1").Value

Sheets("suivi").Select
Range("a65536").End(xlUp).Offset(1, 0) = Sheets("données").Range("m1")
Range("b65536").End(xlUp).Offset(1, 0) = Sheets("données").Range("n1")
Range("c65536").End(xlUp).Offset(1, 0) = Sheets("données").Range("o1")
Range("d65536").End(xlUp).Offset(1, 0) = Sheets("données").Range("x1")
Range("e65536").End(xlUp).Offset(1, 0) = Sheets("données").Range("u1")

Dim donnee As String, numlig As String
donnee = ActiveSheet.Name
numlig = Sheets("suivi").Cells.Find(What:="administratif", LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlNext).Row
Sheets("suivi").Range("A" & numlig).Offset(1, 0).EntireRow.Insert Shift:=xlDown
Sheets("suivi").Range("A65536").End(xlUp).EntireRow.Cut Sheets("suivi").Range("A" & numlig).Offset(1, 0)

End If
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
7 janv. 2010 à 12:14
Tu écris :

Sheets("suivi").Range("A65536").End(xlUp).EntireRow.Cut Sheets("suivi").Range("A" & numlig).Offset(1, 0)


ce code coupe la dernière ligne saisie en feuille suivi pour la coller en feuille suivi sue la ligne sous le titre. C'est donc bien cela...
Je ne vois pas d'erreur.
Par contre,
Dim donnee As String
donnee = ActiveSheet.Name 
ne servent à rien
0
Farfadet88 Messages postés 6293 Date d'inscription lundi 28 janvier 2008 Statut Membre Dernière intervention 29 avril 2020 1 365
7 janv. 2010 à 12:30
Là est bien le souci
Le code est bon mais la macro exécutée ne correspond pas à ce qui se passe...
Les mystères d'excel
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
7 janv. 2010 à 12:34
essaie de rajouter ".value" à ces lignes :
Sheets("suivi").Select
Range("a65536").End(xlUp).Offset(1, 0) = Sheets("données").Range("m1").value
Range("b65536").End(xlUp).Offset(1, 0) = Sheets("données").Range("n1").value
etc etc
0
Farfadet88 Messages postés 6293 Date d'inscription lundi 28 janvier 2008 Statut Membre Dernière intervention 29 avril 2020 1 365
7 janv. 2010 à 12:41
Toujours le même problème
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
7 janv. 2010 à 13:12
Déjà change :
Dim numlig as string
par :
Dim numlig As Integer

et change :
Sheets("suivi").Range("A65536").End(xlUp).EntireRow.Cut Sheets("suivi").Range("A" & numlig).Offset(1, 0)

par
Sheets("suivi").Range("A65536").End(xlUp).EntireRow.Cut Range("A" & numlig).Offset(1, 0)
0
Farfadet88 Messages postés 6293 Date d'inscription lundi 28 janvier 2008 Statut Membre Dernière intervention 29 avril 2020 1 365
7 janv. 2010 à 13:16
C'est fait

toujours le même résultat
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
7 janv. 2010 à 13:17
Dans mon profil tu trouveras mon mail perso. Peut être pourrais tu m'envoyer ton fichier?
0
Farfadet88 Messages postés 6293 Date d'inscription lundi 28 janvier 2008 Statut Membre Dernière intervention 29 avril 2020 1 365
7 janv. 2010 à 13:33
Le mail vient de partir :)
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
7 janv. 2010 à 13:37
en réception. 18Mo le fichier Excel!!!!!!!!
0
Farfadet88 Messages postés 6293 Date d'inscription lundi 28 janvier 2008 Statut Membre Dernière intervention 29 avril 2020 1 365
7 janv. 2010 à 13:38
Ouais je pense que ce sont mes macros de débutant qui foutent le bordel :P
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
7 janv. 2010 à 14:16
Non ce ne sont pas tes macros "de débutant" qui alourdissent ton classeur. Ce sont les photos!
Un logo de 647Ko par feuille sur 8 feuille = 5Mo.
Ensuite toutes ces images insérées dans des commentaires...
Oui c'est beau, mais ça va forcément coincer à un moment ou à un autre.
Réduit au maximum les tailles de ces images quitte à perdre de leur qualité.

Au passage, bonjour Mr Le Pingou et bonne année...
0
Farfadet88 Messages postés 6293 Date d'inscription lundi 28 janvier 2008 Statut Membre Dernière intervention 29 avril 2020 1 365 > pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024
7 janv. 2010 à 14:28
Dako dak!
Encore merci
0
Le Pingou Messages postés 12049 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 29 avril 2024 1 430
7 janv. 2010 à 13:54
Bonjour Farfadet88,
Pouvez-vous mettre une copie du vrai classeur avec 2 à 3 feuilles contenant une dizaine de lignes et bien sur la UserForm la feuille [feuille finale] et les procédures (se sera moins lourd en taille !) sur http://cijoint.fr/
0
Farfadet88 Messages postés 6293 Date d'inscription lundi 28 janvier 2008 Statut Membre Dernière intervention 29 avril 2020 1 365
7 janv. 2010 à 13:55
Des pare-feux admin m'empêchent de déposer ou récupérer des fichier sur Ci-joint... Hélas
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
7 janv. 2010 à 13:59
J'ai compris.
Dans ton code tu nous écris :

Sheets("suivi").Select 
Range("a65536").End(xlUp).Offset(1, 0) = Sheets("données").Range("m1") 
Range("b65536").End(xlUp).Offset(1, 0) = Sheets("données").Range("n1") 
Range("c65536").End(xlUp).Offset(1, 0) = Sheets("données").Range("o1") 
Range("d65536").End(xlUp).Offset(1, 0) = Sheets("données").Range("x1") 
Range("e65536").End(xlUp).Offset(1, 0) = Sheets("données").Range("u1")


Or dans ta feuille suivi, la dernière ligne non vide avant cette macro est une cellule fusionnée. Donc les lignes représentées par "Range("a65536").End(xlUp).Offset(1, 0)" "Range("b65536").End(xlUp).Offset(1, 0)" etc ne sont pas les mêmes...
Solution :

Sheets("suivi").Select 
Dim i as Integer
i = Range("a65536").End(xlUp).Offset(1, 0).Row
Range("A" & i) = Sheets("données").Range("m1") 
Range("B" & i) = Sheets("données").Range("n1") 
Range("C" & i) = Sheets("données").Range("o1") 
Range("D" & i) = Sheets("données").Range("x1") 
Range("E" & i) = Sheets("données").Range("u1")


ps : j'ai supprimé ton fichier de mon ordi...
0