Macro
Résolu
Mark
-
Marrk Messages postés 2 Statut Membre -
Marrk Messages postés 2 Statut Membre -
Bonjour,
Voici mon problème:
J'ai des tableaux avec en ligne des numéro d'article et en tête de colonnes des pays, dans le tableau ce sont des pourcentage.
je voudrais pour chaque article, renvoyer le nom des pays pour lesquels le pourcentage n'est pas nul.
Pouvez vous m'aider?
Merci d'avance.
Voici mon problème:
J'ai des tableaux avec en ligne des numéro d'article et en tête de colonnes des pays, dans le tableau ce sont des pourcentage.
je voudrais pour chaque article, renvoyer le nom des pays pour lesquels le pourcentage n'est pas nul.
Pouvez vous m'aider?
Merci d'avance.
A voir également:
- Macro
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Télécharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Jitbit macro recorder - Télécharger - Confidentialité
- Macro maker - Télécharger - Divers Utilitaires
- Macro word - Guide
6 réponses
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.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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