Macro compliquée
Résolu
Farfadet88
Messages postés
19
Date d'inscription
Statut
Membre
Dernière intervention
-
Farfadet88 Messages postés 19 Date d'inscription Statut Membre Dernière intervention -
Farfadet88 Messages postés 19 Date d'inscription Statut Membre Dernière intervention -
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" ?
--
Après Open Office essayez Opin Offece :P
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" ?
--
Après Open Office essayez Opin Offece :P
Configuration: ...
21 réponses
- 1
- 2
Suivant
-
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.
-
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
-
Salut,
Tu peux trouver cette ligne grâce à la fonction find (tu recherches Feuille1 par exemple) un exemple ici pas très récent... -
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-
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"?
-
-
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
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"
-
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)
-
-
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 -
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 -
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 -
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 -
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
-
Toujours le même problème
-
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)
parSheets("suivi").Range("A65536").End(xlUp).EntireRow.Cut Range("A" & numlig).Offset(1, 0) -
C'est fait
toujours le même résultat -
Dans mon profil tu trouveras mon mail perso. Peut être pourrais tu m'envoyer ton fichier?
-
Le mail vient de partir :)
-
en réception. 18Mo le fichier Excel!!!!!!!!
-
Ouais je pense que ce sont mes macros de débutant qui foutent le bordel :P
-
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...
-
-
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/
-
Des pare-feux admin m'empêchent de déposer ou récupérer des fichier sur Ci-joint... Hélas
-
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...
- 1
- 2
Suivant