Macro
Résolu/Fermé
Mark
-
2 août 2012 à 11:32
Marrk Messages postés 2 Date d'inscription vendredi 3 août 2012 Statut Membre Dernière intervention 3 août 2012 - 3 août 2012 à 09:55
Marrk Messages postés 2 Date d'inscription vendredi 3 août 2012 Statut Membre Dernière intervention 3 août 2012 - 3 août 2012 à 09:55
A voir également:
- Macro
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Macro word - Guide
- Macro logiciel - Télécharger - Organisation
- Macro recorder - Télécharger - Confidentialité
- Telecharger macro nblettre.xla - Forum Bureautique
6 réponses
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 750
2 août 2012 à 12:09
2 août 2012 à 12:09
Bonjour,
Cette procédure, si la feuille NonNuls n'existe pas, va la créer, si elle existe, son contenu sera effacé, et va y stocker ce que tu suhaites.
Exécution pour 20 000 lignes en 5,15 secondes...
Cette procédure, si la feuille NonNuls n'existe pas, va la créer, si elle existe, son contenu sera effacé, et va y stocker ce que tu suhaites.
Exécution pour 20 000 lignes en 5,15 secondes...
Option Explicit Sub RenvoieNonNuls() Dim MaFeuil As Worksheet, DrLig As Long, DrCol As Integer Dim Donnees(), Col As Integer, Lig As Long, CptCol As Integer '!!!IMPORTANT : '!!!La feuille active DOIT être la feuille qui contient toutes les données Set MaFeuil = ActiveSheet 'Si dans le classeur, il existe une feuille appelée "NonNuls" Alors If FeuilleExiste(ThisWorkbook, "NonNuls") Then 'On supprime tout ce qu'elle contient With Sheets("NonNuls") .Cells.Clear End With 'Si elle n'existe par Else 'on la créé Sheets.Add ActiveSheet.Name = "NonNuls" End If With MaFeuil DrLig = .Range("A" & Rows.Count).End(xlUp).Row DrCol = .Cells(1, Cells.Columns.Count).End(xlToLeft).Column Donnees = .Range(.Cells(1, 1), .Cells(DrLig, DrCol)) End With With Sheets("NonNuls") For Lig = LBound(Donnees) + 1 To UBound(Donnees) CptCol = 2 .Cells(Lig - 1, 1) = Donnees(Lig, 1) For Col = LBound(Donnees, 2) + 1 To UBound(Donnees, 2) 'Debug.Print Donnees(Lig, Col) & " " & Lig & " " & Col If Donnees(Lig, Col) <> "" Or Donnees(Lig, Col) <> 0 Then .Cells(Lig - 1, CptCol) = Donnees(1, Col) CptCol = CptCol + 1 End If Next Next End With End Sub Function FeuilleExiste(wk As Workbook, stFeuille) As Boolean On Error Resume Next FeuilleExiste = Not (wk.Sheets(stFeuille) Is Nothing) End Function
Bonjour,
le programme ne me renvoie pas la bonne donnée, il renvoie toute la première colonne c'est à dire tous les numéro article mais pas les pays.
le programme ne me renvoie pas la bonne donnée, il renvoie toute la première colonne c'est à dire tous les numéro article mais pas les pays.
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 750
3 août 2012 à 08:47
3 août 2012 à 08:47
Bonjour,
Dans ce code j'ai supposé que la ligne d'entêtes de colonne est la ligne 1. Est ce le cas?
Dans tous les cas de figure, je vais avoir besoin d'un fichier exemple...
Dans ce code j'ai supposé que la ligne d'entêtes de colonne est la ligne 1. Est ce le cas?
Dans tous les cas de figure, je vais avoir besoin d'un fichier exemple...
Marrk
Messages postés
2
Date d'inscription
vendredi 3 août 2012
Statut
Membre
Dernière intervention
3 août 2012
3 août 2012 à 09:33
3 août 2012 à 09:33
https://www.cjoint.com/?0HdjGV8ITFq
Voila. Merci de votre aide.
Voila. Merci de votre aide.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 750
3 août 2012 à 09:41
3 août 2012 à 09:41
Ok ok, une vulgaire erreur Or au lieu de And...
J'ai ajouté un tyest pour éviter d'inscrire "Total général", et ça donne :
Cordialement,
Franck P
J'ai ajouté un tyest pour éviter d'inscrire "Total général", et ça donne :
Option Explicit Sub RenvoieNonNuls() Dim MaFeuil As Worksheet, DrLig As Long, DrCol As Integer Dim Donnees(), Col As Integer, Lig As Long, CptCol As Integer '!!!IMPORTANT : '!!!La feuille active DOIT être la feuille qui contient toutes les données Set MaFeuil = ActiveSheet 'Si dans le classeur, il existe une feuille appelée "NonNuls" Alors If FeuilleExiste(ThisWorkbook, "NonNuls") Then 'On supprime tout ce qu'elle contient With Sheets("NonNuls") .Cells.Clear End With 'Si elle n'existe par Else 'on la créé Sheets.Add ActiveSheet.Name = "NonNuls" End If With MaFeuil DrLig = .Range("A" & Rows.Count).End(xlUp).Row DrCol = .Cells(1, Cells.Columns.Count).End(xlToLeft).Column Donnees = .Range(.Cells(1, 1), .Cells(DrLig, DrCol)) End With With Sheets("NonNuls") For Lig = LBound(Donnees) + 1 To UBound(Donnees) CptCol = 2 .Cells(Lig - 1, 1) = Donnees(Lig, 1) For Col = LBound(Donnees, 2) + 1 To UBound(Donnees, 2) Debug.Print Donnees(1, Col) If Donnees(Lig, Col) <> "" And Donnees(Lig, Col) <> 0 And Donnees(1, Col) <> "Total général" Then .Cells(Lig - 1, CptCol) = Donnees(1, Col) CptCol = CptCol + 1 End If Next Next End With End Sub Function FeuilleExiste(wk As Workbook, stFeuille) As Boolean On Error Resume Next FeuilleExiste = Not (wk.Sheets(stFeuille) Is Nothing) End Function--
Cordialement,
Franck P
Marrk
Messages postés
2
Date d'inscription
vendredi 3 août 2012
Statut
Membre
Dernière intervention
3 août 2012
3 août 2012 à 09:55
3 août 2012 à 09:55
Ok Parfait!! Merci beaucoup!