Petit problème de programmation dans une de macro d'Excel

  • Initiateur de la discussion Initiateur de la discussion Alphonss
  • Date de début Date de début

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 !

A

Alphonss

Guest
Bonjour,

Ceci est mon tout premier message sur un forum vous m'exuserez donc si je ne respecte pas un certain protocol si tant est qu'il y en existe réellement un.

Je vais vous présenter un bout de code qui marche et un autre qui sensé être amélioré mais qui lui ne marche pas ^^. Ou est le problème ? A vous de me le dire s'il vous plaît : o)

*********************************************************
**********************
*Ancien code (qui marche) *
**********************
For j = 1 To 65536
'Suppression de la ligne vide en dessous de Operator ID
If Cells(j, 1) = "Operator ID" Then
Rows(j + 1).Select
Selection.Delete Shift:=xlUp
End If
'Suppression de la ligne Enable status
If Cells(j, 1) = "Enable status" Then
Rows(j).Select
Selection.Delete Shift:=xlUp
End If
'Suppression de la ligne Re-enable date
If Cells(j, 1) = "Re-enable date" Then
Rows(j).Select
Selection.Delete Shift:=xlUp
End If
'Suppression de la ligne Approval status
If Cells(j, 1) = "Approval status" Then
Rows(j).Select
Selection.Delete Shift:=xlUp
End If
'Suppression de la ligne Last changed
If Cells(j, 1) = "Last changed" Then
Rows(j).Select
Selection.Delete Shift:=xlUp
End If
'Suppression de la ligne Last sign-on
If Cells(j, 1) = "Last sign-on" Then
Rows(j).Select
Selection.Delete Shift:=xlUp
End If
'Suppression de la ligne Calculated pwd
If Cells(j, 1) = "Calculated pwd" Then
Rows(j).Select
Selection.Delete Shift:=xlUp
End If
'Suppression de la ligne One-time password
If Cells(j, 1) = "One-time password" Then
Rows(j).Select
Selection.Delete Shift:=xlUp
End If
'Suppression de la ligne Active devices
If Cells(j, 1) = "Active devices" Then
Rows(j).Select
Selection.Delete Shift:=xlUp
End If
Next j


*******************************************
*Nouveau code (qui ne marche malheuresement pas^^) *
*******************************************
For j = 1 To 65536
'Suppression de la ligne vide en dessous de Operator ID
If Cells(j, 1) = "Operator ID" Then
Rows(j + 1).Select
Selection.Delete Shift:=xlUp
End If

'Suppression de lignes
If Cells(j, 1) = "Enable status" Or Cells(j, 1) = "Re-enable date" Or Cells(j, 1) = "Approval status" Or Cells(j, 1) = "Last changed" Or Cells(j, 1) = "Last sign-on" Or Cells(j, 1) = "Calculated pwd" Or Cells(j, 1) = "One-time password" Or Cells(j, 1) = "Active devices" then
Rows(j).Select
Selection.Delete Shift:=xlUp
End If
Next j
*********************************************************

Merci d'avance

Alphons
 
Re : Petit problème de programmation dans une de macro d'Excel

Bonjour,

tu peux nous donner plus d'info.
Quand tu dis que ton code ne marche pas c'est parce que :
1) tu as un message d'erreur -> a quel endroit ?
2) ton code ne donne pas le résultat attendu ?

Idéalement joins ton fichier car c'est plus simple de te répondre en ayant tous les éléments.
 
Re : Petit problème de programmation dans une de macro d'Excel

Bonjour et bienvenu,

Merci de présenter ton fichier modèle avec la macro qui va avec afin de tester et de dire aussi qu'est-ce qui ne marche pas quand tu dis que ça ne marche pas. Cela facilite énormément la compréhension de problème.
 
Re : Petit problème de programmation dans une de macro d'Excel

Suite...
Finalement, je me demande si on peut trouver plus simple ou plus court que :
Code:
[COLOR="DarkSlateGray"]Sub toto()
Dim j As Long
   For j = 1 To 65536
      If Cells(j, 1) = "Operator ID" Then Rows(j + 1).Delete Shift:=xlUp
      If Cells(j, 1) = "Enable status" Then Rows(j).Delete Shift:=xlUp
      If Cells(j, 1) = "Re-enable date" Then Rows(j).Delete Shift:=xlUp
      If Cells(j, 1) = "Approval status" Then Rows(j).Delete Shift:=xlUp
      If Cells(j, 1) = "Last changed" Then Rows(j).Delete Shift:=xlUp
      If Cells(j, 1) = "Last sign-on" Then Rows(j).Delete Shift:=xlUp
      If Cells(j, 1) = "Calculated pwd" Then Rows(j).Delete Shift:=xlUp
      If Cells(j, 1) = "One-time password" Then Rows(j).Delete Shift:=xlUp
      If Cells(j, 1) = "Active devices" Then Rows(j).Delete Shift:=xlUp
   Next j
End Sub[/COLOR]
ROGER2327
#1918
 
Re : Petit problème de programmation dans une de macro d'Excel

Bonjour,

Tout d'abord merci à tous de m'avoir répondu. Quand je parle que mon code ne fonctionne pas, je veux dire par la que je n'ai pas d'erreurs mais que je n'obtiens pas le résultat escompté. A savoir que l'ensemble de mon programme prend en charge une feuille .CSV et qu'li créer une nouvelle feuille .XLS pour chaque numéro qu'il rencontre ; tandis qu'avec ce code la il me laisse tous les numéros dans la page .CSV sans créer de nouvelles pages .XLS. Bon je ne sais pas si vous avez tout compris mais je ne pense pas que ce soit utile que je vous embête en vous expliquant mon programme en détails. Je vous copie ici la macro en question, qui n'est qu'une partie de mon programme final. Merci : o)


*********************************************************
Sub TransformationDuCSV()

ActiveSheet.Name = "PSPI"

'[NE PAS MODIFIER]Suppression des 24 premières lignes du CSV
Rows("1:24").Select
Selection.Delete Shift:=xlUp

'[NE PAS MODIFIER]Conversion du format CSV en EXCEL avec les cellules en textes
Columns("A:A").Select
Selection.TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _
TextQualifier:=xlNone, ConsecutiveDelimiter:=False, Tab:=False, _
Semicolon:=False, Comma:=False, Space:=False, Other:=True, OtherChar _
:="=", FieldInfo:=Array(Array(1, 2), Array(2, 2)), TrailingMinusNumbers:=True

'[NE PAS MODIFIER]Suppression de tous les espaces dans les cellules.
Dim L, C
For L = 1 To ActiveCell.SpecialCells(xlCellTypeLastCell).Row
For C = 1 To ActiveCell.SpecialCells(xlCellTypeLastCell).Column
Cells(L, C).Value = Trim(Cells(L, C).Value)
Next
Next

'[C'est ce petit bout de code ici encadrer par des tirets qui ne fonctionne 'apparemment pas]
'--------------------------------------------------------
For j = 1 To 65536
'Suppression de la ligne vide en dessous de Operator ID
If Cells(j, 1) = "Operator ID" Then
Rows(j + 1).Select
Selection.Delete Shift:=xlUp
End If

'Suppression de lignes
If Cells(j, 1) = "Enable status" Or Cells(j, 1) = "Re-enable date" Or Cells(j, 1) = "Approval status" Or Cells(j, 1) = "Last changed" Or Cells(j, 1) = "Last sign-on" Or Cells(j, 1) = "Calculated pwd" Or Cells(j, 1) = "One-time password" Or Cells(j, 1) = "Active devices" then
Rows(j).Select
Selection.Delete Shift:=xlUp
End If
Next j
'--------------------------------------------------------



'On commence du bas
For i = Selection.Rows.Count To 1 Step -1
If WorksheetFunction.CountA(Selection.Rows(i)) = 0 Then
Selection.Rows(i).EntireRow.Delete
End If
Next i

With Application
.Calculation = xlCalculationAutomatic
.ScreenUpdating = False
End With

'[NE PAS MODIFIER]Ligner les colonnes
Application.ScreenUpdating = False
Rows("1:1").Insert Shift:=xlDown
With Sheets("PSPI").Range("A1:A" & [A65000].End(xlUp).Row)

Set C = .Find("Operator ID", LookIn:=xlValues, LookAt:=xlWhole)
If Not C Is Nothing Then
Firstaddress = C.Address
Do
derlig = Cells(C.Row, 1).Offset(0, 1).End(xlDown).Row
derlig2 = [D65000].End(xlUp).Row + 2
Range(Cells(C.Row, 1), Cells(derlig, 2)).Copy
Cells(derlig2, 4).Select
Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
True, Transpose:=True
Set C = .FindNext(C)
Loop While Not C Is Nothing And C.Address <> Firstaddress
End If
End With
Columns("A:C").Delete Shift:=xlToLeft
Rows("1:1").Delete Shift:=xlUp
[A1].Select

'Suppression de la ligne vide au dessus d' Operator ID
For j = 1 To 65536
If Cells(j, 1) = "Operator ID" Then
Rows(j - 1).Select
Selection.Delete Shift:=xlUp
End If
Next j

'Suppression de la ligne Operator ID
For j = 1 To 65536
If Cells(j, 1) = "Operator ID" Then
Rows(j).Select
Selection.Delete Shift:=xlUp
End If
Next j

End Sub
*********************************************************

Bonne journée

Alphonss
 
Re : Petit problème de programmation dans une de macro d'Excel

Re...
Il est normal que vous n'ayez pas de réponse satisfaisante. Vous disiez (message #1) :
Ceci est mon tout premier message sur un forum vous m'exuserez donc si je ne respecte pas un certain protocol si tant est qu'il y en existe réellement un.

Je vais vous présenter un bout de code qui marche et un autre qui sensé être amélioré mais qui lui ne marche pas ^^. Ou est le problème ? A vous de me le dire s'il vous plaît : o)
Personne ne peut imaginer avec ça qu'il s'agit de créer des feuilles à partir d'un fichier "*.csv".
Ce que vous ajoutez ci-dessus n'est pas plus clair :
(...) Quand je parle que mon code ne fonctionne pas, je veux dire par la que je n'ai pas d'erreurs mais que je n'obtiens pas le résultat escompté. (...)
Quel est le résultat escompté ? A partir de quoi ?
(...) chaque numéro qu'il rencontre (...)
Où sont-ils, ces numéros ?
Je rejoins gwenlorin et Raja : un document montrant une partie du fichier initial avant traitement et après traitement est nécessaire à la compréhension de votre problème réel.​
Cordialement,
ROGER2327
#1924
 
Re : Petit problème de programmation dans une de macro d'Excel

Re,

Oui, je suis bien conscient que je vous offre peu d'informations mais ce programme appartient à mon entreprise et je ne peux vous le présenter dans son entier. De plus je ne peux absolument pas vous fournir même un court extrait du document initial et du document final car ces numéros sont confidentiels. Cependant je ne pense pas qu'il y est réellement besoin de savoir tout cela, je vais essayer de mieux m'exprimer en prenant un exemple général.

Est-ce que ces 2 codes sont équivalents et fonctionnent-ils tout 2 ?
__________________________________________________________
For j = 1 To 10
If Cells(j, 1) = "A" Then
Rows(j + 1).Select
Selection.Delete Shift:=xlUp
End If

If Cells(j, 1) = "B" Then
Rows(j).Select
Selection.Delete Shift:=xlUp
End If
Next j

__________________________________________________________


For j = 1 To 10
If Cells(j, 1) = "A" Or Cells(j, 1) = "B" Then
Row(j).Select
Selecton.Delete Shift:=xlUp
End If
Next j

__________________________________________________________

Voila en tout cas merci d'avance et encore désolé pour le peu d'infos que je peux vous fournir.

Alphonss
 
Re : Petit problème de programmation dans une de macro d'Excel

Bonjour Alphonss, le fil,

pour répondre à ta question, non, il ne sont pas équivalent car dans le premier tu fais un premier test:
Code:
If Cells(j, 1) = "A" Then
Si ce test est vrai, la ligne sera supprimée, mais le test suivant sera aussi executé et si celui-ci est également vrai, la macro va te supprimer la ligne suivante.
Dans tout les cas, aucun des 2 ne fonctionnera correctement car pour supprimer des lignes il faut "boucler" dans l'ordre décroissant comme ceci:

Code:
For j = 10 To 1 Step -1
If Cells(j, 1) = "A" Or Cells(j, 1) = "B" Then Rows(j).Delete Shift:=xlUp
Next j
Tu remarqueras au passage que j'ai enlevé Select, presque toujours inutile avec VBA.
 
Dernière édition:
- 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
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
5
Affichages
915
Réponses
4
Affichages
737
Réponses
5
Affichages
691
Retour