Extraction données dans tableau

Bonjour à toutes et tous

Après un long moment d'absence j'aurai besoin d'aide pour l'extraction de données.

En réalité je veux récupérer dans une suite de chiffre une fréquence.

Le plus simple est de voir mon fichier joint

Merci pour votre aide

16test-tableau.xlsx (10.62 Ko)

bonjour

a tester

=NB.SI(B4:G4;">"&0)

mais il y a un hic es tu sur de tes resultats ?

cordialement

Merci oui en réalité je cherche la fréquence entre la colonne 1 et la moment ou je trouve un 1 .

Dans le cas ou je trouve un 1 je dois afficher comme résultat l'entête de la colonne -1

Merci pour votre aide

Bonjour tapir26200,

Tu a écrit :

Dans le cas où je trouve un 1 je dois afficher comme résultat l'entête de la colonne -1

● si ton 1 est en colonne 4, ça doit retourner : 4 - 1 = 3

● si ton 1 est en colonne 2, ça doit retourner : 2 - 1 = 1

● si ton 1 est en colonne 1, ça doit retourner : 1 - 1 = 0

donc problème : si le résultat est 0, tu ne peux pas faire la différence

entre un 1 trouvé en colonne 1 et pas de 1 trouvé !

C'est pourquoi je te propose 2 tableaux de résultats :

Tableau de résultats n° 1

C'est comme tu l'as demandé, donc avec pour 0 l'ambiguïté décrite ci-dessus.

En B33 : =SIERREUR(EQUIV(1;B4:G4;0)-1;0)

a) formule de B33 tirée à droite jusqu'en K33

b) formules de B33:K33 tirées vers le bas jusqu'en ligne 58

Tableau de résultats n° 2

Vide si 1 non trouvé, et 0 si 1 trouvé en colonne 1.

En B62 : =SIERREUR(EQUIV(1;B4:G4;0)-1;"")

a) formule de B62 tirée à droite jusqu'en K62

b) formules de B62:K62 tirées vers le bas jusqu'en ligne 87

Si besoin, tu peux me demander une adaptation.

Merci de me dire si ça te convient.

Cordialement,

dhany

12test-tableau.xlsx (15.82 Ko)

super merci je vais contrôler mais je pense que c'est cela ....!!!!

Un immense merci

Bonjour

Me revoilà

Super la fonction marche mais j'aurai besoin du calcul inverse qui par du moment ou j'ai un 1 et qui compte le nombre de 0 merci

Bonjour tapir26200,

Me revoilà aussi !

Je te propose ce fichier Excel :

5test-tableau.xlsm (19.80 Ko)

Dans le tableau résultat, une cellule est vide s'il n'y a aucun 1 dans une série ; sinon, c'est qu'un 1 a été rencontré, et donc ça retourne le nombre de zéros présents à sa droite : 0 si aucun 0 à droite du 1er 1, n si n 0 à droite du 1er 1 ; je te laisse vérifier si tout est ok.

Alt F11 pour voir le code VBA, puis revenir sur Excel

Si besoin, tu peux demander une adaptation.

Merci de me dire si ça te convient.

Cordialement,

dhany

J'ai mis le fichier avec le résultat que je désire

5test-tableau2.xlsm (17.05 Ko)

Je te retourne ton fichier modifié :

13test-tableau2.xlsm (19.30 Ko)

Cordialement,

dhany

Merci beaucoup, étant néophyte en macro comment je peux récupérer la macro du fichier pour l'a copier dans le fichier d'origine et que cela fonctionne...

Merci

Ton fichier d'origine doit être un fichier .xlsm ... comme c'est déjà le cas pour le fichier "test tableau2.xlsm" que tu as joint dans ton message d'hier à 17:06.

Après avoir ouvert ton fichier d'origine .xlsm fais Alt F11 ➯ fenêtre « Microsoft Visual Basic » ; fais Alt i m pour insérer un nouveau module, et sur la page blanche qui apparaît à droite, fais-y un copier / coller du code VBA ci-dessous :

Option Explicit

Function Nb0() As Variant
  Application.Volatile
  Dim chn$, l&, c As Byte, p As Byte
  With Application.Caller: l = .Row - 29: c = .Column: End With
  For p = c To c + 5: chn = chn & Cells(l, p): Next p
  p = InStr(chn, "1")
  If p = 0 Then
    Nb0 = ""
  Else
    Nb0 = Len(Replace$(Right$(chn, Len(chn) - p), "1", ""))
  End If
End Function

Facultatif (mais c'est mieux) : fais Alt d et choisis le 1er item « Compiler VBAProject » ; cet item est grisé si le code VBA a déjà été compilé et qu'il n'y a eu aucun changement.

Alt F11 pour retourner sur Excel ; dans ton 2ème tableau du bas, mets cette formule dans la 1ère cellule où tu veux avoir un résultat : =Nb0() ; c'est une fonction sans aucun argument, tout comme : =AUJOURDHUI()

Il reste juste à tirer cette formule à droite jusqu'à la dernière colonne du tableau, puis en laissant cette 1ère ligne sélectionnée, tirer le tout vers le bas jusqu'à la dernière ligne du tableau.

Fini, t'as droit à un repos bien mérité !

Cordialement,

dhany

Merci pour ton temps...!

Le repos ce n'est pas moi qui le mérite...! Je risque d'avoir encore besoin de ton aide prochainement....

Merci encore

je viens de faire la manip.

Ok mais en réalité pour simplifié le tableau que j'ai 130 colonnes sur 50 lignes....

Le paquet de colonnes à prendre en compte est par groupe de 25 soit de la colonne 1 -- 25 puis 2-26 puis 3-27....

Je te passerais bien le fichier mais il est trop gros....

Voici les 2 adaptations à faire pour le code VBA :

1) par rapport au nombre de lignes

Prends d'abord pour exemple "test tableau 2.xlsm" ; la 1ère ligne de donnée de ton tableau bas est la ligne 33 ; la 1ère ligne de donnée de ton tableau haut est la ligne 4 ; 33 - 4 = 29 ; d'où : l = .Row - 29 ; remplace 29 par ce qu'il faut selon ton vrai tableau.

2) par rapport au groupe de 25

For p = c To c + 5 ; 5 était pour un groupe de 6, donc pour un groupe de 25, à remplacer par 24 : For p = c To c + 24

ATTENTION : si tu as un tableau de plus de 255 colonnes, tu devras remplacer

Dim chn$, l&, c As Byte, p As Byte par : Dim chn$, l&, c%, p%

car le type Byte est pour des nombres de 0 à 255.

c et p seront alors des variables de type Integer

Au niveau de la feuille de calcul, la formule est identique : =Nb0()

mais il faut la tirer plus loin à droite jusqu'à la dernière colonne,

puis tirer la ligne entière plus loin en bas jusqu'à la dernière ligne.

dhany

Rechercher des sujets similaires à "extraction donnees tableau"