Remplissage automatique avec insertion de ligne VBA

Bonjour à tous,

Vous lire m'a grandement aidé sur plein de problèmes que j'avais sur mes macros, mais la, étant pas un grand champion des macros, je suis en difficulté, je sollicite donc votre aide

Alors, dans le fichier joint, vous verrez dans une première feuille un tableau avec 3 colonnes :

  • Feuille
  • Code
  • Valeur

Mon but est d'avoir une macro me permettant de copier de 2 façons différents les donnés "code" dans les feuilles indiquées dans ce tableau (que je puisse faire une recherchev après pour récupérer la valeur de ce code)

En A1, je souhaiterais que une macro insère le nombre de ligne correspondant au nombre de code que j'ai dans le tableau et comme ce nombre peut varier, il faut que je puisse actualiser (donc qu'avec la meme macro cela supprime les lignes entre les 2 bordures puis ajoute le nombre de ligne dont j'ai pour insérer tout mes codes). il faudrait ensuite que la macro insère une rechercheV pour récupérer les valeurs.

En A2, c'est plus complexe, il faudrait que une autre macro (une macro par feuille ) créée autant de "bloc" que dans mon exemple.

En gros 3 code à récupérer, 3 tableau à créer et il faut copier coller chaque code dans un "tableau".

J'ai déjà une ébauche de code pour le A1, mais il est lourd. Pour le A2 j'arrive à rien ...

Si vous aviez des pistes pour m'aider ce serait tip top !!!

Merci beaucoup

25classeur2.xlsx (10.94 Ko)
25classeur2.xlsx (10.94 Ko)

J'ai réussi pour la première solution cela fonctionne,

Personne n'a d'idée pour la boucle qui me permettrai de copier les valeurs avec des lignes d'écarts ?

bonsoir,

un essai sur le fichier joint

Cordialement

44classeur2.xlsm (20.48 Ko)

Hello,

Ah c'est génial, j'étais incapable d'écrire ca, après mes tests ca fonctionne parfaitement,

Il faut juste que j'arrive à le comprendre pour pouvoir l'adapter à mon vrai fichier maintenant

Petite question en anticipation, c'est faisable de rajouter du code pour que lorsque l'on relance la macro, il n'y ai pas besoin de supprimer manuellement ce qui avait été importé pour éviter les doublons ?

Merci beaucoup !

Bonjour,

Le fichier avec la suppression des anciennes données et des commentaires sur le déroulement de la macro.

Cordialement

14classeur2.xlsm (21.52 Ko)

Re,

Une erreur sur le fichier joint précédemment.

Je pense que celui-ci devrait être bon.

Ok c'est génial cette macro, j'ai réussi à l'adapter à mon fichier et à la compléter

Il y a une chose que je me demande, c'est possible de faire la mise en forme sur cette macro ?

Lorsqu'elle insère les cellules, ajouter une ligne dans la boucle pour lui dire de colorer en jaune par exemple,

j'ai essayé avec mes basiques mais je ne suis pas sur qu'on puisse

En tous cas encore un Grand MERCI, ca m'a sauvé j'étais loin d'écrire quelque chose de ci-bien, j'ai re modifié en A1 (qui filtrait, copier coller et insérer un look up) ...

Bonjour toutes et tous

Merci à Haonv qui a fait le plus gros travail

si j'ai compris dans la feuille Base de ton classeur avec l'aide de la macro sur le Module1 d'Haonv

en ajoutant :

' -[...] -- code

Trouve.Font.ColorIndex = 6 ' couleur jaune ajouter

' suite du code

ici sur le forum pour les couleurs

Spoiler
Option Explicit
Sub copierA2()
Dim MaPlage As Range, Trouve As Range, Adresse1 As String
Dim Compteur As Integer, Nb As Integer, i As Integer

''on supprime les anciens blocs
With Worksheets("A2")
If .Range("A:A").Find("TOTAL PLAGE").Row > 11 Then
    .Range("7:" & .Range("A:A").Find("TOTAL PLAGE").Row - 5).Delete
End If
End With

Application.ScreenUpdating = False
If Worksheets("Base").Range("B4") <> "" Then  ''on vérifie qu'on a des données à traitées
    With Worksheets("Base")
        .Range("B3:D3").AutoFilter    ''on supprime les filtres qui peuvent faussées les plages de données
        Set MaPlage = .Range("B3:B" & Range("B3").End(xlDown).Row)    ' on détermine la plage à traitée
        Nb = Application.WorksheetFunction.CountIf(MaPlage, "A2")       ''on compte le nombre de "A2", pour déterminer le nombre de lignes à insérer
    End With
        Set Trouve = MaPlage.Find("A2")     ' on cherche la premiere adresse de "A2"
        If Not Trouve Is Nothing Then
            Adresse1 = Trouve.Address       ' on mémorise la premiere adresse
                With Worksheets("A2")
                    .Rows(5).Resize(Nb * 3).Insert Shift:=xlDown
                    Compteur = 4        ''on initialise le compteur à 4
                    Do
                        Compteur = Compteur + 3     ' on incremente le compteur qui détermine la ligne ou sera inscrit les données
                            .Cells(Compteur, 2) = "Code"        ''on inscrit les données
                            .Cells(Compteur, 3) = "Valeur"
                            .Cells(Compteur + 1, 2) = Trouve.Offset(, 1)
                            Trouve.Font.ColorIndex = 0   ' noir ajouter  https://www.excel-pratique.com/fr/vba/couleurs.php
                            .Cells(Compteur + 1, 3) = Trouve.Offset(, 2)
                            Trouve.Font.ColorIndex = 6    ' jaune ajouter  https://www.excel-pratique.com/fr/vba/couleurs.php
                       Set Trouve = MaPlage.FindNext(Trouve)        ' on cherche le prochain "A2"
                    Loop While StrComp(Adresse1, Trouve.Address) <> 0 '' on boucle tant que l'on ne retrouve pas la premier adresse de "A2"
                 Trouve.Font.ColorIndex = 10    ' vert foncé ajouter  https://www.excel-pratique.com/fr/vba/couleurs.php
                 End With
           End If
    Worksheets("Base").Range("B3:D3").AutoFilter        ''on remet le filtre
End If
Application.ScreenUpdating = True
End Sub

crdlt,

André

ztestcolor

Yes je parlais aussi lors de l'import, mais j'ai du faire une erreur la première fois en essayant car la ca remarche :

Cells(Compteur, 2).Interior.Color = RGB(174, 240, 194)

Ce qui me permet ainsi de mettre en forme tout ce qui est importé dans mon fichier final (beaucoup plus lourd, et macro à adapter à un 10aines de feuilles avec des informations différentes et surtout pas mal de modification).

Je pense que je peux m'en sortir maintenant sur ce fichier, en espérant qu'il peut en aider d'autres, car c'est super utile comme macro, je le réutiliserai souvent

Encore merci

Bonjour,

je reprend ce fil, parce qu'en adaptant cette macro je bute sur un problème,

Macro du fichier :

'on supprime les anciens blocs

If Worksheets("A2").Range("A:A").Find("TOTAL PLAGE").Row > 11 Then

Range("5:" & Worksheets("A2").Range("A5:A100").Find("TOTAL PLAGE").Row - 7).Delete

End If

Elle supprime donc les lignes à partir de la ligne 5 jusqu'à la cellule TOTAL PLAGE,

Si j'ai en colonne A une cellule contient "Début" et une contient "total plage" et que je souhaite qu'elle supprime entre Début +1 et Total Plage - 1 ; Auriez vous une idée ?

J'ai essayé de combiner des range mais j'ai toujours un message d'erreur, et j'ai pas d'idée pour créer un for qui fonctionnerai ...

Merci

C'est bon j'ai trouvé en fait,

En gros :

L as integer

If (Meme conditions )

For L = Range'("A:A").Find("Début").Row +1 TO Range'("A:A").Find("Total").Row -1

Rows(L).Delete

L=L+1

Bon en fait, après plusieurs essais, ça supprime des lignes en dessous de ma ligne total ainsi que ma ligne total, pour une raison inexplicable

J'ai crié victoire trop vite, donc si quelqu'un a une macro un peu mieux pour supprimer toutes les lignes comprises entre deux cellules sans supprimer lesdites cellules je suis preneur ! (surtout après avoir épluché toutes les boucles possibles et imaginables ce soir avec mes compétences ahah)

Si ça peut en aider certains, en cas de "For" pour supprimer des lignes il faut faire tourner la macro en "Step -1", sinon il y a un décalage qui va supprimer la ligne total, donc mon problème est résolu

J'essaye d'ajouter des recherches V dans la macro de Haonv, mais ca ne fonctionne pas, quelqu'un saurait comment faire ?

En gros au niveau du compteur, j'aimerai pour certaines de mes feuilles que mes données se mettent à jour,

donc on garde le compteur et offset sur la première ligne, mais j'aimerai qu'elle insère une recherche V en fonction de ce qui a été inséré à gauche.

Ca me semblait facile, mais rien de ce que j'essaye fonctionne ...

Bonjour,

Pour insérer recherchev, remplace

.Cells(Compteur + 1, 3) = Trouve.Offset(, 2)

Par

.Cells(Compteur + 1, 3).FormulaLocal = "=RECHERCHEV(B" & Compteur + 1 & ";Base!C:D;2;0)"

dans la boucle du compteur.

Pour ce qui est de supprimer les lignes entre "Début" et "Total plage", tu n'es pas obligé de faire une boucle.

Dim LigneDebut As Integer, LigneTotal As Integer

LigneDebut = Range("A:A").Find("Début").Row + 1

LigneTotal = Range("A:A").Find("Total plage").Row - 1

Range(LigneDebut & ":" & LigneTotal).Delete

supprime les lignes en une fois.

Cordialement

Je vais t'envoyer une caisse de vin Haonv, c'est magnifique ma macro grâce à toi !

Merci,

Pas de problème, j'ai encore de la place dans ma cave....

Cordialement

Ahah,

J'aurai 2 toutes dernières questions sur ton code et je serai bon,

Te semble-t-il possible de :

  • Au niveau du filtre sur la plage, indiquer la colonne dans laquelle il doit rechercher (je veux tous les A1, mais il se peut que j'ai un A1 ailleurs)
  • Effectuer un filtre avant qu'il recherche dans la plage (filtrer sur une valeur une colonne, et ensuite chercher dans cette plage A1) par exemple !

Si ce n'est pas possible je me débrouillerai autrement mais si c'est possible ce serait bien cool

Bonjour,

Il faudrait un peu plus de précisions.

- Au niveau du filtre sur la plage, indiquer la colonne dans laquelle il doit rechercher (je veux tous les A1, mais il se peut que j'ai un A1 ailleurs)

comment doivent être déterminées les colonnes: parmi certaines; par l'utilisateur; ou autre ?

Pourra-t-il y avoir plusieurs colonnes lors d'un même traitement ?

- Effectuer un filtre avant qu'il recherche dans la plage (filtrer sur une valeur une colonne, et ensuite chercher dans cette plage A1) par exemple !

c'est ce que fait la macro:elle filtre sur B, transcrit les données sur la 2° feuille et remet le filtre à toutes les valeurs de B

Cordialement

Mon premier tirer n’a aucun intérêt en fait,

Alors ce que je voulais dire, je me suis mal exprimé,

C’est est ce qu’il peut faire la recherche selon deux critères,

Dans une colonne je vais avoir des 1, 2, 3...

dans une autre A1, ...

Je peux avoir sur des lignes 1 et A1 comme 2 et A1,

Je me demandais donc si je pouvais rechercher dans la plage les A1 si dans l’autre ligne j’ai 1 ?

Si c’est trop compliqué pas de soucis j’arrive à contourner mais ça complexifie pas mal mon fichier

Re,

Je peux avoir sur des lignes 1 et A1 comme 2 et A1,

Dans quand colonne seront les 1 ou 2 ....

Rechercher des sujets similaires à "remplissage automatique insertion ligne vba"