Récupérer les valeurs des cellules non-vides et les mettre ailleurs

sourcier08

XLDnaute Occasionnel
Bonjour,

Je suis devant un problème que je n'arrive pas à résoudre.

J'ai placé un tableau sur l'onglet accueil avec des données.
J'aimerai que ces données soient transférées dans un autre tableau (plus précisément à partir de la cellule b7 de mes autres tableaux). J'ai 12 onglets où je pourrais reprendre ce qu'il y a dans l'accueil mais indépendamment.

Chaque feuille aura son bouton pour appeler cette macro et n'inscrira les valeurs que cette feuille là.


Je suppose qu'un compteur et qu'une boucle sera nécessaire et j'aimerai bien comprendre comment ça fonctionne dans ce cas car là je suis perdu.

Merci à celui qui pourra m'aider de bien détailler.
 

Pièces jointes

  • comptes_credit_mutuel.xlsm
    135.3 KB · Affichages: 46
  • comptes_credit_mutuel.xlsm
    135.3 KB · Affichages: 45
  • comptes_credit_mutuel.xlsm
    135.3 KB · Affichages: 50
C

Compte Supprimé 979

Guest
Re : Récupérer les valeurs des cellules non-vides et les mettre ailleurs

Salut Sourcier08

Voici le code que tu souhaites
VB:
Sub AjoutDonnées()
  Dim DLigS As Long, Lig As Long, NLig As Long
  ' Récupérer la dernière ligne remplie du tableau de la feuille accueil
  DLigS = Sheets("accueil").Range("B" & Rows.Count).End(xlUp).Row
  ' Vérifier ques des lignes ont bien été saisies, sinon on sort
  If DLigS <= 30 Then Exit Sub
  ' Avec la feuille active
  With ActiveSheet
    ' Pour chaque ligne remplie de la feuille accueil
    For Lig = 31 To DLigS
      ' Récupérer la prochaine ligne vide de la feuille
      NLig = .Range("A" & Rows.Count).End(xlUp).Offset(1, 0).Row
      ' A défaut, inscrire la date du jour
      .Range("A" & NLig) = Format(Now(), "mm/dd/yyyy")
      ' Inscrire les données
      .Range("B" & NLig) = Sheets("accueil").Range("B" & Lig)
      ' Si la colonne H de la page d'accueil contient une valeur
      If Sheets("accueil").Range("H" & Lig) <> 0 Then
        ' On l'inscrit dans les débits de la feuille active
        .Range("E" & NLig).Value = CDec(Sheets("accueil").Range("H" & Lig))
      ElseIf Sheets("accueil").Range("I" & Lig) <> 0 Then
        .Range("F" & NLig).Value = CDec(Sheets("accueil").Range("I" & Lig))
      End If
    Next Lig
  End With
End Sub
Charge à toi de créer les boutons et de les lier à cette macro ;)

A+
 

sourcier08

XLDnaute Occasionnel
Re : Récupérer les valeurs des cellules non-vides et les mettre ailleurs

Merci beaucoup...

...mais, et c'est de ma faute, je veux obligatoirement que ça insère des lignes dans le tableau à partir de la ligne 7.
J'ai une plage qui va de A6 à A8 et si je sors de celle-ci, mes calculs sont faussés.
Bien entendu, le nombre de lignes peut varier à l'accueil donc il faudrait insérer autant de lignes qu'il y en a de non vides à l'accueil.


Désolé, j'ai oublié de le préciser.

Merci pour les détails, c'est super !
 
C

Compte Supprimé 979

Guest
Re : Récupérer les valeurs des cellules non-vides et les mettre ailleurs

Re,

Que je ne t'y reprenne pas ;) :)
VB:
Sub AjoutDonnées()
  Dim DLigS As Long, Lig As Long
  ' Récupérer la dernière ligne remplie du tableau de la feuille accueil
  DLigS = Sheets("accueil").Range("B" & Rows.Count).End(xlUp).Row
  ' Vérifier ques des lignes ont bien été saisies, sinon on sort
  If DLigS <= 30 Then Exit Sub
  ' Avec la feuille active
  With ActiveSheet
    ' Pour chaque ligne remplie de la feuille accueil
    ' Commencer par al fin pour respecter l'ordre d'affichage
    ' lors de l'insertion de lignes
    For Lig = DLigS To 31 Step -1
      ' Insérer une ligne à partir de la ligne 7
      .Range("A7:F7").Insert Shift:=xlDown
      ' Sur la ligne 7 inscrire les données
      ' Par défaut, inscrire la date du jour
      .Range("A7") = Format(Now(), "mm/dd/yyyy")
      ' Inscrire les données
      .Range("B7") = Sheets("accueil").Range("B" & Lig)
      ' Si la colonne H de la page d'accueil contient une valeur
      If Sheets("accueil").Range("H" & Lig) <> 0 Then
        ' On l'inscrit dans les débits de la feuille active
        .Range("E7").Value = CDec(Sheets("accueil").Range("H" & Lig))
      ElseIf Sheets("accueil").Range("I" & Lig) <> 0 Then
        .Range("F7").Value = CDec(Sheets("accueil").Range("I" & Lig))
      End If
    Next Lig
  End With
End Sub

Bien entendu, le nombre de lignes peut varier à l'accueil donc il faudrait insérer autant de lignes qu'il y en a de non vides à l'accueil.
C'est bien prévu dans le code


A+
 

Discussions similaires

Statistiques des forums

Discussions
312 115
Messages
2 085 451
Membres
102 889
dernier inscrit
monsef JABBOUR