Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Extraction + insertion ligne et formule

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

mmalzert

XLDnaute Occasionnel
Bonjour à tous.

J'ai récupéré une macro qu'on m'avait gentimment écrite sur le forum il y a quelques temps et j'ai tenté de l'adapter à mon actuel problème.
J'essaie d'extraire les lignes qui me vont bien mais je n'y arrive pas. Je sens que je commence à comprendre comment ça fonctionne mais bon ca veut toujours pas.
J'ai également fais deux macros à l'aide de l'enregistreur que j'ai mis à la suite de la première. Le souci est que j'ai testé sur quelques lignes seulement. Par conséquent, ces deux macros ne fonctionneront pas correctement si, et ce sera le cas, je me retrouve avec plus de ligne que dans l'exemple.

Bref j'ai réellement besoin de votre aide. Je vous joins le fichier.
Merci pour votre aide.

Max
 

Pièces jointes

Re : Extraction + insertion ligne et formule

Bon j'ai remplacé mon code par :
Code:
Sub extrait()
' Extrait les données vers le l'onglet "Feuil2" Ne fonctionne pas !
    Dim plage As Range, c As Range
    Dim cDest As RecentFile
    Dim DerCol As Long
    Dim bEntete As Boolean
    With Feuil1
    ' Copie l'en tête
    Rows("6:6").Select
    Selection.Copy
    Sheets("Feuil2").Select
    Range("A1").Select
    Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
        False, Transpose:=False
    Range("A1").Select
    ' Remplace "production" par "start time"
        ActiveCell.FormulaR1C1 = "Start time"
    Range("A1").Select
        Set plage = .Range("A1:A" & .Range("A" & .Rows.Count).End(xlUp).Row)
        For Each c In plage
            If c = Left("Year", 4) Then
                If Not bEntete Then
                    DerCol = c.End(xlToRight).Column
                    c.Resize(1, DerCol).Copy Feuil2.Range("A" & Rows.Count).End(xlUp)
                    bEntete = True
                End If
                Set c = c.Offset(3)
                Do
                    .Range(c, .Cells(c.Row, DerCol)).Copy Feuil2.Range("A" & Rows.Count).End(xlUp).Offset(1)
                    Set c = c.Offset(3)
                Loop While c = " "
            End If
        Next c
    End With

' fais avec l'enregistreur de macro
' ajoute une colonne qui donne le mois correspondant à la date de la colonne A
With Feuil2
    Columns("B:B").Select
    Selection.Insert Shift:=xlToRight
    Range("B1").Select
    ActiveCell.FormulaR1C1 = "Mois"
    Range("B2").Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.NumberFormat = "General"
    Range("B2").Select
    ActiveCell.FormulaR1C1 = "=MONTH(RC[-1])"
    Range("B2").Select
    Selection.AutoFill Destination:=Range("B2:B10")
    Range("B2:B10").Select
    Columns("B:B").Select
    With Selection
        .HorizontalAlignment = xlCenter
    End With
    Range("B12").Select
    
' ajoute un colonne permettant une recherchev
    Columns("C:C").Select
    Selection.Insert Shift:=xlToRight
    Range("C1").Select
    ActiveCell.FormulaR1C1 = "Centre de charge"
    Range("C2").Select
    ActiveCell.FormulaR1C1 = "=VLOOKUP(RC[6],Référence!R2C1:R10C2,2,FALSE)"
    Range("C2").Select
    Selection.AutoFill Destination:=Range("C2:C10")
    Range("C2:C10").Select
    Range("A2").Select
    
End With
End Sub

Ca va un peu mieux mais ca m'extrait toujours rien.
 
Re : Extraction + insertion ligne et formule

Bonjour mmalzert,
Pour étirer la formule du mois en colonne B, voici un exemple (à modifier sur le même principe pour l'autre formule):

Code:
Columns("B:B").Select
    Selection.Insert Shift:=xlToRight
    Range("B2:B" & Range("A65536").End(xlUp).Row).FormulaLocal = "=MONTH(RC[-1])"
    Range("B1").Value = "Mois"
    Range("B1").Select
    With Selection
        .HorizontalAlignment = xlCenter
    End With

N'hésitez pas à reposter en cas de difficultées.
Cordialement
 
Re : Extraction + insertion ligne et formule

Bonjour à vous deux.

Ca marche parfaitement. Merci à vous deux pour vous être penché sur mon problème.

Par contre, honnêtement, il y a pas mal de chose que je ne comprends pas.
Par ex la variable n = 2. Pourquoi = 2 ? Du coup, je ne comprends pas non plus la définition de la plage range ("A" & n).

Ensuite je crois comprendre que tu définis une autre variable "x"... Je vois alors du range("A" & n) et du range("B" & x). Je suis franchement perdu.

Pierrejean, (ou Efgé) sans vouloir abusé, aurais-tu (vous) l'extrême gentillesse de bien vouloir détaillé tout ça par quelques explications, histoire que je ne repose pas les mêmes questions la prochaine fois.
En plus, j'ai une autre extraction dans le même genre à faire, et je voudrais bien éviter de venir vous embêter tous avec mes pbs.

Dans l'attente de te/vous lire, un très gros merci pour les heures et les heures de travail en moins, sans compter les possibilités d'erreur. Merci beaucoup.
 
Dernière édition:
Re : Extraction + insertion ligne et formule

Re,

Merci pour les explications pierrejean. Je reviendrais sans doute plus tard dessus.

Petite question en attendant celles plus spécifiques sans doute à la macro en elle même.
Pour la colonne "mois", l'affichage renvoi juste le chiffre/nombre correspondant au mois. Dans l'hypothèse ou je devrais traiter des années différentes, comment puis-je changer le code pour qu'il renvoi quelque chose de la forme "mm-aaaa" ?
J'ai essayé (un peu hasard) de mettre :
Code:
Sheets("Feuil2").Range("B" & x) = Month & Year(Sheets("Feuil2").Range("A" & x))
ou
Code:
Sheets("Feuil2").Range("B" & x) = Month.Year(Sheets("Feuil2").Range("A" & x))
Mais ça n'a pas l'air de bien vouloir. Quelle est la solution ?

Comment puis-je faire également pour qu'une textbox, ou peut être plus simplement que les cellules se colorent ou rouge lorsque la recherchev renvoie une erreur. (réf non trouvée).
J'ai modifié le code de la sorte pour le moment :
Code:
Sheets("Feuil2").Range("C" & x).FormulaLocal = "=RECHERCHEV(D" & x & ";Référence!A2:B41;2;faux)"
Je n'avais pas à la base pris la bonne colonne comme référence pour la recherche, d'où le changement de I en D.

Merci.
 
Re : Extraction + insertion ligne et formule

Re

A tester
Code:
Sheets("Feuil2").Range("B" & x) = [COLOR=blue]Format(Sheets("Feuil2").Range("A" & x), "mm-yyyy")
[/COLOR]      Sheets("Feuil2").Range("C" & x).FormulaLocal = "=RECHERCHEV(D" & x & ";Référence!A2:B41;2;FAUX)"
      [COLOR=blue]If IsError(Sheets("Feuil2").Range("C" & x).Value) Then Sheets("Feuil2").Range("C" & x).Interior.ColorIndex = 3[/COLOR]
 
Re : Extraction + insertion ligne et formule

Bon après décortiquage, j'ai "quelques" questions. J'espère que ce post ne sera pas trop rebutant.


Code:
'balayage de la colonne A de la feuille1 (because With et .)
'a partir de la ligne2 jusqu'a la derniere ligne non vide
For n = 2 To .Range("A65536").End(xlUp).Row
Je suppose qu'on aurait pu prendre entre la ligne 1 et 6 ?
Question que je sens bête : "n" est forcément une ligne ou s'agit-il d'une variable que l'on définit ? Car si c'est une variable, où définit-on qu'il s'agit d'une ligne ? Je sais pas si je me fais comprendre ?
Code:
    If .Range("A" & n) = "Start Date" Then
Si "colonne A et ligne 2" = "Start Date" alors
Code:
    .Range("A" & n).Copy Destination:=Sheets("Feuil2").Range("A1")
Copie la sélection sur A1 de la feuille 2.
Comment ça se passe s'il trouve plusieurs fois "Start Time" dans la colonne A ? Ca recopie et recolle en écrasant à partir de "A1" ?
Code:
    .Range("B" & n - 1 & ":N" & n - 1).Copy Destination:=Sheets("Feuil2").Range("D1")
Là je comprends pas trop le range même si je pense que ca sert à décaller d'un ligne vers le haut pour récupérer le "Start Time" et écraser "Production" qui aurait du se trouver en A1. Mais je suis pas vraiment sur.
Code:
Else
    If IsDate(.Range("A" & n)) Then
Sinon si en colonne A et à partir de la ligne 2 (je coince là dessus) le format est une date alors
Code:
    'x est la derniere ligne non vide de la colonne A de la feuil2 +1
    'soit la 1ere ligne vide
      x = Sheets("Feuil2").Range("A65536").End(xlUp).Row + 1
Donc là je comprends bien que tu définis "x" comme étant une variable. En l'occurrence qui correspond à la ligne 2 de la feuille 2.
Code:
    'copie sur cette ligne des infos de la feuil1
      .Range("A" & n).Copy Destination:=Sheets("Feuil2").Range("A" & x)
Là je ne comprends pas. Dans ce code, qu'est-ce qui permet de définir les valeurs que tu veux copier. Il n'y a pas de référence à :
Code:
    If .Range("A" & n) = "Start Date" Then

Code:
      .Range("B" & n & ":N" & n).Copy Destination:=Sheets("Feuil2").Range("D" & x)
    'saisie dans les colonnes B et C
Je suis perdu sur ton 1er range et par conséquent sur l'endroit où il doit copier. Colonne D à partir de la 1ère cellule vide ? Mais tu parles de B & C.
Code:
      Sheets("Feuil2").Range("B" & x) = Format(Sheets("Feuil2").Range("A" & x), "mm-yyyy")
Là je comprends que tu définis le format de la colonne B de la feuille 2. Mais tu "parles" de la colonne A avec un "sheets("Feuil2"). Alors que pour moi à l'origine, la date est dans la colonne A de la feuille 1. Je suis à nouveau perdu.
Code:
      Sheets("Feuil2").Range("C" & x).FormulaLocal = "=RECHERCHEV(D" & x & ";Référence!A2:B41;2;FAUX)"
A quoi correspondent les caractères & x & ? x est sans doute là pour définir la 1ère cellule vide. Le reste je vois pas.
Code:
    If IsError(Sheets("Feuil2").Range("C" & x).Value) Then Sheets("Feuil2").Range("C" & x).Interior.ColorIndex = 3
Ok pour ça.

Bon j'espère ne pas être trop embêtant avec de telles questions de débutant. Je pense que je pige maitenant déjà un peu mieux quelques principes. Déjà rien que relire ligne par ligne le code aide un peu, même si je pense que tes explications vont me faire repenser le contraire.

A te lire.
 
Re : Extraction + insertion ligne et formule


Vois ci-dessus
 
Dernière édition:
Re : Extraction + insertion ligne et formule

Merci beaucoup pour ces explications pierrejean.
Je viens de les lire à la volée et déjà ça m'éclaire plus. Je pense revoir tout ça demain matin. Vraiment merci pour ton temps.
Bonne soirée.
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
6
Affichages
294
  • Question Question
Microsoft 365 Tableau
Réponses
24
Affichages
2 K
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…