insertion de nouvelles lignes avec les numéros manquants

D

david et lili

Guest
bonjour à vous tous,

nous avons besoin d'aide pour compléter un tableau. En A B C D, nous avons un code et en E nous avons un numéro qui est rattaché à ce code. Nous avons ainsi peut être à peu près 300 Lignes.
Tous les chiffres en E sont compris entre 1 et 5OO, mais vu que nous avons que environ 300 codes, tous les chiffres ne sont donc pas rerésentés.
Ce que nous aimerions, c'est pouvoir compléter notre tableau avec les numéros qui manquent dans la colonne E de façon à avoir tous les nombres de 1 à 500, triés par ordre croissant

Il faut donc déjà pouvoir reconnaître les chiffres qui manquent et ensuite pouvoir les insérer.

Possible ?

merci d'avance à ceux qui se pencheront sur ce problème.
 
G

galopin01

Guest
Bonjour,
Voilà une petite macro très simple qui fera ce travail, A CONDITION QUE
la colonne E soit triée dans l'ordre croissant, et ne comporte pas d'entête...

Sub Test()
iR = [E1000].End(xlUp).Row
While Cells(iR, 5).Value <> iR
Rows(iR).Copy Cells(iR, 1)
iR = iR - 1
Wend
End Sub

A+
 
G

galopin01

Guest
La même en couleur avec quelques lignes inutiles
(remplacer XXX par le nombre de ligne d'entête)

Sub Test()
inutile = XXX
iR = [E1000].End(xlUp).Row
While Cells(iR, 5).Value <> iR + inutile
Rows(iR).Copy Cells(iR + inutile, 1)
iR = iR - 1
Wend
End Sub

A+
 
D

dg

Guest
Bonjour David et Lili

Bonjour Galopin01

Commencez ap nommez votre colonne E "ref" puis coller le code suivant sur un bouton

Private Sub CommandButton1_Click()
lig = 1
For i = 1 To 500
flag = Application.WorksheetFunction.Lookup(i, Range("ref"))
If flag = i Then
' la valeur existe
Else
Message = "Référence " & i & " inéxistante"
reponse = MsgBox(Message)
Range("A" & 300 + lig) = InputBox("Entrez le paramètre 1")
if Range("A" & 140 + lig) = 501 then exit sub
Range("B" & 300 + lig) = InputBox("Entrez le paramètre 2")
Range("C" & 300 + lig) = InputBox("Entrez le paramètre 3")
Range("D" & 300 + lig) = InputBox("Entrez le paramètre 4")
Range("E" & 300 + lig) = i
lig = lig + 1
End If
Next i
End Sub

il ne reste plus alors qu'a trier le tableau (saisir 501 en parametre 1 pour sortir de la boucle)

A+
 
D

dg

Guest
re +

Vous pouvez simplifier le code ainsi pour ne remplir que la colonne E

Private Sub CommandButton1_Click()
lig = 1
For i = 1 To 500
flag = Application.WorksheetFunction.Lookup(i, Range("ref"))
If flag = i Then
' la valeur existe
Else
Range("E" & 300 + lig) = i
lig = lig + 1
End If
Next i
End Sub


A++
 
G

Galliot

Guest
Effectuer d'abord un tri basé sur la colonne E
Ensuite executer successivement les 2 macros ci-dessous
Attention ceci est basé sur le fait qu'il n'y a pas d'en-tete sur les colonnes
S'il y en a corriger au niveau de "c.value=c.Row" en mettant par exemple "c.value=c.row-1" s'il y a une ligne d'en-tete "c.value=c.row-2" s'il y a 2 lignes etc...
La 1ere macro detecte la non succession des chiffres en E et insere une ligne
la 2eme remplit la cellule E qui est evidemment à 0

Sub Macro1()
For Each c In Range("E1", "E500")
If Not (c.Value = c.Row) Then
c.Select
Selection.Insert Shift:=xlDown
End If
If c.Value = 0 Then Exit For
Next
End Sub

Sub Macro2()
For Each c In Range("E1", "E500")
If c.Value = 0 Then c.Value = c.Row
Next
End Sub
 
R

Robert

Guest
Bonjour à tous les intervenants sur ce fil, bonjour le forum,

Hou la la !! je vois que ce post en a passioné plus d'un. Comme ça fait un moment que je galère dessus je me permets d'envoyer ma proposition en pièce jointe malgré tout ce qui a été dit.

À plus,

Robert
 

Pièces jointes

  • codes.zip
    10.7 KB · Affichages: 41
  • codes.zip
    10.7 KB · Affichages: 39
  • codes.zip
    10.7 KB · Affichages: 37
D

david et lili

Guest
Merci à vous tous de nous avoir accorder votre temps et vos connaissances !
Avec toutes ces réponses concernant notre problème nous devrions trouver largement notre bonheur... et nous lancer dans notre première macro, ce qui n'est pas une mince affaire !!!

A bientôt et bon dimanche !
 

Discussions similaires

Statistiques des forums

Discussions
311 732
Messages
2 081 995
Membres
101 857
dernier inscrit
mt60400