Copier lignes sans cellule vide vers une autre feuille
Bonjour
Je pose ce post pour soliciter votre aide.
Je souhaiterais pouvoir copier uniquement certaines cellules (cellule intersection avec les colonnes B,C et E) de lignes ne possèdant pas de cellules vide dans les colonnes B,C et E vers une seconde feuille. Cette deuxième feuille comporterait donc que les valeurs des colonnes B,C et E sans avoir de cellule vide.
Pourriez vous m'aider, je ne trouve pas d'équivalent assez proche pour m'inspirer sur le forum.
Je joint le tableau en question,
En vous remerciant vivement.
Parfait ! C'est exactement ce que je voulais merci beaucoup !
J'aurais une petite question encore si c'est pas trop abuser...
Comment faire pour réaliser une régression linéaire avec les données de cette deuxième feuille ? La plage à selectionner est donc évolutive. Les colonnes A et B représentent les Xi et la colonne C les Y.
Bonjour
Désolé mais quand j'ai lu "régression linéaire" j'ai eu des palpitations et
Attends un peu et si pas de réponse ouvre un autre post
Ok je vais attendre,
Mais tu sais peut être juste comment selectionner une plage de cellule variable et la nommer en VBA ?
Bonjour
Modifies la macro
Sub recopie()
Dim J As Long, DerLig As Long, Ligne As Long
DerLig = Columns("A:E").Find(what:="*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
Ligne = 1
With Sheets("Sheet2")
.Cells.ClearContents
For J = 1 To DerLig
If Application.CountA(Range("B" & J), Range("C" & J), Range("E" & J)) = 3 Then
.Range("A" & Ligne).Resize(, 3) = Array(Range("B" & J), Range("C" & J), Range("E" & J))
Ligne = Ligne + 1
End If
Next J
ThisWorkbook.Names.Add "Plage", RefersTo:="='" & .Name & "'!$A$1:$C$" & .Range("A" & Rows.Count).End(xlUp).Row
End With
End SubJ'ai ajouté ce supplément au programme, puis je voulais l'ajouter à un programme principal comme dans l'exemple suivant, mais ça ne marche pas...
Public Sub Macro_Regression()
Call recopie
'régression
Call Regression
End Sub
Private Sub recopie()
Dim J As Long, DerLig As Long, Ligne As Long
DerLig = Columns("A:AO").Find(what:="*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
Ligne = 1
With Sheets("Feuil1")
.Cells.ClearContents
For J = 1 To DerLig
If Application.CountA(Range("A" & J), Range("S" & J), Range("X" & J), Range("AC" & J), Range("P" & J)) = 5 Then
.Range("A" & Ligne).Resize(, 5) = Array(Range("A" & J), Range("S" & J), Range("X" & J), Range("AC" & J), Range("P" & J))
Ligne = Ligne + 1
End If
Next J
ThisWorkbook.Names.Add "Plage", RefersTo:="='" & .Name & "'!$A$1:$C$" & .Range("A" & Rows.Count).End(xlUp).Row
End With
End Sub
Private Sub Regression()
Dim sheetReg As Worksheet
ThisWorkbook.Sheets.Add After:=ActiveSheet
Set sheetReg = ThisWorkbook.ActiveSheet
sheetReg.Name = "regression"
Feuil1.Activate
Dim ncol, nbXY, nblig As Integer
ncol = Range("plage").Columns.Count
nblig = Range("plage").Rows.Count
nbXY = Range("plage").Columns.Count - 1
'nommer la colonne des Y'
Range(Cells(2, ncol), Cells(nblig, ncol)).Name = "Y"
'nommer la colonne de X'
Range(Cells(2, 2), Cells(nblig, ncol - 1)).Name = "X"
sheetReg.Cells(3, 1).Value = "a"
sheetReg.Cells(4, 1).Value = "sigma a"
'la régression'
sheetReg.Activate
Cells(2, ncol).Value = "constante"
'copier les noms de variables
For i = ncol - 1 To 2 Step -1
'à partir de la feuille 1
Cells(2, i).Value = Sheets("Feuil1").Cells(1, ncol - i + 1)
Next i
'insérer la fonction régression
Range(Cells(3, 2), Cells(7, nbXY + 1)).FormulaArray = "=LINEST(Y,X,1,1)"
Cells(9, 2).Value = "Test de significativité individuelle de coefficients"
Cells(10, 1).Value = "t de Student"
Cells(11, 1).Value = "t absolu"
Cells(12, 1).Value = "p-value"
For i = 2 To ncol - 1
Cells(10, i).Value = Cells(3, i).Value / Cells(4, i).Value
Cells(11, i).Value = Math.Abs(Cells(10, i))
'loi de student'
Var = Cells(11, i).Address(False, False)
Valeur = Cells(6, 3).Address(False, False)
pvalue = "=Tdist(" + Var + "," + Valeur + ",2)"
Cells(12, i).FormulaArray = pvalue
Next i
Dim nbX As Integer
nbX = Range("plage").Columns.Count - 2
Cells(14, 2).Value = "Tableau d'analyse de variance"
Cells(15, 2).Value = "Source de variabilité"
Cells(15, 3).Value = "SC"
Cells(15, 4).Value = "Degrés de liberté"
Cells(15, 5).Value = "Carrés moyens"
Cells(16, 2).Value = "SC Expliquée"
Cells(16, 3).Value = Cells(7, 2)
Cells(16, 4).Value = nbX
Cells(16, 5).Formula = Cells(16, 3) / Cells(16, 4)
Cells(17, 2).Value = "SC Résiduelle"
Cells(17, 3).Value = Cells(7, 3)
Cells(17, 4).Value = Cells(6, 3)
Cells(17, 5).Formula = Cells(17, 3) / Cells(17, 4)
Cells(18, 2).Value = "SC Totale"
Cells(18, 3).Formula = Cells(16, 3) + Cells(17, 3)
Cells(18, 4).Formula = Range("Y").Rows.Count - 1
Cells(20, 2).Value = "Evaluation globale de la régression"
Cells(21, 2).Value = "F"
Cells(21, 3).Value = Cells(6, 2).Value
Cells(22, 2).Value = "DDL1"
Cells(22, 3).Value = Range("D16").Value
Cells(23, 2).Value = "DDL2"
Cells(23, 3).Value = Range("D17").Value
Cells(24, 2).Value = "p-value"
'calculer loi F'
Cells(24, 3).Formula = "=FDIST(C21,C22,C23)"
End SubBonjour
Comme je te l'ai (mal) fait comprendre pour moi la régression linéaire c'est quand Hollande est arrivé au pouvoir
Dans la macro j'ai détecté 2 incohérences
Pour la définition de la plage, comme tu recopies 5 colonnes il faut modifier la formule
ThisWorkbook.Names.Add "Plage", RefersTo:="='" & .Name & "'!$A$1:$E$" & .Range("A" & Rows.Count).End(xlUp).RowEnsuite dans la procédure Private Sub Regression()
tu utilises
Feuil1.ActivateEn es tu sur ?
Pour moi cela serait soit
Sheets("Feuil1").Activateou
Feuil2.ActivateSi ce n'est pas ça, clos ce poste et ouvre en un autre avec ce problème en n'oubliant pas de joindre un fichier