Attribuer la valeur "inconnue" à une cellule vide
Résolu/Fermé
Motes
Messages postés
22
Date d'inscription
lundi 20 octobre 2014
Statut
Membre
Dernière intervention
24 octobre 2014
-
21 oct. 2014 à 09:18
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 - 5 nov. 2014 à 07:32
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 - 5 nov. 2014 à 07:32
A voir également:
- Attribuer la valeur "inconnue" à une cellule vide
- Aller à la ligne dans une cellule excel - Guide
- Excel attribuer une valeur à un mot - Forum Excel
- Formate pour taxer client frigo vide ✓ - Forum Matériel & Système
- Freebox erreur video inconnue ✓ - Forum TV & Vidéo
- Le fichier contient le nombre de voyageurs dans 3 gares. dans la cellule b5, saisissez une formule qui calcule le total et se met à jour si on change une valeur du tableau. quel total obtenez-vous ? quelle formule avez-vous saisie ? ✓ - Forum Excel
14 réponses
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 744
21 oct. 2014 à 10:22
21 oct. 2014 à 10:22
Bonjour,
Peut être tout simplement comme ceci :
Peut être tout simplement comme ceci :
Dim dl As Long dl = Range("A" & Rows.Count).End(xlUp).Row Range("A1:F" & dl).Cells.SpecialCells(xlCellTypeBlanks).Value = "Inconnue"
Motes
Messages postés
22
Date d'inscription
lundi 20 octobre 2014
Statut
Membre
Dernière intervention
24 octobre 2014
22 oct. 2014 à 11:29
22 oct. 2014 à 11:29
Bonjour à tous,
pijaku, j'ai appliqué ton code mais ça beug à la dernière ligne en indiquant qu'il y a une erreur d'exécution 1024: la méthode Range de l'objet _Global a échoué.
Quant au code de Thau Thema, je suppose qu'il faut au préalable déclarer une variable.
pijaku, j'ai appliqué ton code mais ça beug à la dernière ligne en indiquant qu'il y a une erreur d'exécution 1024: la méthode Range de l'objet _Global a échoué.
Quant au code de Thau Thema, je suppose qu'il faut au préalable déclarer une variable.
ThauTheme
Messages postés
1442
Date d'inscription
mardi 21 octobre 2014
Statut
Membre
Dernière intervention
29 juillet 2022
160
22 oct. 2014 à 13:38
22 oct. 2014 à 13:38
Bonjour le fil, bonjour le forum,
Non, pas besoin de déclarer (ni donc de définir) de variable. Il suffit juste que tu remplaces Ton_onglet par le nom de l'onglet dont il est question...
Non, pas besoin de déclarer (ni donc de définir) de variable. Il suffit juste que tu remplaces Ton_onglet par le nom de l'onglet dont il est question...
Motes
Messages postés
22
Date d'inscription
lundi 20 octobre 2014
Statut
Membre
Dernière intervention
24 octobre 2014
22 oct. 2014 à 13:56
22 oct. 2014 à 13:56
Désolée, je suis très limitée en vba.
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 744
22 oct. 2014 à 14:40
22 oct. 2014 à 14:40
Bonjour,
Bienvenu à ThauTheme sur les forums CCM,
Je m'étonne de l'erreur 1024...
Dans quoi as tu placé la procédure donnée?
Bienvenu à ThauTheme sur les forums CCM,
Je m'étonne de l'erreur 1024...
Dans quoi as tu placé la procédure donnée?
ThauTheme
Messages postés
1442
Date d'inscription
mardi 21 octobre 2014
Statut
Membre
Dernière intervention
29 juillet 2022
160
22 oct. 2014 à 15:27
22 oct. 2014 à 15:27
Merci Franck pour l'accueil !
ThauTheme
ThauTheme
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 744
22 oct. 2014 à 16:00
22 oct. 2014 à 16:00
De rien.
Si tu as la moindre question/difficulté, n'hésite pas à me contacter en MP (clic sur mon pseudo à n'importe qu'elle réponse puis Lui écrire un message).
Bonne continuation.
A+
Si tu as la moindre question/difficulté, n'hésite pas à me contacter en MP (clic sur mon pseudo à n'importe qu'elle réponse puis Lui écrire un message).
Bonne continuation.
A+
Motes
Messages postés
22
Date d'inscription
lundi 20 octobre 2014
Statut
Membre
Dernière intervention
24 octobre 2014
Modifié par pijaku le 23/10/2014 à 08:15
Modifié par pijaku le 23/10/2014 à 08:15
Merci beaucoup de votre disponibilité,
Voici le code, il est très long: en fait, je souhaite attribuer la valeur "Inconnue" aux données manquantes avant de procéder à ma stratification. Ceci correspond à mon 1er code comme mentionné ci-dessous.
Thanks!
Voici le code, il est très long: en fait, je souhaite attribuer la valeur "Inconnue" aux données manquantes avant de procéder à ma stratification. Ceci correspond à mon 1er code comme mentionné ci-dessous.
Thanks!
Sub EchantillonStratifié() ' ' Créée par Henry AUBERT le 26/02/1996 ' Dernière mise à jour le 09/03/2000 ' ' Sélectionner dans une feuille contenant des "données brutes", c'est-à-dire ' un tableau d'observations avec ' les individus en lignes et ' les variables en colonnes, avec leurs libellés en ligne 1 ' et le libellé de la variable servant de stratification. ' Lancer la macro. ' ' La macro : ' a) Vérifie la sélection : ' * d'une cellule de la première ligne ' * avec un libellé, ' * et sans données manquantes. ' b) Demande la taille de l'échantillon, avec, par défaut le sondage au 10ème. ' Cette taille est contrôlée, et doit, évidemment, être inférieure à celle de la population ' c) Trie les données selon les valeurs de la variable de stratification, ' d) Place dans une feuille "Stratification" (créée ou remplacée si elle existait déjà) ' les noms, tailles, débuts, fins des strates et les effectifs prélevés ' e) Place dans une feuille "Echantillon" (créée ou remplacée si elle existait déjà) ' un échantillon "représentatif" au hasard sans remise. ' Les effectifs des échantillons des strates sont arrondis : ' Il peut y avoir plus ou moins d'individus dans l'échantillon ' que le nombre demandé. ' f) Note dans la feuille des données brutes ' les "individus" qui ont été sélectionnés dans l'échantillon Sheets("DONNEES").UsedRange.SpecialCells(xlCellTypeBlanks).Value = "INCONNU" Dim row As Long ' Application.ScreenUpdating = False Bandeau = "Tirage au hasard d'un échantillon stratifié représentatif " & Signature MessageDerreur = "Une erreur indéterminée s'est produite !" Message = MessageDerreur On Error GoTo erreur ' Message = "Sélectionnez (ligne 1) le libellé de la variable de stratification !" If Selection.row <> 1 _ Or Selection.Cells.Count > 1 _ Or Selection.Value = Empty Then GoTo erreur ' ' Sauvegarde la stratification demandée : Set VarStrate = Selection ' ' Compte le nombre de variables, et supprime la colonne dont l'en-tête serait "dans l'éch" ' NbVar = 0 While NbVar < 255 And Not IsEmpty(Cells(1, NbVar + 1)) If Cells(1, NbVar + 1) = "dans l'éch" Then Cells(1, NbVar + 1).Select Message = "Déprotégez la feuille !" Selection.EntireColumn.Delete ActiveWorkbook.Save Message = MessageDerreur Else NbVar = NbVar + 1 End If Wend ' On Error GoTo 0 Selection.SpecialCells(xlLastCell).Select ' Message = "Données manquantes pour cette variable !" If Application.CountBlank(Range(Cells(2, VarStrate.Column), Cells(ActiveCell.row, VarStrate.Column))) > 0 Then GoTo erreur Message = MessageDerreur ' NomVarStrate = VarStrate.Value NomFeuillePop = ActiveSheet.Name ' ' Trie toutes les données selon la colonne sélectionnée : ' Range("A1").Select Selection.Sort Key1:=Range(VarStrate.Address), Order1:=xlAscending, Header:= _ xlGuess, OrderCustom:=1, MatchCase:=False, _ Orientation:=xlTopToBottom VarStrate.Select ' row = VarStrate.row ' son numéro de ligne While Not IsEmpty(Cells(row + 1, VarStrate.Column)) row = row + 1 Wend Range(Cells(VarStrate.row + 1, VarStrate.Column).Address(), Cells(row, VarStrate.Column).Address()).Select TaillePop = Selection.Cells.Count ' Dim NomStrate() Dim DébutStrate() Dim TailleStrate() Dim FinStrate() Dim EchStrate() ' NbStrates = 1 ReDim Preserve NomStrate(NbStrates) ReDim Preserve DébutStrate(NbStrates) ReDim Preserve TailleStrate(NbStrates) ReDim Preserve FinStrate(NbStrates) DébutStrate(NbStrates) = 2 NomStrate(NbStrates) = ActiveCell.Value TailleStrate(NbStrates) = 0 For Each Individu In Selection If Individu.Value <> NomStrate(NbStrates) Then FinStrate(NbStrates) = Individu.row - 1 NbStrates = NbStrates + 1 ReDim Preserve NomStrate(NbStrates) ReDim Preserve DébutStrate(NbStrates) ReDim Preserve TailleStrate(NbStrates) ReDim Preserve FinStrate(NbStrates) NomStrate(NbStrates) = Individu.Value TailleStrate(NbStrates) = 1 DébutStrate(NbStrates) = Individu.row Else TailleStrate(NbStrates) = TailleStrate(NbStrates) + 1 End If Next FinStrate(NbStrates) = FinStrate(NbStrates - 1) + TailleStrate(NbStrates) ' Header = "Entrez la taille de l'échantillon (maxi " Dim TaillEch As Integer SaisTaille: On Error GoTo 0 TaillEch = TaillePop * 0.007 ' TaillEch = Val(InputBox(Header & TaillePop & ")" _ ' & Chr(10) & Chr(10) & "(0 = Annuler)", _ ' Bandeau, Str(Int(TailleProposée)))) If TaillEch = 0 Then VarStrate.Select End End If If TaillEch < 1 Or TaillEch > TaillePop Then Beep ErrTaille: Décision = MsgBox("Valeur erronnée ! Voulez-vous recommencer ?", 4, Bandeau) If Décision = vbYes Then GoTo SaisTaille If Décision = vbNo Then VarStrate.Select End End If End If ' On Error GoTo 0 ' ' Calcul et affichage des éléments de stratification ' ReDim EchStrate(NbStrates) Total = 0 For i = 1 To NbStrates EchStrate(i) = Application.Round(TailleStrate(i) * TaillEch / TaillePop, 0) If EchStrate(i) < 1 Then Message = "Attention la strate n°" & i _ & " (= " & NomStrate(i) & ")" _ & " de '" & VarStrate & "'" _ & " ne sera pas représentée." _ & Chr(13) _ & "Il faudrait un échantillon de " _ & Application.RoundUp(TaillePop / TailleStrate(i), 0) _ & Chr(13) & "Voulez vous abandonner, réessayer une autre taille, ou continuer ?" Réponse = MsgBox(Message, vbAbortRetryIgnore, Bandeau) If Réponse = vbRetry Then GoTo SaisTaille If Réponse = vbAbort Then VarStrate.Select End End If End If Total = Total + EchStrate(i) Next For i_feuille = 1 To Sheets.Count If Sheets(i_feuille).Name = "Stratification" Then Sheets(i_feuille).Delete End If Next Sheets.Add ActiveSheet.Name = "Stratification" ' Cells(1, 1) = "Strate" Cells(1, 2) = "Taille" Cells(1, 3) = "Ligne début" Cells(1, 4) = "Ligne fin" Cells(1, 5) = "Nb d'éch." For iLigne = 1 To NbStrates Cells(iLigne + 1, 1) = NomVarStrate + " = " & NomStrate(iLigne) Cells(iLigne + 1, 2) = TailleStrate(iLigne) Cells(iLigne + 1, 3) = DébutStrate(iLigne) Cells(iLigne + 1, 4) = FinStrate(iLigne) Cells(iLigne + 1, 5) = EchStrate(iLigne) Next Cells(NbStrates + 2, 1) = "Total :" Cells(NbStrates + 2, 1).HorizontalAlignment = xlRight Cells(NbStrates + 2, 2) = TaillePop Cells(NbStrates + 2, 4) = "Total :" Cells(NbStrates + 2, 4).HorizontalAlignment = xlRight Cells(NbStrates + 2, 5) = Total Range(Cells(1, 1), Cells(1, 5)).Select With Selection .HorizontalAlignment = xlCenter .VerticalAlignment = xlBottom .WrapText = False .Orientation = xlHorizontal .Font.ColorIndex = 45 .Interior.ColorIndex = 35 End With Range(Cells(1, 1), Cells(NbStrates + 2, 5)).Columns.AutoFit Cells(1, 1).Select ' ' Prépare feuille Echantillon ' For i_feuille = 1 To Sheets.Count If Sheets(i_feuille).Name = "Echantillon" Then Sheets(i_feuille).Delete End If Next Sheets.Add ActiveSheet.Name = "Echantillon" ' ' recopier les en-têtes dans la feuille échantillon ' Sheets(NomFeuillePop).Select Range(Cells(1, 1), Cells(1, NbVar)).Select Application.CutCopyMode = False Selection.Copy Sheets("Echantillon").Select Range("A1").Select ActiveSheet.Paste ' ' Prélèvement et affichage de l'échantillon ' ' prépare colonne marquage individus sélectionnés dans feuille données brutes Sheets(NomFeuillePop).Select Cells(1, NbVar + 1).Value = "dans l'éch" Range(Cells(1, NbVar + 1), Cells(TaillePop + 1, NbVar + 1)).Select With Selection .HorizontalAlignment = xlCenter .Font.ColorIndex = 22 End With ' NumLigne = 2 For istrate = 1 To NbStrates iéch = 1 While iéch < EchStrate(istrate) + 1 Randomize ' Initialise le générateur de nombres aléatoires avec l'horloge système LignAuHasard = Int((FinStrate(istrate) - DébutStrate(istrate) + 2) * Rnd + DébutStrate(istrate)) If Sheets(NomFeuillePop).Cells(LignAuHasard, NbVar + 1).Value = Empty Then Sheets(NomFeuillePop).Range(Cells(LignAuHasard, 1), Cells(LignAuHasard, NbVar)).Copy Sheets("Echantillon").Paste Destination:=Sheets("Echantillon").Cells(NumLigne, 1) NumLigne = NumLigne + 1 Sheets(NomFeuillePop).Cells(LignAuHasard, NbVar + 1).Value = "*" iéch = iéch + 1 End If Wend Next Sheets(NomFeuillePop).Cells(1, NbVar + 1).Select Sheets("Echantillon").Select ActiveSheet.Range("A1").Select Application.Calculate GoTo Fin erreur: Beep Réponse = MsgBox(Message, , Bandeau) Fin: Application.ScreenUpdating = True End Sub
Motes
Messages postés
22
Date d'inscription
lundi 20 octobre 2014
Statut
Membre
Dernière intervention
24 octobre 2014
22 oct. 2014 à 17:20
22 oct. 2014 à 17:20
Merci du fond du coeur,
ça marche super bien!
ça marche super bien!
Motes
Messages postés
22
Date d'inscription
lundi 20 octobre 2014
Statut
Membre
Dernière intervention
24 octobre 2014
22 oct. 2014 à 17:49
22 oct. 2014 à 17:49
Voici un extrait de résultat de la feuille stratification
Strate Taille Ligne début Ligne fin Nb d'éch.
parking = 0 34 2 35 2
parking = 1 48 36 83 4
Total : 82 Total : 6
Comme vous le constatez, j'adapte ce code à ma problématique.
J'aimerai introduire dans ma macro, un code qui calcule le poids (pourcentage) de chaque strate par rapport à la taille totale. Puis, faire le même calcul pour l'échantillon. Ceci permettra de vérifier si la macro répond à mon objectif.
Pourrez-vous me proposer des codes s'il vous plait?
Merci.
Strate Taille Ligne début Ligne fin Nb d'éch.
parking = 0 34 2 35 2
parking = 1 48 36 83 4
Total : 82 Total : 6
Comme vous le constatez, j'adapte ce code à ma problématique.
J'aimerai introduire dans ma macro, un code qui calcule le poids (pourcentage) de chaque strate par rapport à la taille totale. Puis, faire le même calcul pour l'échantillon. Ceci permettra de vérifier si la macro répond à mon objectif.
Pourrez-vous me proposer des codes s'il vous plait?
Merci.
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 744
23 oct. 2014 à 08:21
23 oct. 2014 à 08:21
Bonjour,
Bon...
Tu dis : sachant que je découvre l'environnement vba.
Puis tu nous balances une macro longue Comme Mon Bras, avec pour mission de coder une fonction. Ok. Mais...
1- Est ce que tu comprends le code de la macro?
2- Un extrait réel (sous la forme d'une feuille Excel) de tes données + 1 extrait réel du résultat souhaité seraient grandement utiles...
3- Ta macro, je ne l'ai pas lu en entier car dès le début il y a des erreurs. Variables non déclarées, variables inutiles... Elle est donc à revoir dans sa globalité.
Donc...
En attente d'un fichier pour nous pouvoir travailler.
Ok avec mon analyse ThauTheme?
ps :
Bon...
Tu dis : sachant que je découvre l'environnement vba.
Puis tu nous balances une macro longue Comme Mon Bras, avec pour mission de coder une fonction. Ok. Mais...
1- Est ce que tu comprends le code de la macro?
2- Un extrait réel (sous la forme d'une feuille Excel) de tes données + 1 extrait réel du résultat souhaité seraient grandement utiles...
3- Ta macro, je ne l'ai pas lu en entier car dès le début il y a des erreurs. Variables non déclarées, variables inutiles... Elle est donc à revoir dans sa globalité.
Donc...
En attente d'un fichier pour nous pouvoir travailler.
Ok avec mon analyse ThauTheme?
ps :
Pour transmettre un fichier, il faut passer par un site de pièce jointe tel que cjoint.com
Va sur ce site : https://www.cjoint.com/
Clic sur parcourir,
Cherche ton fichier,
clic sur ouvrir,
Clic sur "Créer le lien cjoint",
Copier le lien,
Revenir ici le coller dans une réponse...
Motes
Messages postés
22
Date d'inscription
lundi 20 octobre 2014
Statut
Membre
Dernière intervention
24 octobre 2014
23 oct. 2014 à 10:02
23 oct. 2014 à 10:02
Merci les gars, je suis surtout contente parce que ça avance.
Pijaku, c'est cool ton truc, ça marche!
https://www.cjoint.com/?DJxj7wHtk20 : fichier excel de départ avec résultat
https://www.cjoint.com/?DJxj7wHtk20 : fichier word: macro modifiée pour adapter à mes besoin
J'ai déniché cette macro sur le net parce qu'elle répond à ma problématique. Actuellement je suis en train de l'adapter à la mission qui m'a été confiée en entreprise.
J'ai acheté deux livres sur vba, j'ai vraiment envie de connaître programmer sur vba.
Le code sur les cellules vide me permettent de traiter les valeurs manquantes de ma base de données
La macro initiale m'impose de proposer une taille d'échantillon avant extraction, ce qui ne répond pas à mes attentes: j'ai demandé de me prélever une proportion sur la population totale et dans ce cas c'est la macro qui me donne la taille de l'échantillon.
Ce que je souhaite faire: introduire dans la macro un code qui procède au calcul correspondant aux colonnes Part(%) de l'onglet stratification.
Suis-je explicite?
Merci.
Pijaku, c'est cool ton truc, ça marche!
https://www.cjoint.com/?DJxj7wHtk20 : fichier excel de départ avec résultat
https://www.cjoint.com/?DJxj7wHtk20 : fichier word: macro modifiée pour adapter à mes besoin
J'ai déniché cette macro sur le net parce qu'elle répond à ma problématique. Actuellement je suis en train de l'adapter à la mission qui m'a été confiée en entreprise.
J'ai acheté deux livres sur vba, j'ai vraiment envie de connaître programmer sur vba.
Le code sur les cellules vide me permettent de traiter les valeurs manquantes de ma base de données
La macro initiale m'impose de proposer une taille d'échantillon avant extraction, ce qui ne répond pas à mes attentes: j'ai demandé de me prélever une proportion sur la population totale et dans ce cas c'est la macro qui me donne la taille de l'échantillon.
Ce que je souhaite faire: introduire dans la macro un code qui procède au calcul correspondant aux colonnes Part(%) de l'onglet stratification.
Suis-je explicite?
Merci.
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 744
23 oct. 2014 à 10:36
23 oct. 2014 à 10:36
1- pas de fichier Word. Tu nous as mis deux fois le même lien...
2- pour passer de tes données :
à ton résultat :
Pas besoin d'une macro comme celle dont tu disposes...
Ou alors il y a un truc que je n'ai pas saisi.
3- à quoi correspond la colonne : Nb d'éch. dans les résultats?
4- la colonne parking, dans tes données, est-elle toujours triée dans l'ordre croissant?
2- pour passer de tes données :
à ton résultat :
Pas besoin d'une macro comme celle dont tu disposes...
Ou alors il y a un truc que je n'ai pas saisi.
3- à quoi correspond la colonne : Nb d'éch. dans les résultats?
4- la colonne parking, dans tes données, est-elle toujours triée dans l'ordre croissant?
Motes
Messages postés
22
Date d'inscription
lundi 20 octobre 2014
Statut
Membre
Dernière intervention
24 octobre 2014
23 oct. 2014 à 11:40
23 oct. 2014 à 11:40
désolée, voici le fichier word
https://www.cjoint.com/?DJxlKROUfSv
La feuille Stratification et Echantillon correspondent aux résultats de la macro
Nb d'éch correspond au nb de parking dans l'échantillon.
En fait, le but de la macro est de réaliser une extraction aléatoire dans la feuille "donnees"
La macro crée 2 feuilles: "stratification" et "Echantillon" (ensemble d'individus prélevés dans la population totale).
https://www.cjoint.com/?DJxlKROUfSv
La feuille Stratification et Echantillon correspondent aux résultats de la macro
Nb d'éch correspond au nb de parking dans l'échantillon.
En fait, le but de la macro est de réaliser une extraction aléatoire dans la feuille "donnees"
La macro crée 2 feuilles: "stratification" et "Echantillon" (ensemble d'individus prélevés dans la population totale).
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 744
23 oct. 2014 à 11:46
23 oct. 2014 à 11:46
Bon.
Pour faire simple, très simple...
Dans ta feuille Stratification, tu n'auras toujours que une ligne d'entête, deux lignes de données et une ligne "totaux"?
Pour faire simple, très simple...
Dans ta feuille Stratification, tu n'auras toujours que une ligne d'entête, deux lignes de données et une ligne "totaux"?
Motes
Messages postés
22
Date d'inscription
lundi 20 octobre 2014
Statut
Membre
Dernière intervention
24 octobre 2014
23 oct. 2014 à 12:04
23 oct. 2014 à 12:04
Dan ma feuille stratification, j'aurai:
une ligne d'entête
plusieurs ligne de données (strate) et
une ligne "totaux"
une ligne d'entête
plusieurs ligne de données (strate) et
une ligne "totaux"
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 744
Modifié par pijaku le 23/10/2014 à 13:21
Modifié par pijaku le 23/10/2014 à 13:21
Donc.
Ajoute cette Sub, sous ton code existant, après le End Sub de l'autre macro bien sur!
Et tu appelles cette procédure, depuis ton code principal, à cet endroit :
🎼 Cordialement,
Franck 🎶
Ajoute cette Sub, sous ton code existant, après le End Sub de l'autre macro bien sur!
'!!!!!!!!!!!!!!!!!!!!!!!!! 'ne pas copier ces lignes, il s'agit de la fin de ta macro !!!!!!!!!!!! Réponse = MsgBox(Message, , Bandeau) Fin: Application.ScreenUpdating = True End Sub 'recopier à partir d'ici : Sub Calcule_Part() Dim dl As Long, Lig As Long With Sheets("Stratification") dl = .Range("A" & Rows.Count).End(xlUp).Row - 1 For Lig = 2 To dl .Range("C" & Lig).Value = CLng(.Range("C" & Lig).Value) * 100 / CLng(.Range("B" & dl + 1).Value) .Range("G" & Lig).Value = CLng(.Range("F" & Lig).Value) * 100 / CLng(.Range("F" & dl + 1).Value) Next Lig End With End Sub
Et tu appelles cette procédure, depuis ton code principal, à cet endroit :
'NE RECOPIE PAS CES LIGNES Cells(NbStrates + 2, 1) = "Total :" Cells(NbStrates + 2, 1).HorizontalAlignment = xlRight Cells(NbStrates + 2, 2) = TaillePop Cells(NbStrates + 2, 4) = "Total :" Cells(NbStrates + 2, 4).HorizontalAlignment = xlRight Cells(NbStrates + 2, 5) = Total 'SEULEMENT CELLE-CI : Call Calcule_Part 'FIN DE LA COPIE!!! Range(Cells(1, 1), Cells(1, 5)).Select With Selection
🎼 Cordialement,
Franck 🎶
Motes
Messages postés
22
Date d'inscription
lundi 20 octobre 2014
Statut
Membre
Dernière intervention
24 octobre 2014
23 oct. 2014 à 13:11
23 oct. 2014 à 13:11
dois-je juste copier-coller ces codes à la suite de mon programme?
Motes
Messages postés
22
Date d'inscription
lundi 20 octobre 2014
Statut
Membre
Dernière intervention
24 octobre 2014
23 oct. 2014 à 13:13
23 oct. 2014 à 13:13
j'ai tout copier et coller à la suite de mon programme et on m'indique qu'un End with est attendu.
Peut être ai-je mal inséré ton code?
Peut être ai-je mal inséré ton code?
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 744
23 oct. 2014 à 13:21
23 oct. 2014 à 13:21
Tu le fais exprès???
Regardes les commentaires que j'ai mis dans le code...
J'ai ajouté des lignes issues de TA macro pour que tu vois bien ou insérer les lignes...
Il manquait toutefois un End With. Je te l'ai ajouté.
Regardes les commentaires que j'ai mis dans le code...
J'ai ajouté des lignes issues de TA macro pour que tu vois bien ou insérer les lignes...
Il manquait toutefois un End With. Je te l'ai ajouté.
Motes
Messages postés
22
Date d'inscription
lundi 20 octobre 2014
Statut
Membre
Dernière intervention
24 octobre 2014
23 oct. 2014 à 15:16
23 oct. 2014 à 15:16
Je ne le fais pas exprès,quel serai l'intérêt?
j'ai bien respecté tes consignes mais la macro beug sur cette ligne:
Range("C" & Lig).Value = CLng(.Range("C" & Lig).Value) * 100 / CLng(.Range("B" & dl + 1).Value)
Voici le lien pour le code modifié: https://www.cjoint.com/?DJxlKROUfSv
Merci
j'ai bien respecté tes consignes mais la macro beug sur cette ligne:
Range("C" & Lig).Value = CLng(.Range("C" & Lig).Value) * 100 / CLng(.Range("B" & dl + 1).Value)
Voici le lien pour le code modifié: https://www.cjoint.com/?DJxlKROUfSv
Merci
Motes
Messages postés
22
Date d'inscription
lundi 20 octobre 2014
Statut
Membre
Dernière intervention
24 octobre 2014
23 oct. 2014 à 15:33
23 oct. 2014 à 15:33
je crois avoir compris pourquoi ça beug à ce niveau: dans le tableau résultat que je t'ai présenté plus haut, les colonne où il faut calculer les part (%) ont été inscrites à la main.
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 744
23 oct. 2014 à 15:35
23 oct. 2014 à 15:35
Bon.
Excuse moi, j'ai du tout relire pour comprendre...
Voici ton code,
- j'ai indiqué les lignes ajoutées en commentaires.
- j'ai indiqué les lignes modifiées en commentaires,
- j'ai indiqué les endroits buggant pendant mes essais et comment enlever le bug. Replacer
Excuse moi, j'ai du tout relire pour comprendre...
Voici ton code,
- j'ai indiqué les lignes ajoutées en commentaires.
- j'ai indiqué les lignes modifiées en commentaires,
- j'ai indiqué les endroits buggant pendant mes essais et comment enlever le bug. Replacer
Sheets.Countpar
Sheets.Count - 1...
Sub EchantillonStratifié() ' ' Créée par Henry AUBERT le 26/02/1996 ' Dernière mise à jour le 09/03/2000 ' ' Sélectionner dans une feuille contenant des "données brutes", c'est-à-dire ' un tableau d'observations avec ' les individus en lignes et ' les variables en colonnes, avec leurs libellés en ligne 1 ' et le libellé de la variable servant de stratification. ' Lancer la macro. ' ' La macro : ' a) Vérifie la sélection : ' * d'une cellule de la première ligne ' * avec un libellé, ' * et sans données manquantes. ' b) Demande la taille de l'échantillon, avec, par défaut le sondage au 10ème. ' Cette taille est contrôlée, et doit, évidemment, être inférieure à celle de la population ' c) Trie les données selon les valeurs de la variable de stratification, ' d) Place dans une feuille "Stratification" (créée ou remplacée si elle existait déjà) ' les noms, tailles, débuts, fins des strates et les effectifs prélevés ' e) Place dans une feuille "Echantillon" (créée ou remplacée si elle existait déjà) ' un échantillon "représentatif" au hasard sans remise. ' Les effectifs des échantillons des strates sont arrondis : ' Il peut y avoir plus ou moins d'individus dans l'échantillon ' que le nombre demandé. ' f) Note dans la feuille des données brutes ' les "individus" qui ont été sélectionnés dans l'échantillon ' Application.ScreenUpdating = False Bandeau = "Tirage au hasard d'un échantillon stratifié représentatif " & Signature MessageDerreur = "Une erreur indéterminée s'est produite !" Message = MessageDerreur On Error GoTo erreur ' Message = "Sélectionnez (ligne 1) le libellé de la variable de stratification !" If Selection.Row <> 1 _ Or Selection.Cells.Count > 1 _ Or Selection.Value = Empty Then GoTo erreur ' ' Sauvegarde la stratification demandée : Set VarStrate = Selection ' ' Compte le nombre de variables, et supprime la colonne dont l'en-tête serait "dans l'éch" ' NbVar = 0 While NbVar < 255 And Not IsEmpty(Cells(1, NbVar + 1)) If Cells(1, NbVar + 1) = "dans l'éch" Then Cells(1, NbVar + 1).Select Message = "Déprotégez la feuille !" Selection.EntireColumn.Delete ActiveWorkbook.Save Message = MessageDerreur Else NbVar = NbVar + 1 End If Wend ' On Error GoTo 0 Selection.SpecialCells(xlLastCell).Select ' Message = "Données manquantes pour cette variable !" If Application.CountBlank(Range(Cells(2, VarStrate.Column), Cells(ActiveCell.Row, VarStrate.Column))) > 0 Then GoTo erreur Message = MessageDerreur ' NomVarStrate = VarStrate.Value NomFeuillePop = ActiveSheet.Name ' ' Trie toutes les données selon la colonne sélectionnée : ' Range("A1").Select Selection.Sort Key1:=Range(VarStrate.Address), Order1:=xlAscending, Header:= _ xlGuess, OrderCustom:=1, MatchCase:=False, _ Orientation:=xlTopToBottom VarStrate.Select ' Row% = VarStrate.Row ' son numéro de ligne While Not IsEmpty(Cells(Row% + 1, VarStrate.Column)) Row% = Row% + 1 Wend Range(Cells(VarStrate.Row + 1, VarStrate.Column).Address(), Cells(Row%, VarStrate.Column).Address()).Select TaillePop = Selection.Cells.Count ' Dim NomStrate() Dim DébutStrate() Dim TailleStrate() Dim FinStrate() Dim EchStrate() ' NbStrates = 1 ReDim Preserve NomStrate(NbStrates) ReDim Preserve DébutStrate(NbStrates) ReDim Preserve TailleStrate(NbStrates) ReDim Preserve FinStrate(NbStrates) DébutStrate(NbStrates) = 2 NomStrate(NbStrates) = ActiveCell.Value TailleStrate(NbStrates) = 0 For Each Individu In Selection If Individu.Value <> NomStrate(NbStrates) Then FinStrate(NbStrates) = Individu.Row - 1 NbStrates = NbStrates + 1 ReDim Preserve NomStrate(NbStrates) ReDim Preserve DébutStrate(NbStrates) ReDim Preserve TailleStrate(NbStrates) ReDim Preserve FinStrate(NbStrates) NomStrate(NbStrates) = Individu.Value TailleStrate(NbStrates) = 1 DébutStrate(NbStrates) = Individu.Row Else TailleStrate(NbStrates) = TailleStrate(NbStrates) + 1 End If Next FinStrate(NbStrates) = FinStrate(NbStrates - 1) + TailleStrate(NbStrates) ' Header = "Entrez la taille de l'échantillon (maxi " Dim TaillEch As Integer SaisTaille: On Error GoTo 0 TailleProposée = TaillePop / 10 TaillEch = Val(InputBox(Header & TaillePop & ")" _ & Chr(10) & Chr(10) & "(0 = Annuler)", _ Bandeau, Str(Int(TailleProposée)))) If TaillEch = 0 Then VarStrate.Select End End If If TaillEch < 1 Or TaillEch > TaillePop Then Beep ErrTaille: Décision = MsgBox("Valeur erronnée ! Voulez-vous recommencer ?", 4, Bandeau) If Décision = vbYes Then GoTo SaisTaille If Décision = vbNo Then VarStrate.Select End End If End If ' On Error GoTo 0 ' ' Calcul et affichage des éléments de stratification ' ReDim EchStrate(NbStrates) Total = 0 For i = 1 To NbStrates EchStrate(i) = Application.Round(TailleStrate(i) * TaillEch / TaillePop, 0) If EchStrate(i) < 1 Then Message = "Attention la strate n°" & i _ & " (= " & NomStrate(i) & ")" _ & " de '" & VarStrate & "'" _ & " ne sera pas représentée." _ & Chr(13) _ & "Il faudrait un échantillon de " _ & Application.RoundUp(TaillePop / TailleStrate(i), 0) _ & Chr(13) & "Voulez vous abandonner, réessayer une autre taille, ou continuer ?" Réponse = MsgBox(Message, vbAbortRetryIgnore, Bandeau) If Réponse = vbRetry Then GoTo SaisTaille If Réponse = vbAbort Then VarStrate.Select End End If End If Total = Total + EchStrate(i) Next For i_feuille = 1 To Sheets.Count '******** SI BUG AJOUTER - 1 If Sheets(i_feuille).Name = "Stratification" Then Sheets(i_feuille).Delete End If Next Sheets.Add ActiveSheet.Name = "Stratification" ' Cells(1, 1) = "Strate" Cells(1, 2) = "Taille" Cells(1, 3) = "Part%" ' *********** LIGNE AJOUTEE Cells(1, 4) = "Ligne début" Cells(1, 5) = "Ligne fin" Cells(1, 6) = "Nb d'éch." Cells(1, 7) = "Part%" ' *********** LIGNE AJOUTEE For iLigne = 1 To NbStrates Cells(iLigne + 1, 1) = NomVarStrate + " = " & NomStrate(iLigne) Cells(iLigne + 1, 2) = TailleStrate(iLigne) Cells(iLigne + 1, 3) = TailleStrate(iLigne) * 100 / TaillePop ' *********** LIGNE AJOUTEE Cells(iLigne + 1, 4) = DébutStrate(iLigne) Cells(iLigne + 1, 5) = FinStrate(iLigne) Cells(iLigne + 1, 6) = EchStrate(iLigne) Cells(iLigne + 1, 7) = EchStrate(iLigne) * 100 / Total ' *********** LIGNE AJOUTEE Next Cells(NbStrates + 2, 1) = "Total :" Cells(NbStrates + 2, 1).HorizontalAlignment = xlRight Cells(NbStrates + 2, 2) = TaillePop Cells(NbStrates + 2, 5) = "Total :" Cells(NbStrates + 2, 5).HorizontalAlignment = xlRight Cells(NbStrates + 2, 6) = Total Range(Cells(1, 1), Cells(1, 7)).Select ' *********** LIGNE MODIFIEE With Selection .HorizontalAlignment = xlCenter .VerticalAlignment = xlBottom .WrapText = False .Orientation = xlHorizontal .Font.ColorIndex = 45 .Interior.ColorIndex = 35 End With Range(Cells(1, 1), Cells(NbStrates + 2, 7)).Columns.AutoFit ' *********** LIGNE MODIFIEE Cells(1, 1).Select ' ' Prépare feuille Echantillon ' For i_feuille = 1 To Sheets.Count '******** SI BUG AJOUTER - 1 If Sheets(i_feuille).Name = "Echantillon" Then Sheets(i_feuille).Delete End If Next Sheets.Add ActiveSheet.Name = "Echantillon" ' ' recopier les en-têtes dans la feuille échantillon ' Sheets(NomFeuillePop).Select Range(Cells(1, 1), Cells(1, NbVar)).Select Application.CutCopyMode = False Selection.Copy Sheets("Echantillon").Select Range("A1").Select ActiveSheet.Paste ' ' Prélèvement et affichage de l'échantillon ' ' prépare colonne marquage individus sélectionnés dans feuille données brutes Sheets(NomFeuillePop).Select Cells(1, NbVar + 1).Value = "dans l'éch" Range(Cells(1, NbVar + 1), Cells(TaillePop + 1, NbVar + 1)).Select With Selection .HorizontalAlignment = xlCenter .Font.ColorIndex = 22 End With ' NumLigne = 2 For istrate = 1 To NbStrates iéch = 1 While iéch < EchStrate(istrate) + 1 Randomize ' Initialise le générateur de nombres aléatoires avec l'horloge système LignAuHasard = Int((FinStrate(istrate) - DébutStrate(istrate) + 2) * Rnd + DébutStrate(istrate)) If Sheets(NomFeuillePop).Cells(LignAuHasard, NbVar + 1).Value = Empty Then Sheets(NomFeuillePop).Range(Cells(LignAuHasard, 1), Cells(LignAuHasard, NbVar)).Copy Sheets("Echantillon").Paste Destination:=Sheets("Echantillon").Cells(NumLigne, 1) NumLigne = NumLigne + 1 Sheets(NomFeuillePop).Cells(LignAuHasard, NbVar + 1).Value = "*" iéch = iéch + 1 End If Wend Next Sheets(NomFeuillePop).Cells(1, NbVar + 1).Select Sheets("Echantillon").Select ActiveSheet.Range("A1").Select Application.Calculate GoTo Fin erreur: Beep Réponse = MsgBox(Message, , Bandeau) Fin: Application.ScreenUpdating = True End Sub
Motes
Messages postés
22
Date d'inscription
lundi 20 octobre 2014
Statut
Membre
Dernière intervention
24 octobre 2014
23 oct. 2014 à 16:29
23 oct. 2014 à 16:29
Je viens de tester la macro elle marche!!!!
Cependant, elle ne répond pas à mes attentes. Je pose le problème autrement:
J'ai fais le même travail mais en concaténant au préalable la colonne B "Arrondissement" et la colonne d "Parking". Ceci m'a permis d'avoir en entrée: le nombre de parking pour parking=1 et parking=0 dans chaque arrondissement.
Je souhaite calculer le pourcentage de caque catégorie de parking dans chaque arrondissement.
Exemple: Part (Parking=0 dans le 16è Arrondissement)= Nbre de parking (=0) dans 16è Arron*100/Nbre tootal de parking du 16è Arrondissement.
Est-ce possible de le réaliser? Ci ce n'est pas clair, dis-le moi s'il te plaît.
Sincèrement désolée, j'avoue que je commence à comprendre et j'apprends beaucoup avec toi.
Merci d'être patient,
Cependant, elle ne répond pas à mes attentes. Je pose le problème autrement:
J'ai fais le même travail mais en concaténant au préalable la colonne B "Arrondissement" et la colonne d "Parking". Ceci m'a permis d'avoir en entrée: le nombre de parking pour parking=1 et parking=0 dans chaque arrondissement.
Je souhaite calculer le pourcentage de caque catégorie de parking dans chaque arrondissement.
Exemple: Part (Parking=0 dans le 16è Arrondissement)= Nbre de parking (=0) dans 16è Arron*100/Nbre tootal de parking du 16è Arrondissement.
Est-ce possible de le réaliser? Ci ce n'est pas clair, dis-le moi s'il te plaît.
Sincèrement désolée, j'avoue que je commence à comprendre et j'apprends beaucoup avec toi.
Merci d'être patient,
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 744
24 oct. 2014 à 08:52
24 oct. 2014 à 08:52
Bonjour,
Envoie nous le fichier après avoir fait ta concaténation et la macro mise à jour que nous puissions y regarder...
Envoie nous le fichier après avoir fait ta concaténation et la macro mise à jour que nous puissions y regarder...
Motes
Messages postés
22
Date d'inscription
lundi 20 octobre 2014
Statut
Membre
Dernière intervention
24 octobre 2014
24 oct. 2014 à 09:52
24 oct. 2014 à 09:52
Bonjour,
Comme tu me l'as demandé, j'ai joint le fichier et la macro mise à jour:
https://www.cjoint.com/?DJyj3F7gQHN
Merci.
Comme tu me l'as demandé, j'ai joint le fichier et la macro mise à jour:
https://www.cjoint.com/?DJyj3F7gQHN
Merci.
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 744
24 oct. 2014 à 11:02
24 oct. 2014 à 11:02
Tu n'auras affaire qu'avec les 2 choix arrt et parking?
Ou tu peux en avoir d'autres???
Si oui lesquels?
Ou tu peux en avoir d'autres???
Si oui lesquels?
Motes
Messages postés
22
Date d'inscription
lundi 20 octobre 2014
Statut
Membre
Dernière intervention
24 octobre 2014
24 oct. 2014 à 12:03
24 oct. 2014 à 12:03
les 2 choix Arrt et parking
Pas d'autres
Pas d'autres
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 744
24 oct. 2014 à 14:36
24 oct. 2014 à 14:36
Tentative de réponse par l'intermédiaire d'une formule SOMMPROD :
https://www.cjoint.com/?DJyoOGnsRN5
Dis moi
https://www.cjoint.com/?DJyoOGnsRN5
Dis moi
Motes
Messages postés
22
Date d'inscription
lundi 20 octobre 2014
Statut
Membre
Dernière intervention
24 octobre 2014
24 oct. 2014 à 15:07
24 oct. 2014 à 15:07
J'ai testé sur mon fichier entreprise et il ne fonctionne pas. Voici un extrait des résultats:
% TOTAL % Echant
0,050327126 #DIV/0!
10,16607952 #DIV/0!
2,617010569 #DIV/0!
2,818319074 #DIV/0!
5,837946653 #DIV/0!
0,251635632 #DIV/0!
0,805234021 #DIV/0!
1,157523905 #DIV/0!
0,050327126 #DIV/0!
Merci
% TOTAL % Echant
0,050327126 #DIV/0!
10,16607952 #DIV/0!
2,617010569 #DIV/0!
2,818319074 #DIV/0!
5,837946653 #DIV/0!
0,251635632 #DIV/0!
0,805234021 #DIV/0!
1,157523905 #DIV/0!
0,050327126 #DIV/0!
Merci
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 744
24 oct. 2014 à 15:25
24 oct. 2014 à 15:25
J'ai testé sur le fichier donné, il fonctionne...
Qu'elles sont les différences entre les fichiers?
De ce que je vois, je penses que ton "échantillonnage" étant trop faible, il n'a pas de résultat et donc divise par 0... Mais sans le vrai fichier je ne peux que supputer...
Qu'elles sont les différences entre les fichiers?
De ce que je vois, je penses que ton "échantillonnage" étant trop faible, il n'a pas de résultat et donc divise par 0... Mais sans le vrai fichier je ne peux que supputer...
Motes
Messages postés
22
Date d'inscription
lundi 20 octobre 2014
Statut
Membre
Dernière intervention
24 octobre 2014
24 oct. 2014 à 16:16
24 oct. 2014 à 16:16
FICHIER CONFIDENTIEL§
Au contraire, mon fichier st très grand et le tient faible.
Au contraire, mon fichier st très grand et le tient faible.
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 744
24 oct. 2014 à 16:27
24 oct. 2014 à 16:27
Je me doute...
MAis essaye avec le fichier que tu as fourni, cela fonctionne impeccablement...
Peut être as tu changé les colonnes?
Les résultats doivent être dans les même colonnes que le fichier que tu m'as fourni...
MAis essaye avec le fichier que tu as fourni, cela fonctionne impeccablement...
Peut être as tu changé les colonnes?
Les résultats doivent être dans les même colonnes que le fichier que tu m'as fourni...
Motes
Messages postés
22
Date d'inscription
lundi 20 octobre 2014
Statut
Membre
Dernière intervention
24 octobre 2014
24 oct. 2014 à 17:20
24 oct. 2014 à 17:20
d'accord, j'essaye et je te tiens au courant
ThauTheme
Messages postés
1442
Date d'inscription
mardi 21 octobre 2014
Statut
Membre
Dernière intervention
29 juillet 2022
160
21 oct. 2014 à 11:36
21 oct. 2014 à 11:36
Bonjour le fil, bonjour le forum,
Si la colonne A contient moins de données que les autres colonnes, ton code Pijaku, ne va pas fonctionner partout
Pour plus d'efficacité je propose :
ou, bien sûr tu adapteras le nom de Ton_onglet
Si la colonne A contient moins de données que les autres colonnes, ton code Pijaku, ne va pas fonctionner partout
Pour plus d'efficacité je propose :
Sheets("Ton_onglet").UsedRange.SpecialCells(xlCellTypeBlanks).Value = "inconnu"
ou, bien sûr tu adapteras le nom de Ton_onglet