Prendre une autre cellule si vide

Bonjour à tous,

J'aimerais copier la valeur d'une cellule sur une autre feuille.

En effet, sur une feuille (Feuille1_BDD) j'ai deux colonnes représentant des montants différents et dans mon autre feuille (Feuille2_Résultats), j'ai le total de ces deux colonnes. Une fois sur deux la colonne est vide dans ma première feuille car nous devons prendre qu'un montant.

Je met en pièce jointe un exemple plus explicite pour que vous compreniez!

Il faudrait que j'arrive à faire une boucle qui prend le résultat d'une colonne ou de l'autre dans ma Feuille1_BDD pour le copier sur mon total en Feuille 2_Résultats, dans mon exemple il y a peu de données mais je manipule un tableau avec beaucoup de données d'où le fait d'automatiser cette tâche car la je copie-colle et c'est pas pratique.

J'ai esquissé un code avec l'enregistreur de macro!

Range("A2").Select
        ActiveCell.FormulaR1C1 = "=RC[-2]+RC[-1]"
        Range("A2").Select
        Selection.AutoFill Destination:=Range("A2:A5000")
        Columns("A:A").Select

Je maitrise pas complètement VB, mais je voudrai faire :

Si la colonne "Montant hors délai" est vide alors copier-coller la colonne "montant mission" dans la colonne "Total montant" (sur une autre feuille du coup) sinon copier coller "montant hors délai" dans la colonne "Total montant"

Difficile quand on ne maitrise pas quelque chose

Merci d'avance de votre aide...

xszma

10exemple.xlsx (10.19 Ko)

Bonjour Xszema, bonjour le forum,

la règle d'or en VBA c'est éviter autant que possible les Select et autres Activate inutiles. Il ne font que ralentir l'exécution du code et sont source de plantage. Ici j'utilise des variables tableau (TV et TL) car l'accès aux données et beaucoup plus rapide que l'accès direct aux cellules du tableau.

Essaie comme ça :

Sub Macro1()
Dim OS As Worksheet 'déclare la variable OS (Onglet Source)
Dim OD As Worksheet 'déclare la variable OD (Onglet Destination)
Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
Dim NL As Integer 'déclare la variable NL (Nombre de Lignes)
Dim I As Integer 'déclare la variable I (Incrément)
Dim TL() As Variant 'déclare la variable TL (Tableau des Lignes)

Set OS = Worksheets("Feuille1_BDD") 'définit l'onglet source OS
TV = OS.Range("A1").CurrentRegion 'définit le tableau des valeurs TV
NL = UBound(TV, 1) 'définit le nombre de lignes NL du tableau des valeurs TV
Set OD = Worksheets("Feuille2_Résultats") 'définit l'onglet destination OD
OD.Range("A1").CurrentRegion.Offset(1, 0).ClearContents 'vide d'éventuelles anciennes données dans l'onglet OD
ReDim TL(1 To NL) 'redimensionne le tableau des lignes TL
TL(1) = "Total montant" 'définit la ligne 1 de TL
For I = 2 To NL 'boucle sur toutes les lignes I du tableau des valeurs (en partant de la seconde)
    TL(I) = IIf(TV(I, 1) <> "", CInt(TV(I, 1)), CInt(TV(I, 2))) 'définit la ligne I de TL (la donnée en colonne 1 si elle n'est pas vide, sinon la donnée en colonne 2)
Next I 'prochaine ligne de la boucle
OD.Range("A1").Resize(UBound(TV, 1), 1).Value = Application.Transpose(TL) 'renvoie dans A1 redimensionnée de l'onglet OD, le tableau TL transposé
End Sub
Rechercher des sujets similaires à "prendre vide"