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.

45book1.xlsx (9.35 Ko)

Bonjour

A vérifier

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 Sub

J'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 Sub

Bonjour

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).Row

Ensuite dans la procédure Private Sub Regression()

tu utilises

Feuil1.Activate

En es tu sur ?

Pour moi cela serait soit

Sheets("Feuil1").Activate

ou

Feuil2.Activate

Si 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

Rechercher des sujets similaires à "copier lignes vide feuille"