nicket96
Messages postés2Date d'inscriptionmardi 23 octobre 2007StatutMembreDernière intervention29 octobre 2007
-
25 oct. 2007 à 13:29
nicket96
Messages postés2Date d'inscriptionmardi 23 octobre 2007StatutMembreDernière intervention29 octobre 2007
-
29 oct. 2007 à 11:50
Bonjour à tous,
Je suis nouvel utilisateur Excel et VBA et j'ai un problème particulier à vous soumettre.
J'ai un fichier de données chiffrées qui contient des nombres normalement de 5 chiffres (n° internes de téléphone). Le problème est que la machine qui génère ces données fournit des données tronquées en cas de série complète (par exemple : 3012 pour dire tous les nombres compris entre 30120 et 30129 ou 345 pour tous les nombres compris entre 34500 et 34599). Le but de l'opération est d'étendre toutes les séries troquées afin d'avoir une liste complète. En plus, il s'agit de garder la mise en page sur 10 colonnes. J'ai pratiquement réussi à tout faire dans une macro mais il ne traite pas correctement certains cas et j'ignore pourquoi.
For i = 2 To intCol
Cells(1, i).Select
Range(Selection, Selection.End(xlDown)).Cut
Range("A1").End(xlDown).Select
ActiveCell.Offset(1, 0).Range("A1").Select
ActiveSheet.Paste
Next i
''AJOUTER NUMEROS MANQUANTS
Dim intLigne As Integer
Dim j As Byte
Dim k
Dim l As Byte
Range("A1:A10").Select ''CHANGER 2e RANGE POUR CHANGER LE NOMBRE DE COLONNES
Selection.Copy
Range("B1").Select
Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=True
Range("A11:A20").Select ''CHANGER 2e RANGE POUR CHANGER LE NOMBRE DE COLONNES
Selection.Copy
Range("B2").Select
Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=True
Range("A1:A20").Clear ''CHANGER 2e RANGE POUR CHANGER LE NOMBRE DE COLONNES
If intRangFinal Mod 10 = 0 Then ''ADAPTER POUR LE BON NOMBRE DE COLONNES
intRangFinal = intRangFinal / 10 ''ADAPTER POUR LE BON NOMBRE DE COLONNES
Else
intRangFinal = intRangFinal \ 10 + 1 ''ADAPTER POUR LE BON NOMBRE DE COLONNES
End If
For x = 1 To intRangFinal
Range("A1").End(xlDown).Select
If Selection = Range("A65536") Then
Range("A1").Select
Application.ScreenUpdating = True
''SUPPRESSION COLONNE A
Columns("A:A").Select
Selection.Delete Shift:=xlToLeft
Range("A1").Select
Application.ScreenUpdating = False
Exit Sub
End If
ActiveCell.Range("A1:A10").Select ''ADAPTER POUR LE BON NOMBRE DE COLONNES
Selection.Copy
Range("B1").Select
Selection.End(xlDown).Select
ActiveCell.Offset(1, 0).Range("A1").Select
Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=True
Range("A1").End(xlDown).Select
ActiveCell.Range("A1:A10").Select ''ADAPTER POUR LE BON NOMBRE DE COLONNES
Selection.Clear
gbinforme
Messages postés14946Date d'inscriptionlundi 18 octobre 2004StatutContributeurDernière intervention24 juin 20204 681 26 oct. 2007 à 14:20
bonjour
Ton code est très long pour être sûr d'avoir tout vu mais dans ta séquence "''AJOUTER NUMEROS MANQUANTS "
Il me semble que cela fonctionnerait plus correctement avec la méthode suivante qui prend les lignes dans l'ordre et met les générés en fin.
For k = 1 To intLigne
If Len(Cells(k, 1)) = 4 Then
For j = 0 To 9
Range("A1").End(xlDown).Offset(1, 0) = Cells(k, 1) & j
Next j
End If
If Len(Cells(k, 1)) = 3 Then
For j = 0 To 99
Range("A1").End(xlDown).Offset(1, 0) = Cells(k, 1) & Format(j, "00")
Next j
End If
Next k
De même il y a un problème dans ''SUPPRESSION NUMEROS COURTS car lorsque tu supprime il faut toujours commencer par en bas sinon tu loupes des lignes car le delete passe à la ligne suivante.
For m = intRow To 1 Step -1
If Len(Cells(m, 1)) = 4 Or Len(Cells(m, 1)) = 3 Then
Cells(m, 1).Delete Shift:=xlUp
End If
Next m
Ainsi, ta macro devrait être correcte et tiens nous au courant.