Probleme conversion cellule excel VBA

avyrex1626

XLDnaute Nouveau
Bonjour.

J'ai un fichier excel dont, dans les cellules de la colonne N, il peux y avoir des numéro de PO du format(00000-00).

Ex:360546-60

Par contre, dans certaine cellules, il peut y avoir plusieurs PO ex:087734-67, 221964-67, 221960-67, 097974-24, 221919-60

Mon problème est que je veux que la macro puise séparrer les PO s'il en a plus que un.

La facon de les séparer serais comme suis:

Le premier PO de la série reste sur la même ligne et cellule. Pour les autres, il doit inserrer une ligne en dessous et insérer le 2e numéro de PO dans la cellule de la colonne N. S'il en a un 3e, il ajoute un autre ligne en dessous et ajour le 3e po dans le cellule de la colonne N et etc...

So la cellule est vide, il n'y a rien a faire, et s'il y a qu'un seul numéro de PO, il le laisse tellquelle.

De plus, il dois aussi ajouter avec les POs des autres ligne, la même valeur de la colonne M-O-P et Q de la ligne premiere ou tous les PO ce trouvait au départ.




Bonjour.
J'ai un fichier excel, dans les cellules de la colonne N, il peut y avoir des numéros de PO du format(00000-00).
Ex: 360546-60
Par contre, dans certaines cellules, il peut y avoir plusieurs PO ex:[ B]087734-67, 221964-67, 221960-67, 097974-24, 221919-60[/B] Donc chaque PO est séparer par une virgule.
Mon problème est que je veux que la macro puisse séparer les PO s'il en a plus qu'un.
La façon de les séparer serait comme suit:
le premier PO de la série reste sur la même ligne et cellule. Pour les autres, il doit insérer une ligne en dessous et insérer le 2e numéro du PO dans la cellule de la colonne N. S'il en a un 3e, il ajoute une autre ligne en dessous et ajoute le 3e po dans la cellule de la colonne N et etc.
Si la cellule est vide, il n'y a rien à faire, et s'il y a qu'un seul numéro de PO, il le laisse tell quelle.
De plus, il doit aussi ajouter avec les pos des autres lignes, la même valeur de la colonne M-O-P et Q de la ligne première où toutes les PO se trouvait au départ.


Jusqu'à maintenant, voici le code mais je n'arrive pas à l'aisser que le premier PO de la série sur la première ligne. De plus, si le numéro commence par "0", il éfface le zéro.

Comment puise corriger la macro s.v.p?

Merci pour votre aide.

Code:
Dim Nom As String, Lib As String, Po As String

Application.ScreenUpdating = False
For n = 4 To Range("N" & Rows.Count).End(xlUp).Row
  Nom = Range("N" & n).Value
  Lib = Nom
  i = InStr(Lib, "-")
  While i > 0
    If i > 7 Then
      If IsNumeric(Mid(Lib, i - 7, 6)) And IsNumeric(Mid(Lib, i + 1, 2)) Then
        Po = Mid(Lib, i - 6, 9)
        Range("N" & n) = Range("N" & n) & ";" & Po
      End If
    End If
    Lib = Mid(Lib, i + 1)
    i = InStr(Lib, "-")
  Wend
  Range("N" & n) = Mid(Range("N" & n), 2)
Next n
For n = Range("N" & Rows.Count).End(xlUp).Row To 4 Step -1
  Range("N" & n) = Replace(Range("N" & n), Replace(Range("N" & n), ";", ", "), "")
  x = Split(Range("N" & n), ";")
  If UBound(x) > 0 Then
    Range("n" & n) = x(UBound(x))
'    Range("M" & n) = Replace(Range("M" & n), x(0), "")
    For m = UBound(x) - 1 To 0 Step -1
      Rows(n).Insert
      Range("N" & n) = x(m)
      Range("A" & n + 1 & ":M" & n + 1).Copy Destination:=Range("A" & n)
      Range("P" & n + 1).Copy Destination:=Range("P" & n)
    Next m
  End If
Next n
 

Pièces jointes

  • test separer pos.xlsm
    29.8 KB · Affichages: 59

WUTED

XLDnaute Occasionnel
Re : Probleme conversion cellule excel VBA

Bonjour avyrex1626,

Essaie ça :

VB:
Private Sub CommandButton1_Click()
    Dim Nom As String, temp() As String
    Dim j As Integer, k As Integer
    Application.ScreenUpdating = False
    Do
        k = Range("N65536").End(xlUp).Row
        For n = 4 To Range("N65536").End(xlUp).Row
          Nom = Range("N" & n).Value
          If InStr(Nom, ",") <> 0 Then
            temp = Split(Nom, ",")
            Range("N" & n).Value = ""
            Range("N" & n).Value = temp(UBound(temp))
                j = 1
                For i = UBound(temp) - 1 To 0 Step -1
                    Range("N" & n).EntireRow.Insert
                    Range("N" & n).Value = temp(i)
                    Range("A" & n + j & ":M" & n + j).Copy Destination:=Range("A" & n)
                    Range("P" & n + j).Copy Destination:=Range("P" & n)
                    j = j + 1
                Next
                n = n + j
          End If
        Next n
    Loop Until k = Range("N65536").End(xlUp).Row
    Application.ScreenUpdating = True
End Sub

Bonne journée,
WUTED
 
Dernière édition:

Papou-net

XLDnaute Barbatruc
Re : Probleme conversion cellule excel VBA

Bonjour avyrex1626, WUTED, le Forum,

Puisque je l'ai fait d'une façon un peu différente, je le joins.

@WUTED :
Attention, tu n'as pas rétabli le ScreenUpdating en fin de procédure.
Mais ta procédure est soignée !

Cordialement.
 

Pièces jointes

  • Copie de test separer pos.xlsm
    31.5 KB · Affichages: 38
Dernière édition:

WUTED

XLDnaute Occasionnel
Re : Probleme conversion cellule excel VBA

Re et bonjour Papou-net,

J'débute en VBA et je pensais que les propriétés d'Application, comme le ScreenUpdating, se remettaient par défaut à la fin de procédures/fonctions...

Merci pour l'info en tout cas ! :cool:

EDIT : j'ai édité mon code de départ avec la correction de Papou-net.

Bonne journée.
 
Dernière édition:

Papou-net

XLDnaute Barbatruc
Re : Probleme conversion cellule excel VBA

Re et bonjour Papou-net,

J'débute en VBA et je pensais que les propriétés d'Application, comme le ScreenUpdating, se remettaient par défaut à la fin de procédures/fonctions...

Merci pour l'info en tout cas ! :cool:

RE : WUTED,

Laisse-moi te dire que tu débutes bien : tu m'as rappelé l'usage de "Split" qui est beaucoup plus rapide que ma boucle d'enregistrement de tableaux.

Là,c'est à mon tour de te remercier.

A bientôt.

Cordialement.
 

Discussions similaires

Réponses
13
Affichages
398
Réponses
2
Affichages
158

Statistiques des forums

Discussions
312 520
Messages
2 089 297
Membres
104 092
dernier inscrit
karbone57